パトローニ構成

Patroni構成には3種類があります。

  • グローバル dynamic configuration 。

    これらのオプションはDCS分散構成ストアに保存され、すべてのクラスターノードに適用されます。動的構成は、 patronictl edit-config ツールまたはPatroni patronictl edit-config を使用して、いつでも設定できます。変更されたオプションが起動構成の一部でない場合、それらは次のウェイクアップサイクルですべてのノードに非同期的に適用され、その後リロードされます。ノードが構成を適用するために再起動が必要な場合コンテキストポストマスターを使用した patronictl edit-config _の場合、値が変更された場合、これを示す特別なフラグ pending_restart が members.data JSONに設定されます。さらに、ノードステータスは /"restart_pending/": true を表示することによりこれを示します。

  • ローカル configuration file patroni.yml 。

    これらのオプションは構成ファイルで定義され、動的構成より優先されます。 patroni.yml は、 SIGHUPをPatroniプロセスに送信するか、 POST /reload REST-API要求を実行するか、 patroni.yml を実行することにより、実行時にPatroniを再起動せずに変更およびリロードできます。ローカル構成は、単一のYAMLファイルまたはディレクトリのいずれかです。ディレクトリの場合、そのディレクトリ内のすべてのYAMLファイルは、ソートされた順序で1つずつロードされます。キーが複数のファイルで定義されている場合、最後のファイルの出現が優先されます。

  • Environment configuration 。

    一部の/"Local/"構成パラメーターを環境変数で設定/オーバーライドすることが可能です。環境構成は、動的環境で実行しており、一部のパラメーターを事前に知らない場合に非常に役立ちますたとえば、 docker 内で実行している場合、外部IPアドレスを知ることはできません。

重要なルール

Patroniによって制御されるPostgreSQLパラメーター

一部のPostgreSQLパラメーター must hold the same values on the primary and the replicas 。これらの場合、 must hold the same values on the primary and the replicas 。それらの値を変更または設定するには、DCSの共有構成を変更する必要があります。以下は、このようなパラメーターの実際のリストとデフォルトおよび最小値です。

  • max_connections デフォルト値100、最小値25

  • max_locks_per_transaction デフォルト値64、最小値32

  • max_worker_processes デフォルト値8、最小値2

  • max_prepared_transactions デフォルト値0、最小値0

  • wal_level デフォルト値hot_standby、受け入れられた値 hot_standby、レプリカ、論理

  • track_commit_timestamp デフォルト値off

以下のパラメーターの場合、PostgreSQLは、プライマリとすべてのレプリカの間で値が等しい必要はありません。ただし、レプリカがいつでもプライマリになる可能性を考慮すると、それらを別に設定することはあまり意味がありません。したがって、 Patroni restricts setting their values to the Patroni restricts setting their values to the 。

  • max_wal_senders デフォルト値10、最小値3

  • max_replication_slots デフォルト値10、最小値4

  • wal_keep_segments デフォルト値8、最小値1

  • wal_keep_size デフォルト値128MB、最小値16MB

  • wal_log_hints :on

これらのパラメーターは検証されて、正常であること、または最小値を満たしていることが確認されます。

Patroniによって制御されるPostgresパラメーターは他にもいくつかあります。

  • listen_addresses - postgresql.listen または PATRONI_POSTGRESQL_LISTEN 環境変数から設定されます

  • port - postgresql.listen または PATRONI_POSTGRESQL_LISTEN 環境変数から設定されます

  • cluster_name - scope または PATRONI_SCOPE 環境変数から設定されます

  • hot_standby: on

安全のため、上記のリストのパラメーターは postgresql.conf に書き込まれ、引数のリストとして postgres に渡され、最高の優先順位を与えます wal_keep_segments および wal_keep_size を除きます。

postgresql.listen 、 postgresql.listen 、その postgresql.listen 、つまりPatroni postgresql.listen または postgresql.listen 変数を介して postgresql.listen 、 postgresql.listen のようなパラメーターもあります。ほとんどの場合、ローカル構成は動的構成をオーバーライドします。

