パトローニの構成

Patroniの構成には3つのタイプがあります。

  • グローバル dynamic configuration 。

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

  • ローカル configuration file (patroni.yml)。

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

  • Environment configuration 。

    環境変数を使用して、一部の「ローカル」構成パラメータを設定/上書きすることができます。環境構成は、動的環境で実行していて、一部のパラメーターが事前にわかっていない場合に非常に役立ちます(たとえば、 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

  • max_locks_per_transaction :64

  • max_worker_processes :8

  • max_prepared_transactions :0

  • wal_level :ホットスタンバイ

  • track_commit_timestamp :オフ

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

  • max_wal_senders :5

  • max_replication_slots :5

  • wal_keep_segments :8

  • wal_keep_size :128MB

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

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

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

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

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

  • hot_standby: on

  • wal_log_hints: on -Postgres9.4以降用。

安全のため、上記のリストのパラメータは postgresql.conf には書き込まれませんが、引数のリストとして pg_ctl start に渡され、 postgresql.conf よりも高い優先順位が与えられます。

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

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

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

  • custom_conf パラメータが設定されている場合、指定されたファイルが基本設定として使用され、「postgresql.base.conf」と「postgresql.conf」は無視されます。

  • custom_conf パラメータが設定されておらず、「postgresql.base.conf」が存在する場合、名前が変更された「元の」設定が含まれており、基本設定として使用されます。

  • 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)が可能になり、Patroniの実行に不可欠なパラメーターが確実に適用されるようになります(4)。また、「postgresql」を管理する構成ツールの余地も残ります。Patroniを介さずにconf`を直接実行します(1)。

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

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

  • max_connections

  • max_prepared_transactions

  • max_locks_per_transaction

  • max_wal_senders

  • max_worker_processes

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

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

  1. patronictl編集構成 を介して(またはRESTAPI /config エンドポイントを介して)変更を適用する

  2. Patroni再起動 経由(またはRESTAPI /restart エンドポイント経由)のノードの再起動

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

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

  • これらの設定のいずれかの値を increase にしたい場合は、次のようにします。

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

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

  • これらの設定のいずれかの値を decrease にしたい場合は、次のようにします。

    1. まずプライマリを再起動します

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

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

構成の生成と検証

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

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

  • ローカルで実行されているPostgreSQLインスタンスのPatroni構成ファイルを作成します(例: Patroni integration の準備ステップとして)。

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

Patroni構成のサンプル

patroni --generate-sample-config [configfile]

説明

サンプルのPatroni構成ファイルを yaml 形式で生成します。パラメータ値は yaml を使用して定義されます。設定されていない場合は、Patroniで使用されるデフォルト値または後でユーザーが定義する値の #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インスタンス用のPatroni構成を yaml 形式で生成します。指定されたDSN(優先されます)またはPostgreSQL yaml _のいずれかがPostgreSQL接続に使用されます。パスワードが指定されていない場合は、プロンプトから入力する必要があります。

ソースPostgresインスタンスで定義されたすべての非内部GUCは、設定ファイル、ポストマスターコマンドライン、または環境変数を通じて設定された場合には独立して、次の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 :収集された他のすべてのPostgreSQLGUC。

scope 、 postgresql.listen または postgresql.datadir がPostgresGUCから設定されていない場合は、それぞれの 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]

説明

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

パラメーター

configfile

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