ローカルまたは動的構成オプションを適用すると、次のアクションが実行されます。

  • ノードは最初に`postgresql.base.conf`ファイルが存在するかどうか、または custom_conf パラメータが設定されているかどうかを確認します。

  • custom_conf パラメータが設定されている場合、指定されたファイルはベース構成として使用され、`postgresql.base.conf`および`postgresql.conf`を無視します。

  • custom_conf パラメータが設定されず、`postgresql.base.conf`が存在する場合、名前が変更された/"original/"構成が含まれ、ベース構成として使用されます。

  • custom_conf も`postgresql.base.conf`も存在しない場合、元の`postgresql.conf`の名前が`postgresql.base.conf`に名前変更され、ベース構成として使用されます。

  • 動的オプション上記の例外を含むは`postgresql.conf`にダンプされ、インクルードは`postgresql.conf`でベース構成`postgresql.base.conf`または custom_conf のファイルのいずれかに設定されます。したがって、構成ファイルを再度読み取って、インクルードが存在するかどうかを確認することなく、新しいオプションを適用できます。

  • Patroniがクラスターを管理するために必要な一部のパラメーターは、コマンドラインを使用してオーバーライドされます。

  • 再起動が必要なオプションが変更される場合 pg_settingsのコンテキストとこれらのオプションの実際の値を確認する必要があります。そのノードにpending_restartフラグが設定されます。このフラグは、再起動時にリセットされます。

パラメーターは次の順序で適用されますランタイムに最高の優先順位が与えられます。

  1. ファイル`postgresql.base.conf`または custom_conf ファイル設定されている場合からパラメータをロードします

  2. ファイル`postgresql.conf`からパラメータをロードします

  3. ファイル`postgresql.auto.conf`からパラメータをロードします

  4. `-o --name=value`を使用した実行時パラメーター

これにより、すべてのノードの構成2、 ALTER SYSTEM を使用した特定のノードの構成3が可能になり、パトロニの実行に不可欠なパラメーターが適用されるように保証4、および`postgresqlを管理する構成ツールの余地を残します。 Patroniを介さずにconf`を直接呼び出します(1)。

共有メモリに影響を与えるPostgreSQLパラメーター

PostgreSQLには、使用する共有メモリのサイズを決定するパラメーターがいくつかあります。

  • max_connections

  • max_prepared_transactions

  • max_locks_per_transaction

  • max_wal_senders

  • max_worker_processes

これらのパラメーターを変更するには、PostgreSQLの再起動を有効にする必要があり、共有メモリ構造をプライマリノードよりもスタンバイノードで小さくすることはできません。

前に説明したように、パトローニは、通常次のもので構成される dynamic configuration を介して値の変更を制限します。

  1. patronictl edit-config またはREST API /config エンドポイントを介して変更を適用する

  2. patronicl restart またはREST API /restart エンドポイントを介したノードの再起動

Note: Note: コマンドまたはREST API /restart エンドポイントを介してPostgreSQLノードの再起動を実行する必要があることに注意してください。 Patroniデーモンを再起動することによりPostgreSQLを再起動しようとします。たとえば、 systemctl restart patroni を実行すると、プライマリノードを再起動している場合、クラスターでフェールオーバーが発生する可能性があります。

ただし、これらの設定は共有メモリを管理するため、ノードを再起動するときに追加の注意を払う必要があります。

  • これらの設定の値を increase する場合

    1. 最初にすべてのスタンバイを再起動します

    2. その後、プライマリを再起動します

  • これらの設定の値を decrease する場合

    1. 最初にプライマリを再起動します

    2. その後、すべてのスタンバイを再起動します

Note: これらの設定の値を Note: した後、すべてのノードを一度に再起動しようとすると、Patroniは変更を無視し、元の設定値でスタンバイを再起動するため、後でスタンバイを再度再起動する必要があります。 Patroniは、スタンバイノードの pg_controldata で表示されるものよりも低い値にPostgreSQLは`FATAL`メッセージで終了するため、スタンバイが無限クラッシュループに入ることを防ぐためにこれを行います。言い換えれば、プライマリでのこれらの変更に関してプライマリで pg_controldata が最新の状態になった場合にのみ、スタンバイの設定を下げることができます。

その詳細については、 PostgreSQL Administrator's Overview _を参照してください。

Patroni構成パラメーター

また、次のPatroni構成オプション can be changed only dynamically 。

  • ttl 30

  • loop_wait :10

  • retry_timeouts :10

  • maximum_lag_on_failover 1048576

  • max_timelines_history : 0

  • check_timeline :false

  • postgresql.use_slots :true

これらのオプションを変更すると、PatroniはDCSに保存されている構成の関連セクションを読み取り、その実行時値を変更します。

Patroniノードは、構成がPostgresデータディレクトリにあるファイル patroni.dynamic.json に変更されるたびに、ディスクのDCSオプションの状態をダンプしています。これらのオプションがDCSに完全に存在しない場合、または無効な場合、リーダーのみがオンディスクダンプからこれらのオプションを復元できます。

構成の生成と検証

Patroniは、Patroni local configuration 生成と検証のためのコマンドラインインターフェイスを提供します。 patroni 実行可能ファイルを使用すると、次のことができます。

  • サンプルのローカルPatroni構成を作成します。

  • ローカルで実行されているPostgreSQLインスタンスのPatroni構成ファイルを作成しますたとえば Patroni integration の準備手順として。

  • 指定されたPatroni構成ファイルを検証します。

Patroni構成のサンプル

patroni --generate-sample-config [configfile]

説明

yaml 形式でサンプルのPatroni構成ファイルを生成します。パラメーター値は yaml を使用して定義されます。それ以外の場合、パトロニで使用されるデフォルトまたはユーザーが後で定義する値の #FIXME 文字列。

一部のデフォルト値は、ローカル設定に基づいて定義されます。

  • postgresql.listen 現在のマシンのホスト名と標準の 5432 ポートの gethostname 呼び出しによって返されたIPアドレス。

  • postgresql.connect_address 現在のマシンのホスト名と標準の 5432 ポートの gethostname 呼び出しによって返されたIPアドレス。

  • postgresql.authentication.rewind は、PostgreSQLバージョンをバイナリから定義でき、バージョンが11以降の場合にのみ定義されます。

  • restapi.listen 現在のマシンのホスト名と標準の 8008 ポートの gethostname 呼び出しによって返されたIPアドレス。

  • restapi.connect_address 現在のマシンのホスト名と標準の 8008 ポートの gethostname 呼び出しによって返されたIPアドレス。

パラメーター

configfile - 結果の保存に使用される構成ファイルへのフルパス。提供されない場合、結果は stdout に送信されます。

実行中のインスタンスのPatroni構成

patroni --generate-config [--dsn DSN] [configfile]

説明

ローカルで実行されているPostgreSQLインスタンスの yaml 形式でPatroni構成を生成します。 PostgreSQL接続には、提供されたDSN優先またはPostgreSQL yaml _のいずれかが使用されます。パスワードを提供しない場合、プロンプトから入力する必要があります。

ソースPostgresインスタンスで定義されたすべての非内部GUCは、構成ファイル、postmasterコマンドライン、または環境変数を介して設定された場合とは無関係に、次のPatroni構成パラメーターのソースとして使用されます。

  • scope cluster_name GUC値。

  • postgresql.listen listen_addresses および port GUC値。

  • postgresql.datadir data_directory GUC値。

  • postgresql.parameters archive_command 、 restore_command 、 archive_cleanup_command 、 recovery_end_command 、 ssl_passphrase_command 、 hba_file 、 ident_file 、 config_file GUC値。

  • bootstrap.dcs 収集された他のすべてのPostgreSQL GUC。

scope 、 postgresql.listen または postgresql.datadir がPostgres GUCから設定されていない場合、各 scope 値が使用されます。

値定義に適用される他のルール

  • name PATRONI_NAME 環境変数設定されている場合は値、それ以外の場合は、現在のマシンのホスト名。

  • postgresql.bin_dir 実行中のインスタンスから収集されたPostgresバイナリへのパス。

  • postgresql.connect_address 現在のマシンのホスト名とインスタンス接続または port GUC値に使用されるポートの gethostname 呼び出しによって返されたIPアドレス。

  • postgresql.authentication.superuser インスタンス接続に使用される構成。

  • postgresql.pg_hba ソースインスタンスの hba_file から収集された行。

  • postgresql.pg_ident ソースインスタンスの ident_file から収集された行。

  • restapi.listen 現在のマシンのホスト名と標準の 8008 ポートの gethostname 呼び出しによって返されたIPアドレス。

  • restapi.connect_address 現在のマシンのホスト名と標準の 8008 ポートの gethostname 呼び出しによって返されたIPアドレス。

Environment configuration を使用して定義された他のパラメーターも構成に含まれます。

パラメーター

configfile

結果の保存に使用される構成ファイルへのフルパス。提供されない場合、結果は stdout に送信されます。

dsn

GUC値を取得するローカルPostgreSQLインスタンスのオプションのDSN文字列。

Patroni構成の検証

patroni --validate-config [configfile] [--ignore-listen-port | -i]

説明

指定されたPatroni構成を検証し、失敗したチェックに関する情報を出力します。

パラメーター

configfile

確認する構成ファイルへのフルパス。指定されない場合、またはファイルが存在しない場合、 PATRONI_CONFIG_VARIABLE 環境変数から読み取るか、設定されていない場合は PATRONI_CONFIG_VARIABLE から読み取ろうとします。

--ignore-listen-port | -i

configfile の検証時に既に使用されている listen ポートのバインド失敗を無視するオプションのフラグ。

--print | -p

検証が成功した後に、ローカル構成環境構成オーバーライドを含むを印刷するオプションのフラグ。