本文へ移動

これはセクションの複数ページ印刷用ビューです。 .

このページの通常のビューに戻る.

Patroni 構成

Patroni 構成モデル、優先順位ルール、および検証ツール。

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

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

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

  • 環境構成 。 環境変数を使用して、一部の「ローカル」構成パラメータを設定/上書きすることができます。環境構成は、動的環境で実行していて、一部のパラメーターが事前にわかっていない場合に非常に役立ちます (たとえば、docker 内で実行しているときに外部 IP アドレスを知ることはできません)。


重要なルール

PostgreSQL パラメータは Patroni によって制御されます

PostgreSQL パラメーターの一部は、プライマリーとレプリカで同じ値を保持する必要があります。これらについては、ローカルの patroni 設定ファイルまたは環境変数で設定された値は効果がありません。値を変更または設定するには、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、replica、logical
  • track_commit_timestamp: デフォルト値はオフです

以下のパラメータの場合、PostgreSQL はプライマリーとすべてのレプリカ間で同じ値を必要としません。ただし、レプリカがいつでもプライマリーになる可能性を考慮すると、これらのパラメーターを異なる値に設定することはあまり意味がありません。したがって、Patroni は、これらの値の設定を 動的構成 に制限しています。

  • max_wal_senders: デフォルト値 10、最小値 3
  • max_replication_slots: デフォルト値 10、最小値 4
  • wal_keep_segments: デフォルト値 8、最小値 1
  • wal_keep_size: デフォルト値 128MB、最小値 16MB
  • wal_log_hints: オン

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

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 を除き) ALTER SYSTEM すら超える最も高い優先順位が与えられます。

postgresql.listen や postgresql.data_dir のように、ローカルでのみ設定可能なパラメーターもいくつかあります。つまり、Patroni 設定ファイル 内で、または環境構成 の変数経由で設定します。ほとんどの場合、ローカル構成は動的構成をオーバーライドします。

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

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

共有メモリに関わる PostgreSQL パラメータ

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

  • max_connections
  • max_prepared_transactions
  • max_locks_per_transaction
  • max_wal_senders
  • max_worker_processes

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

前に説明したように、Patroni は、これらの値の変更を 動的構成 経由に限定します。通常、これは次のもので構成されます。

  1. patronictl_edit_config (または REST API /config エンドポイント経由) による変更の適用
  2. patronictl_restart (または REST API /restart エンドポイント経由) によるノードの再起動

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

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

  • これらの設定のいずれかの値を増加させたい場合:

    1. 最初にすべてのスタンバイを再起動します
    2. その後プライマリーを再起動します
  • これらの設定のいずれかの値を減少させたい場合:

    1. 最初にプライマリーを再起動します
    2. その後、すべてのスタンバイを再起動します

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

詳細については、PostgreSQL 管理者の概要 を参照してください。

Patroni 構成パラメータ

また、次の Patroni 構成オプションは動的にのみ変更可能です:

  • ttl: 30
  • loop_wait: 10
  • retry_timeout: 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 ローカル構成 の生成と検証のためのコマンドライン インターフェイスを提供します。 patroni 実行可能ファイルを使用すると、次のことが可能になります。

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

Patroni 構成のサンプル

patroni --generate-sample-config [configfile]

説明

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

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

  • postgresql.listen: gethostname が返す現在のマシンのホスト名を getaddrinfo で解決した IP アドレスと標準の 5432 ポート。
  • postgresql.connect_address: gethostname が返す現在のマシンのホスト名を getaddrinfo で解決した IP アドレスと標準の 5432 ポート。
  • postgresql.authentication.rewind: PostgreSQL バージョンをバイナリから定義でき、そのバージョンが 11 以降である場合にのみ定義されます。
  • restapi.listen: gethostname が返す現在のマシンのホスト名を getaddrinfo で解決した IP アドレスと標準の 8008 ポート。
  • restapi.connect_address: gethostname が返す現在のマシンのホスト名を getaddrinfo で解決した IP アドレスと標準の 8008 ポート。

パラメータ

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

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

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

説明

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

ソース Postgres インスタンスで定義されたすべての非内部 GUC は、構成ファイル、postmaster コマンドライン、または環境変数のいずれで設定されたものであるかにかかわらず、次の Patroni 構成パラメーターのソースとして使用されます:

  • scope: cluster_name GUC 値;
  • postgresql.listen: listen_addresses および port GUC 値。
  • postgresql.data_dir: 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.data_dir が Postgres GUC から設定されていない場合は、それぞれの 環境構成 値が使用されます。

値の定義に適用されるその他のルールは次のとおりです。

  • name: PATRONI_NAME 環境変数値 (設定されている場合)、そうでない場合は現在のマシンのホスト名。
  • postgresql.bin_dir: 実行中のインスタンスから収集された Postgres バイナリへのパス。
  • postgresql.connect_address: gethostname が返す現在のマシンのホスト名を getaddrinfo で解決した IP アドレスと、インスタンス接続に使用されるポートまたは port GUC 値。
  • postgresql.authentication.superuser: インスタンス接続に使用される構成。
  • postgresql.pg_hba: ソース インスタンスの hba_file から収集された行。
  • postgresql.pg_ident: ソース インスタンスの ident_file から収集された行。
  • restapi.listen: gethostname が返す現在のマシンのホスト名を getaddrinfo で解決した IP アドレスと標準の 8008 ポート。
  • restapi.connect_address: gethostname が返す現在のマシンのホスト名を getaddrinfo で解決した IP アドレスと標準の 8008 ポート。

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

パラメータ

configfile 結果を保存するために使用される構成ファイルへのフルパス。指定しない場合、結果は stdout に送信されます。

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

Patroni 構成を検証する

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

説明

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

パラメータ

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

--ignore-listen-port | -i configfile を検証するときに、すでに使用されている listen ポートのバインド失敗を無視するためのオプションのフラグ。

--print | -p 正常に検証された後にローカル構成 (環境構成のオーバーライドを含む) を出力するためのオプションのフラグ。

1 - 動的構成設定

動的な構成設定は DCS に保存され、クラスター全体に適用されます。

動的構成は DCS (分散構成ストア) に保存され、すべてのクラスター ノードに適用されます。

動的構成を変更するには、patronictl_edit_config ツールまたは Patroni REST API を使用できます。

  • loop_wait: ループがスリープする秒数。デフォルト値: 10、可能な最小値: 1
  • ttl: リーダー ロックを取得する TTL (秒単位)。これは、自動フェイルオーバー プロセスが開始されるまでの時間と考えてください。デフォルト値: 30、可能な最小値: 20
  • retry_timeout: DCS および PostgreSQL 操作の再試行のタイムアウト (秒単位)。この値より短い DCS やネットワークの問題が発生しても、Patroni はリーダーをデモートしません。デフォルト値: 10、可能な最小値: 3
警告

loop_wait、retry_timeout、ttl の値を変更する際は、次のルールに従う必要があります。

loop_wait + 2 * retry_timeout <= ttl
  • maximum_lag_on_failover: フォロワーがリーダーの選出に参加するために許容される最大遅延バイト数。
  • primary_race_backoff: プライマリーからの WAL レプリケーションがまだ進行中の場合、スタンバイでのリーダーの競争を primary_race_backoff 秒延期します。これにより、Patroni が一時的に応答しなくなることによって引き起こされる不必要なフェイルオーバーを最小限に抑えることができます。デフォルト値: 0 (無効)。
  • maximum_lag_on_syncnode: 同期フォロワーが異常な候補とみなされ、健全な非同期フォロワーによってスワップされるまでに、同期フォロワーが遅れる可能性がある最大バイト数。 Patroni は、複数のフォロワーがある場合は最大レプリカ lsn を使用します。それ以外の場合は、リーダーの現在の wal lsn を使用します。デフォルトは -1 です。値が 0 以下に設定されている場合、Patroni は同期の異常なフォロワーを交換するアクションを実行しません。トランザクション量が多いときに Patroni が同期フォロワーを頻繁にスワップしないように、十分大きな値を設定してください。
  • max_timelines_history: DCS に保持されるタイムライン履歴アイテムの最大数。デフォルト値: 0。 0 に設定すると、完全な履歴が DCS に保存されます。
  • primary_start_timeout: フェイルオーバーがトリガーされる前にプライマリーが障害から回復できる時間 (秒単位)。デフォルトは 300 秒です。 0 に設定すると、可能であればクラッシュが検出された直後にフェイルオーバーが実行されます。非同期レプリケーションを使用する場合、フェイルオーバーによりトランザクションが失われる可能性があります。プライマリー障害における最悪の場合のフェイルオーバー時間は loop_wait + primary_start_timeout + loop_wait ですが、primary_start_timeout が 0 の場合は loop_wait のみです。耐久性と可用性のトレードオフに応じて値を設定します。
  • primary_stop_timeout: Postgres を停止するときに Patroni が待機できる秒数。synchronous_mode が有効な場合にのみ有効です。 > 0 に設定され、synchronous_mode が有効になっている場合、primary_stop_timeout で設定された値を超えて停止操作が実行されている場合、Patroni は postmaster に SIGKILL を送信します。耐久性と可用性のトレードオフに応じて値を設定します。パラメーターが設定されていない場合、または <= 0 に設定されている場合、primary_stop_timeout は適用されません。
  • synchronous_mode: 同期レプリケーション モードをオンにします。可能な値: off、on、quorum。このモードでは、リーダーが synchronous_standby_names の管理を担当し、最後に知られたリーダー、または同期レプリカの 1 つだけがリーダー レースに参加できます。同期モードでは、Patroni がトランザクションの耐久性を確保できない場合、書き込みの可用性が失われるという代償として、正常にコミットされたトランザクションがフェイルオーバー時に失われることはありません。詳細については、レプリケーションモードのドキュメント を参照してください。
  • synchronous_mode_strict: 使用可能な同期レプリカがない場合に同期レプリケーションを無効にせず、プライマリーへのすべてのクライアント書き込みをブロックします。優先順位に基づく同期モード(synchronous_mode: on)では、適切な同期スタンバイがない場合、Patroni 4.1.5 は synchronous_standby_names を * に設定します。詳細については、レプリケーションモードのドキュメント を参照してください。
  • synchronous_node_count: synchronous_mode が有効な場合、このパラメーターは Patroni によって使用され、同期スタンバイ インスタンスの正確な数を管理し、メンバーの参加と脱退に応じて DCS の状態と PostgreSQL の synchronous_standby_names パラメーターを調整します。パラメーターが対象となるノードの数よりも大きい値に設定されている場合、パラメーターは自動的に調整されます。デフォルトは 1 です。
  • failsafe_mode: DCS フェールセーフ モード を有効にします。デフォルトは false です。
  • postgresql:
    • use_pg_rewind: pg_rewind を使用するかどうか。デフォルトは false です。クラスターは data page checksums (initdb の --data-checksums オプション) で初期化するか、wal_log_hints を on に設定する必要があります。そうしないと、pg_rewind は機能しないことに注意してください。
    • use_slots: レプリケーション スロットを使用するかどうか。 PostgreSQL 9.4+ ではデフォルトは true です。
    • recovery_conf: フォロワーの構成時に recovery.conf に書き込まれる追加の構成設定。 PostgreSQL 12 には recovery.conf はもうありませんが、Patroni が透過的に処理するため、このセクションを引き続き使用できます。
    • parameters: {max_connections: 100, wal_level: "replica", max_wal_senders: 10, wal_log_hints: "on"} 形式の Postgres の構成パラメーター (GUC)。これらの多くは、レプリケーションが機能するために必要です。
    • parameters_primary: (オプション) プライマリーのロール固有のパラメーターをオーバーライドします。これらの値は、ベースの parameters にマージされ、同じパラメーターのベース値を上書きします。
    • parameters_replica: (オプション) レプリカのロール固有のパラメーターをオーバーライドします。これらの値は、ベースの parameters にマージされ、同じパラメーターのベース値を上書きします。
    • parameters_standby_leader: (オプション) standby_leader のロール固有のパラメーターをオーバーライドします。これらの値は、ベースの parameters にマージされ、同じパラメーターのベース値を上書きします。
    • pg_hba: Patroni が pg_hba.conf を生成するために使用する行のリスト。 hba_file PostgreSQL パラメータがデフォルト以外の値に設定されている場合、Patroni はこのパラメータを無視します。
      • - host all all 0.0.0.0/0 md5
      • - host replication replicator 127.0.0.1/32 md5: レプリケーションにはこのような行が必要です。
    • pg_hba_primary: (オプション) プライマリーのロール固有の pg_hba エントリ。これらは pg_hba を完全に置き換えます (マージなし)。定義されていない場合は、pg_hba が使用されます。
    • pg_hba_replica: (オプション) レプリカのロール固有の pg_hba エントリ。これらは pg_hba を完全に置き換えます (マージなし)。定義されていない場合は、pg_hba が使用されます。
    • pg_hba_standby_leader: (オプション) standby_leader のロール固有の pg_hba エントリ。これらは pg_hba を完全に置き換えます (マージなし)。定義されていない場合は、pg_hba が使用されます。
    • pg_ident: Patroni が pg_ident.conf を生成するために使用する行のリスト。 ident_file PostgreSQL パラメータがデフォルト以外の値に設定されている場合、Patroni はこのパラメータを無視します。
      • - mapname1 systemname1 pguser1
      • - mapname1 systemname2 pguser2
    • pg_ident_primary: (オプション) プライマリーのロール固有の pg_ident エントリ。これらは pg_ident を完全に置き換えます (マージなし)。定義されていない場合は、pg_ident が使用されます。
    • pg_ident_replica: (オプション) レプリカのロール固有の pg_ident エントリ。これらは pg_ident を完全に置き換えます (マージなし)。定義されていない場合は、pg_ident が使用されます。
    • pg_ident_standby_leader: (オプション) standby_leader のロール固有の pg_ident エントリ。これらは pg_ident を完全に置き換えます (マージなし)。定義されていない場合は、pg_ident が使用されます。
  • standby_cluster: このセクションが定義されている場合、スタンバイ クラスターをブートストラップします。
    • host: リモートノードのアドレス
    • port: リモート ノードのポート
    • primary_slot_name: レプリケーションに使用するリモート ノードのスロット。このパラメータはオプションであり、デフォルト値はインスタンス名から導出されます (関数 slot_name_from_member_name を参照)。
    • create_replica_methods: リモート プライマリーからスタンバイ リーダーをブートストラップするために使用できるメソッドの順序付きリスト。postgresql_settings で定義されたリストとは異なる場合があります。
    • restore_command: WAL レコードをリモート プライマリーからスタンバイ クラスターのノードに復元するコマンド。postgresql_settings で定義されたリストと異なる場合があります。
    • archive_cleanup_command: スタンバイ リーダーのクリーンアップ コマンド
    • recovery_min_apply_delay: WAL レコードをスタンバイ リーダーに実際に適用するまでの待機時間
  • member_slots_ttl: レプリカのシャットダウン時の物理レプリケーション スロットの保持時間。デフォルト値: 30min。以前の動作を維持したい場合は、これを 0 に設定します (メンバー キーの有効期限が DCS から切れると、スロットはすぐに削除されます)。この機能は、PostgreSQL 11 以降でのみ動作します。
  • slots: 永続的なレプリケーション スロットを定義します。これらのスロットは、スイッチオーバー/フェイルオーバー中に保持されます。存在しない永続スロットは Patroni によって作成されます。 PostgreSQL 11 以降では、すべてのノードに永続的な物理スロットが作成され、その位置は loop_wait 秒ごとに進められます。 11 よりも古い PostgreSQL バージョンの場合、永続的な物理レプリケーション スロットは現在のプライマリーでのみ維持されます。論理スロットは再起動によってプライマリーからスタンバイにコピーされ、その後 (必要に応じて) loop_wait 秒ごとに位置が進みます。論理スロット ファイルのコピーは、libpq 接続経由で、rewind またはスーパーユーザーの資格情報を使用して実行されます (postgresql.authentication セクションを参照)。レプリカ上の論理スロットの位置が以前のプライマリーより少し遅れている可能性が常にあります。そのため、アプリケーションは、フェイルオーバー後に一部のメッセージを 2 回受信する可能性に備えておく必要があります。最も簡単な方法は、confirmed_flush_lsn を追跡することです。永久レプリケーション スロットを有効にするには、postgresql.use_slots を true に設定する必要があります。永続的な論理レプリケーション スロットが定義されている場合、Patroni は hot_standby_feedback を自動的に有効にします。論理レプリケーション スロットのフェイルオーバーは、PostgreSQL 9.6 以前では安全でなく、PostgreSQL バージョン 10 にはいくつかの重要な機能が欠けているため、この機能は PostgreSQL 11+ でのみ動作します。
    • my_slot_name: 永続レプリケーション スロットの名前。永続スロット名が現在のノードの名前と一致する場合、そのスロットはこのノードには作成されません。 Patroni メンバーの名前と一致する名前の永続的な物理レプリケーション スロットを追加すると、Patroni は、対応するメンバーが応答しなくなった場合でも、作成されたスロットが削除されないことを保証します (通常であればこの状況では Patroni によってスロットが削除されるところです)。これは、メンバーによって使用されるレプリケーション スロットを一時的な障害時に持続させたい場合や、既存のメンバーを新しい Patroni クラスターにインポートする場合 (詳細については スタンドアロンを Patroni クラスターに変換する を参照) など、状況によっては便利ですが、Patroni の通常の機能への影響を考慮し、スロットが不要になった時点でこれらの名前の衝突が DCS に残存しないよう、オペレーターは注意を払う必要があります。
      • type: スロット タイプ。 physical または logical の可能性があります。スロットが論理スロットの場合は、database と plugin を追加で定義する必要があります。スロットが物理的な場合は、オプションで cluster_type を定義できます。
      • database: 論理スロットを作成するデータベース名。
      • plugin: 論理スロットのプラグイン名。
      • cluster_type: スロットを作成するクラスターのタイプ (primary または standby)。スロットはこのタイプのクラスターでのみ作成され、それ以外のクラスターでは作成されないか、既存のスロットが削除されます。
  • ignore_slots: Patroni が一致するスロットを無視するレプリケーション スロット プロパティのセットのリスト。この構成/機能などは、一部のレプリケーション スロットが Patroni の外部で管理されている場合に役立ちます。一致するプロパティの任意のサブセットが、スロットを無視させる原因になります。
    • name: レプリケーション スロットの名前。
    • type: スロット タイプ。 physical または logical を指定できます。スロットが論理スロットの場合は、database や plugin を追加で定義できます。
    • database: データベース名 (logical スロットと一致する場合)。
    • plugin: 論理デコード プラグイン (logical スロットに一致する場合)。

注: slots はハッシュマップですが、ignore_slots は配列です。たとえば:

slots:
  permanent_logical_slot_name:
    type: logical
    database: my_db
    plugin: test_decoding
  permanent_physical_slot_name:
    type: physical
  ...
ignore_slots:
  - name: ignored_logical_slot_name
    type: logical
    database: my_db
    plugin: test_decoding
  - name: ignored_physical_slot_name
    type: physical
  ...

注: PostgreSQL v11 以降を実行すると、Patroni はリーダーになる可能性のあるすべてのノードで物理レプリケーション スロットを維持するため、レプリカ ノードは他のノードで必要になる可能性がある場合に WAL セグメントを予約したままにします。ノードが存在せず、DCS 内のメンバー キーの有効期限が切れた場合、対応するレプリケーション スロットは member_slots_ttl の後に削除されます (デフォルト値は 30min)。ニーズに応じて保持期間を増減できます。あるいは、クラスター トポロジが静的 (名前が変更されない固定数のノード) の場合は、レプリカが一時的に停止している間にスロットの削除や WAL ファイルのリサイクルを回避するために、ノードの名前に対応する名前を使用して永続的な物理レプリケーション スロットを構成できます。

slots:
  node_name1:
    type: physical
  node_name2:
    type: physical
  node_name3:
    type: physical
  ...
警告

永続レプリケーション スロットは、primary/standby_leader からレプリカ ノードにのみ同期されます。つまり、アプリケーションはリーダー ノードからのみそれらを使用することになっています。これらをレプリカ ノードで使用すると、クラスター内の他のすべてのノードで pg_wal が無制限に増加します。この規則の例外は、Patroni メンバー名 (Patroni によって作成および維持される) に一致する物理スロットです。これらはノード間のレプリケーションに使用されるため、すべてのノード間で同期されます。

警告

nostream タグをスタンバイに設定すると、ノード自体とそのすべてのカスケード レプリカ (存在する場合) 上の永続論理レプリケーション スロットのコピーと同期が無効になります。

2 - YAML 構成設定

Patroni YAML 構成オプションとセクションの完全なリファレンス。


グローバル/ユニバーサル

  • thread_pool_size: リーダー競合またはフェールセーフ チェック中に、非同期タスクを実行し、REST API を介して他のメンバーと通信するために Patroni によって使用されるスレッド プールのサイズ。最小値は 5、デフォルト値は 5 です。
  • thread_stack_size: Patroni によって開始されるスレッドに使用されるスタック サイズを指定します。値は 64kB によってアライメントされる必要があります。最小値は 64kB 、デフォルト値 (Patroni によって設定) は 512kB です。
  • name: ホストの名前。クラスター内で一意である必要があります。
  • namespace: Patroni がクラスターに関する情報を保持する構成ストア内のパス。デフォルト値: “/service”
  • scope: クラスター名


ログ

  • type: ログの形式を設定します。 plain または json のいずれかになります。 json 形式を使用するには、jsonlogger がインストールされている必要があります。デフォルト値は plain です。
  • level: 一般的なログ レベルを設定します。デフォルト値は INFO です (Python ロギングのドキュメント を参照)
  • traceback_level: トレースバックが表示されるレベルを設定します。デフォルト値は ERROR です。 log.level=DEBUG を有効にした場合にのみトレースバックを表示したい場合は、DEBUG に設定します。
  • format: ログのフォーマット文字列を設定します。ログ タイプが plain の場合、ログ形式は文字列で指定することを推奨します。使用可能な属性については、LogRecord 属性 を参照してください。ログ タイプが json の場合、ログ形式は文字列に加えてリストにすることもできます。各リスト項目は LogRecord 属性に対応させることを推奨します。フィールド名のみが必要であり、%( と ) は省略する必要があることに注意してください。別のキー名でログ フィールドを出力する場合は、辞書キーがログ フィールドで、値がログに出力するフィールドの名前である辞書を使用します。デフォルト値は %(asctime)s %(levelname)s: %(message)s です。
  • dateformat: 日時フォーマット文字列を設定します。 (formatTime() ドキュメント を参照)
  • static_fields: ログにフィールドを追加します。このオプションは、ログ タイプが json に設定されている場合にのみ使用できます。
  • max_queue_size: Patroni は 2 段階のロギングを使用しています。ログ レコードはメモリ内のキューに書き込まれ、キューからログ レコードを取得して stderr またはファイルに書き込む別のスレッドがあります。内部キューの最大サイズはデフォルトで 1000 レコードによって制限されており、過去 1 時間 20 分までのログを保持するには十分なサイズです。
  • dir: アプリケーション ログを書き込むディレクトリ。ディレクトリは存在し、Patroni を実行するユーザーによって書き込み可能である必要があります。この値を設定すると、アプリケーションはデフォルトで 25MB のログを 4 個保持します。これらの保持値は、file_num および file_size を使用して調整できます (以下を参照)。
  • mode: ログ ファイルのアクセス許可 (0644 など)。指定しない場合、権限は現在の umask 値に基づいて設定されます。
  • file_num: 保持するアプリケーション ログの数。
  • file_size: ログ ローリングをトリガーする patroni.log ファイルのサイズ (バイト単位)。
  • loggers: このセクションでは、Python モジュールごとにログ レベルを再定義できます。
    • patroni.postmaster: WARNING
    • urllib3: DEBUG
  • deduplicate_heartbeat_logs: true に設定すると、同一のハートビート ログが連続して出力されなくなります。デフォルト値は false です。
警告

HA ループの実行時間は、リソースの枯渇や同様の問題によるフェイルオーバーを診断する際に非常に貴重な情報となる可能性があります。 deduplicate_heartbeat_logs が true に設定されている場合、(リーダーが変更されない限り) HA ループ実行のログは生成されないため、この潜在的に役立つ情報はログから取得できません。

ここでは、JSON 形式でログを記録するように Patroni を設定する方法の例を示します。

log:
   type: json
   format:
      - message
      - module
      - asctime: '@timestamp'
      - levelname: level
   static_fields:
      app: patroni


ブートストラップ構成

注記

Patroni が初めてクラスターを初期化し、設定が DCS に保存されると、YAML 構成の bootstrap.dcs セクションに対する今後の変更はすべて反映されなくなります。変更したい場合は、patronictl_edit_config または Patroni REST API を使用してください。

  • bootstrap:
    • dcs: このセクションは、新しいクラスターの初期化後に、指定された構成ストアの /<namespace>/<scope>/config に書き込まれます。クラスターのグローバル動的構成。 動的構成設定 で説明されているパラメーターのいずれかを bootstrap.dcs の下に置くことができ、Patroni が新しいクラスターを初期化 (ブートストラップ) した後、このセクションが構成ストアの /<namespace>/<scope>/config に書き込まれます。

    • method: このクラスターのブートストラップに使用するカスタム スクリプト。

      詳細については、カスタム ブートストラップ メソッドのドキュメント を参照してください。 initdb が指定されている場合は、デフォルトの initdb コマンドに戻ります。 initdb は、構成ファイルに method パラメーターが存在しない場合にもトリガーされます。

    • initdb: (オプション) initdb に渡されるオプションをリストします。

      • - data-checksums: 9.3 で pg_rewind が必要な場合は有効にする必要があります。
      • - encoding: UTF8: 新しいデータベースのデフォルトのエンコード。
      • - locale: UTF8: 新しいデータベースのデフォルトのロケール。
    • post_bootstrap または post_init: クラスターの初期化後に実行される追加のスクリプト。スクリプトは、接続文字列 URL (ユーザー名としてクラスター スーパーユーザーを含む) を受け取ります。 PGPASSFILE 変数は、pgpass ファイルの場所に設定されます。


Citus

Patroni と Citus の統合を有効にします。構成されている場合、Patroni はコーディネーターへの Citus ワーカー ノードの登録を処理します。 Citus サポートの詳細については、こちら を参照してください。

  • group: Citus グループ ID、整数。コーディネーターには 0 を使用し、ワーカーには 1、2 などを使用します。
  • database: citus 拡張機能を作成するデータベース。コーディネーターとすべてのワーカーで同じである必要があります。現在サポートされているデータベースは 1 つだけです。


Consul

ほとんどのパラメーターはオプションですが、host または url のいずれかを指定する必要があります。

  • host: Consul ローカル エージェントのホスト:ポート。
  • url: Consul ローカル エージェントの URL (形式: http(s)://host:port)。
  • port: (オプション) Consul ポート。
  • scheme: (オプション) http または https、デフォルトは http です。
  • token: (オプション) ACL トークン。
  • verify: (オプション) HTTPS リクエストの SSL 証明書を検証するかどうか。
  • cacert: (オプション) CA 証明書。存在する場合、検証が有効になります。
  • cert: (オプション) クライアント証明書を含むファイル。
  • key: (オプション) クライアント キーを含むファイル。キーが cert の一部である場合は空にすることができます。
  • dc: (オプション) 通信するデータセンター。デフォルトでは、ホストのデータセンターが使用されます。
  • consistency: (オプション) consul 整合性モードを選択します。可能な値は default、consistent、または stale です (詳細については consul API リファレンス を参照)
  • checks: (オプション) セッションに使用される Consul ヘルス チェックのリスト。デフォルトでは、空のリストが使用されます。
  • register_service: (オプション) scope パラメーターで定義された名前と、ノードのロールに応じたタグ (master、primary、replica、または standby-leader) でサービスを登録するかどうか。デフォルトは false です。
  • service_tags: (オプション) ロール (primary/replica/standby-leader) とは別に Consul サービスに追加する追加の静的タグ。デフォルトでは、空のリストが使用されます。
  • service_check_interval: (オプション) 登録された URL に対してヘルス チェックを実行する頻度。デフォルトは ‘5s’ です。
  • service_check_tls_server_name: (オプション) TLS 経由で接続するときに SNI ホストをオーバーライドします。consul エージェントチェック API リファレンス も参照してください。

token には、次の ACL 権限が必要です。

service_prefix "${scope}" {
    policy = "write"
}
key_prefix "${namespace}/${scope}" {
    policy = "write"
}
session_prefix "" {
    policy = "write"
}

Etcd

ほとんどのパラメーターはオプションですが、host、hosts、url、proxy、または srv のいずれかを指定する必要があります。

  • host: etcd エンドポイントのホスト:ポート。
  • hosts: host1:port1、host2:port2 などの形式の etcd エンドポイントのリスト。カンマ区切りの文字列または実際の yaml リストの可能性があります。
  • use_proxies: このパラメータが true に設定されている場合、Patroni は hosts をプロキシのリストと見なし、etcd クラスターのトポロジ検出を実行しません。
  • url: etcd の URL。
  • proxy: etcd のプロキシ URL。プロキシを使用して etcd に接続している場合は、url の代わりにこのパラメーターを使用します。
  • srv: クラスター自動検出のために SRV レコードを検索するドメイン。 Patroni は、指定されたドメインの SRV サービス名 (最初に成功するまでこの順序で) のクエリーを試行します: _etcd-client-ssl、_etcd-client、_etcd-ssl、_etcd、_etcd-server-ssl、_etcd-server。 _etcd-server-ssl または _etcd-server の SRV レコードが取得された場合、ETCD ピア プロトコルが使用され、利用可能なメンバーについて ETCD がクエリーされます。それ以外の場合は、SRV レコードのホストが使用されます。
  • srv_suffix: 検出中にクエリーされる SRV 名のサフィックスを構成します。このフラグを使用して、同じドメイン内の複数の etcd クラスターを区別します。 srv と組み合わせた場合にのみ機能します。たとえば、srv_suffix: foo と srv: example.org が設定されている場合、DNS SRV クエリーが作成されます:_etcd-client-ssl-foo._tcp.example.org (考えられるすべての ETCD SRV サービス名に対して同様)。
  • protocol: (オプション) http または https (指定しない場合は http が使用されます)。 url または proxy が指定されている場合は、それらからプロトコルを取得します。
  • username: (オプション) etcd 認証用のユーザー名。
  • password: (オプション) etcd 認証用のパスワード。
  • cacert: (オプション) CA 証明書。存在する場合、検証が有効になります。
  • cert: (オプション) クライアント証明書を含むファイル。
  • key: (オプション) クライアント キーを含むファイル。キーが cert の一部である場合は空にすることができます。

etcdv3

Patroni をプロトコル バージョン 3 経由で etcd クラスターと連携させたい場合は、Patroni 構成ファイルの etcd3 セクションを使用する必要があります。すべての構成パラメータは etcd の場合と同じです。

警告

プロトコル バージョン 2 で作成された Key は、プロトコル バージョン 3 では表示されず、その逆も同様であるため、Patroni 構成ファイルを更新するだけで etcd から etcd3 に切り替えることはできません。さらに、Patroni は etcd の gRPC ゲートウェイ (プロキシ) を使用して V3 API と通信します。これは、TLS 共通名認証が不可能であることを意味します。


ZooKeeper

  • hosts: ZooKeeper クラスター メンバーのリスト (形式: ′host1:port1′,′host2:port2′,′etc...′'host1:port1', 'host2:port2', 'etc...')。
  • use_ssl: (オプション) SSL が使用されているかどうか。デフォルトは false です。 false に設定すると、SSL 固有のパラメーターはすべて無視されます。
  • cacert: (オプション) CA 証明書。存在する場合、検証が有効になります。
  • cert: (オプション) クライアント証明書を含むファイル。
  • key: (オプション) クライアント キーを含むファイル。
  • key_password: (オプション) クライアント キーのパスワード。
  • verify: (オプション) 証明書を検証するかどうか。デフォルトは true です。
  • set_acls: (オプション) 設定した場合、作成する各 ZNode にデフォルトの ACL を適用するように Kazoo を構成します。 ACL では、x509 スキーマ (デフォルト)、または digest などの他のサポートされている ZooKeeper スキーマのいずれかを使用できます。これらは、キーが完全なプリンシパル (オプションでスキームの接頭辞が付けられる) であり、値がアクセス許可のリストであるディクショナリとして指定する必要があります。権限は、CREATE、READ、WRITE、DELETE、ADMIN、または ALL の 1 つ以上です。たとえば、set_acls: {CN=principal1: [CREATE, READ], digest:principal2:+pjROuBuuwNNSujKyH8dGcEnFPQ=: [ALL]} です。
  • auth_data: (オプション) 接続に使用する認証資格情報。 scheme がキー、credential が値という形式の辞書である必要があります。デフォルトは空の辞書です。
注記

SSL をサポートするには、kazoo>=2.6.0 をインストールする必要があります。


Exhibitor

  • hosts: Exhibitor (ZooKeeper) ノードの初期リスト (形式: 「host1、host2、etc…」)。このリストは、Exhibitor (ZooKeeper) クラスター トポロジが変更されるたびに自動的に更新されます。
  • poll_interval: ZooKeeper および Exhibitor ノードのリストを Exhibitor から更新する頻度。
  • port: Exhibitor ポート。


Kubernetes

  • bypass_api_service: (オプション) Kubernetes API と通信する場合、Patroni は通常 Kubernetes サービスに依存し、そのアドレスは KUBERNETES_SERVICE_HOST 環境変数を介してポッド内で公開されます。 bypass_api_service が true に設定されている場合、Patroni はサービスの背後にある API ノードのリストを解決し、それらのノードに直接接続します。
  • namespace: (オプション) Patroni ポッドが実行されている Kubernetes 名前空間。デフォルト値は default です。
  • labels: {label1: value1, label2: value2} 形式のラベル。これらのラベルは、現在のクラスターに関連付けられている既存のオブジェクト (ポッドとエンドポイントまたは ConfigMaps) を検索するために使用されます。また、Patroni は、作成するすべてのオブジェクト (エンドポイントまたは ConfigMap) にそれらを設定します。
  • scope_label: (オプション) クラスター名を含むラベルの名前。デフォルト値は cluster-name です。
  • bootstrap_labels: (オプション) {label1: value1, label2: value2} 形式のラベル。これらのラベルは、Patroni ポッドの状態が initializing new cluster、running custom bootstrap script、starting after custom bootstrap、または creating replica のいずれかである場合にそのポッドに割り当てられます。
  • role_label: (オプション) ロールを含むラベルの名前 (primary、replica、またはその他のカスタム値)。 Patroni は、自身が実行されているポッドにこのラベルを設定します。デフォルト値は role です。
  • leader_label_value: (オプション) Postgres ロールが primary の場合のポッド ラベルの値。デフォルト値は primary です。
  • follower_label_value: (オプション) Postgres ロールが replica の場合のポッド ラベルの値。デフォルト値は replica です。
  • standby_leader_label_value: (オプション) Postgres ロールが standby_leader の場合のポッド ラベルの値。デフォルト値は primary です。
  • tmp_role_label: (オプション) ロールを含む一時ラベルの名前 (primary または replica)。このラベルの値には、対応するロールのデフォルトが常に使用されます。必要な場合のみ設定してください。
  • use_endpoints: (オプション) true に設定すると、Patroni は ConfigMaps の代わりにエンドポイントを使用してリーダーの選出を実行し、クラスターの状態を維持します。
  • pod_ip: (オプション) Patroni が実行されているポッドの IP アドレス。 この値は use_endpoints が有効な場合に必須であり、ポッドの PostgreSQL が昇格されるときにリーダー エンドポイント サブセットを設定するために使用されます。
  • ports: (オプション) Service オブジェクトにポートの名前がある場合、同じ名前が Endpoint オブジェクトに表示される必要があります。そうでない場合、サービスは機能しません。たとえば、サービスが {Kind: Service, spec: {ports: [{name: postgresql, port: 5432, targetPort: 5432}]}} として定義されている場合、kubernetes.ports: [{"name": "postgresql", "port": 5432}] を設定する必要があります。これにより、Patroni はリーダー エンドポイントのサブセットの更新にそれを使用します。このパラメータは、kubernetes.use_endpoints が設定されている場合にのみ使用されます。
  • cacert: (オプション) Kubernetes API SSL 証明書の検証中に使用する、信頼できる CA の証明書を含む CA_BUNDLE ファイルを指定します。指定されない場合、Patroni は ServiceAccount シークレットによって提供される値を使用します。
  • retriable_http_codes: (オプション) 再試行する K8s API からの HTTP ステータス コードのリスト。デフォルトでは、Patroni は、500、503、および 504、または K8s API 応答に retry-after HTTP ヘッダーがある場合に再試行します。


Raft (非推奨)

  • self_addr: Raft 接続をリッスンする ip:port。 self_addr はクラスターの他のノードからアクセスできる必要があります。設定されていない場合、ノードはコンセンサスに参加しません。

  • bind_addr: (オプション) Raft 接続をリッスンする ip:port。指定しない場合は、self_addr が使用されます。

  • partner_addrs: クラスター内の他の Patroni ノードのリスト (形式:

    ′ip1:port′,′ip2:port′,′etc...′'ip1:port', 'ip2:port', 'etc...'

    )

  • data_dir: Raft ログとスナップショットを保存するディレクトリ。指定しない場合は、現在の作業ディレクトリが使用されます。

  • password: (オプション) 指定されたパスワードで Raft トラフィックを暗号化します。cryptography Python モジュールが必要です。

  • min_timeout: (オプション) 基礎となる pysyncobj Raft 実装の最小選出タイムアウト (秒単位)。 3 * append_entries_period より大きくなければなりません。デフォルト: 0.4。

  • max_timeout: (オプション) 基礎となる pysyncobj Raft 実装の最大選出タイムアウト (秒単位)。 min_timeout より大きくなければなりません。デフォルト: 1.4。

  • connection_timeout: (オプション) データを受信しなかった接続が切断されたとみなされるまでの秒数。 max_timeout 以上である必要があります。デフォルト: 3.5。

  • append_entries_period: (オプション) ハートビート (append_entries) コマンドを送信する間隔 (秒単位)。 min_timeout の 3 分の 1 未満である必要があります。デフォルト: 0.1。

  • connection_retry_time: (オプション) オフライン ノードへの再接続試行間の秒単位の間隔。デフォルト: 5.0。

  • leader_fallback_timeout: (オプション) 過半数からの応答がないリーダーがフォロワー状態に戻るまでの秒数。 append_entries_period より大きくなければなりません。デフォルト: 30.0。

注記

これらのタイムアウト パラメーターは、デフォルトの pysyncobj タイムアウトが厳しすぎる高遅延ネットワークで役立ちます。次の制約を満たす必要があります: min_timeout > 3 * append_entries_period、max_timeout > min_timeout、connection_timeout >= max_timeout、および leader_fallback_timeout > append_entries_period。 Patroni は起動時にこれらを検証し、違反している場合は起動を拒否します。これらの値は実行時に変更できないため、再起動が必要です。

[!WARNING] これらの設定は、pysyncobj の選挙と接続のタイムアウトを緩和するだけです。 Patroni が Raft 操作に適用するコマンドごとの期限は延長されません。各 Raft コマンド (リーダー ロックのリフレッシュ、クラスター状態の書き込み) は依然として retry_timeout (デフォルト 10) 内で完了する必要があります。遅延が非常に長いリンク (ラウンドトリップ時間がおよそ数秒を超える場合) では、connection_timeout が RTT を大きく上回っていても、1 つのコマンドが retry_timeout を超える可能性があるため、DCS は到達不能であるように見え、プライマリーが降格される可能性があります。このようなリンクでは、loop_wait + 2 * retry_timeout <= ttl を維持しながら、それに応じて retry_timeout と ttl も引き上げる必要があります。

Raft 実装に関する短い FAQ

  • Q: コンセンサスを提供するすべてのノードをリストするにはどうすればよいですか?

    A: syncobj_admin -conn host:port -status ここで、host:port はクラスター ノードの 1 つのアドレスです。

  • Q: コンセンサスの一部であったノードが離脱し、その IP を他のノードに再利用できません。このノードをコンセンサスから削除するにはどうすればよいですか?

    A: syncobj_admin -conn host:port -remove host2:port2 ここで、host2:port2 はコンセンサスから削除するノードのアドレスです。

  • Q: syncobj_admin ユーティリティはどこで入手できますか?

    A: Patroni 依存関係である pysyncobj モジュール (Python RAFT 実装) と一緒にインストールされます。

  • Q: コンセンサスに追加せずに Patroni ノードを実行することは可能ですか?

    A: はい、Patroni 構成から raft.self_addr をコメントアウトするか削除してください。

  • Q: Patroni と PostgreSQL は 2 つのノードでのみ実行できますか?

    A: はい、3 番目のノードでは patroni_raft_controller を実行できます (Patroni と PostgreSQL は使用しません)。このような設定では、1 つのノードが一時的に失われても、プライマリーには影響しません。


PostgreSQL

  • postgresql:
    • authentication:

      • superuser:
        • username: スーパーユーザーの名前。初期化 (initdb) 中に設定され、後で postgres に接続するために Patroni によって使用されます。
        • password: スーパーユーザーのパスワード。初期化 (initdb) 中に設定されます。
        • sslmode: (オプション) sslmode 接続パラメータにマップします。これにより、クライアントはサーバーとの TLS ネゴシエーション モードのタイプを指定できます。各モードの動作の詳細については、PostgreSQL ドキュメント を参照してください。デフォルトのモードは prefer です。
        • sslkey: (オプション) sslkey 接続パラメータにマップします。これは、クライアントの証明書で使用される秘密キーの場所を指定します。
        • sslpassword: (任意)sslpassword 接続パラメーターに対応し、sslkeyで指定した秘密鍵のパスワードを指定します。
        • sslcert: (オプション) sslcert 接続パラメータにマップされ、クライアント証明書の場所を指定します。
        • sslrootcert: (任意)sslrootcert 接続パラメーターに対応します。クライアントがサーバー証明書の検証に使用する、1つ以上の認証局(CA)の証明書を含むファイルの場所を指定します。
        • sslcrl: (オプション) sslcrl 接続パラメータにマップされ、失効証明書リストを含むファイルの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
        • sslcrldir: (オプション) sslcrldir 接続パラメータにマップされ、失効証明書リストを含むファイルのあるディレクトリの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
        • sslnegotiation: (任意)sslnegotiation 接続パラメーターに対応し、SSLを使用する場合に、サーバーとのSSL暗号化のネゴシエーション方法を制御します。
        • gssencmode: (任意)gssencmode 接続パラメーターに対応します。サーバーと安全なGSS TCP/IP接続をネゴシエートするかどうか、またその優先順位を決定します。
        • channel_binding: (オプション) channel_binding 接続パラメータにマップされ、クライアントによるチャネル バインディングの使用を制御します。
      • replication:
        • username: レプリケーション ユーザー名。ユーザーは初期化中に作成されます。レプリカはこのユーザーを使用して、ストリーミング レプリケーション経由でレプリケーション ソースにアクセスします。
        • password: レプリケーションのパスワード。ユーザーは初期化中に作成されます。
        • sslmode: (オプション) sslmode 接続パラメータにマップします。これにより、クライアントはサーバーとの TLS ネゴシエーション モードのタイプを指定できます。各モードの動作の詳細については、PostgreSQL ドキュメント を参照してください。デフォルトのモードは prefer です。
        • sslkey: (オプション) sslkey 接続パラメータにマップします。これは、クライアントの証明書で使用される秘密キーの場所を指定します。
        • sslpassword: (任意)sslpassword 接続パラメーターに対応し、sslkeyで指定した秘密鍵のパスワードを指定します。
        • sslcert: (オプション) sslcert 接続パラメータにマップされ、クライアント証明書の場所を指定します。
        • sslrootcert: (任意)sslrootcert 接続パラメーターに対応します。クライアントがサーバー証明書の検証に使用する、1つ以上の認証局(CA)の証明書を含むファイルの場所を指定します。
        • sslcrl: (オプション) sslcrl 接続パラメータにマップされ、失効証明書リストを含むファイルの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
        • sslcrldir: (オプション) sslcrldir 接続パラメータにマップされ、失効証明書リストを含むファイルのあるディレクトリの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
        • sslnegotiation: (任意)sslnegotiation 接続パラメーターに対応し、SSLを使用する場合に、サーバーとのSSL暗号化のネゴシエーション方法を制御します。
        • gssencmode: (任意)gssencmode 接続パラメーターに対応します。サーバーと安全なGSS TCP/IP接続をネゴシエートするかどうか、またその優先順位を決定します。
        • channel_binding: (オプション) channel_binding 接続パラメータにマップされ、クライアントによるチャネル バインディングの使用を制御します。
      • rewind:
        • username: (オプション) pg_rewind のユーザーの名前。ユーザーは postgres 11+ の初期化中に作成され、必要なすべての 権限 が付与されます。
        • password: (オプション) pg_rewind のユーザーのパスワード。ユーザーは初期化中に作成されます。
        • sslmode: (オプション) sslmode 接続パラメータにマップします。これにより、クライアントはサーバーとの TLS ネゴシエーション モードのタイプを指定できます。各モードの動作の詳細については、PostgreSQL ドキュメント を参照してください。デフォルトのモードは prefer です。
        • sslkey: (オプション) sslkey 接続パラメータにマップします。これは、クライアントの証明書で使用される秘密キーの場所を指定します。
        • sslpassword: (任意)sslpassword 接続パラメーターに対応し、sslkeyで指定した秘密鍵のパスワードを指定します。
        • sslcert: (オプション) sslcert 接続パラメータにマップされ、クライアント証明書の場所を指定します。
        • sslrootcert: (任意)sslrootcert 接続パラメーターに対応します。クライアントがサーバー証明書の検証に使用する、1つ以上の認証局(CA)の証明書を含むファイルの場所を指定します。
        • sslcrl: (オプション) sslcrl 接続パラメータにマップされ、失効証明書リストを含むファイルの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
        • sslcrldir: (オプション) sslcrldir 接続パラメータにマップされ、失効証明書リストを含むファイルのあるディレクトリの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
        • sslnegotiation: (任意)sslnegotiation 接続パラメーターに対応し、SSLを使用する場合に、サーバーとのSSL暗号化のネゴシエーション方法を制御します。
        • gssencmode: (任意)gssencmode 接続パラメーターに対応します。サーバーと安全なGSS TCP/IP接続をネゴシエートするかどうか、またその優先順位を決定します。
        • channel_binding: (オプション) channel_binding 接続パラメーターにマップされ、クライアントによるチャネル バインディングの使用を制御します。
    • callbacks: 特定のアクションで実行するコールバック スクリプト。 Patroni は、アクション、ロール、クラスター名を渡します。 (記述方法の例として scripts/aws.py を参照してください。)

      • on_reload: 構成のリロードがトリガーされたときにこのスクリプトを実行します。
      • on_restart: postgres の再起動時に (ロールを変更せずに) このスクリプトを実行します。
      • on_role_change: postgres が昇格または降格されるときにこのスクリプトを実行します。
      • on_start: postgres の起動時にこのスクリプトを実行します。
      • on_stop: postgres が停止したときにこのスクリプトを実行します。
    • connect_address: IP アドレス + 他のノードおよびアプリケーションから Postgres にアクセスできるポート。

    • proxy_address: IP アドレス + Postgres の隣で実行されている接続プール (pgbouncer など) にアクセスできるポート。この値は、DCS のメンバー キーに proxy_url として書き込まれ、サービス検出に使用または役立つ可能性があります。

    • create_replica_methods: Patroni ノードを新しいレプリカに変換するための作成メソッドの順序付きリスト。 “basebackup” がデフォルトのメソッドです。他のメソッドはスクリプトを参照すると想定され、それぞれが独自の構成アイテムとして構成されます。詳細については、カスタム レプリカの作成方法のドキュメント を参照してください。

    • data_dir: Postgres データ ディレクトリの場所。既存 のもの、または Patroni によって初期化されるものです。

    • config_dir: Postgres 構成ディレクトリの場所。デフォルトはデータ ディレクトリです。 Patroni によって書き込み可能である必要があります。

    • bin_dir: (オプション) PostgreSQL バイナリ (pg_ctl、initdb、pg_controldata、pg_basebackup、postgres、pg_isready、pg_rewind) へのパス。指定されない場合、または空の文字列の場合は、PATH 環境変数を使用して実行可能ファイルが検索されます。

    • bin_name: (オプション) カスタム Postgres ディストリビューションを使用している場合、Postgres バイナリ名をオーバーライドできるようにします。

      • pg_ctl: (オプション) pg_ctl バイナリのカスタム名。
      • initdb: (オプション) initdb バイナリのカスタム名。
      • pg_controldata: (オプション) pg_controldata バイナリのカスタム名。
      • pg_basebackup: (オプション) pg_basebackup バイナリのカスタム名。
      • postgres: (オプション) postgres バイナリのカスタム名。
      • pg_isready: (オプション) pg_isready バイナリのカスタム名。
      • pg_rewind: (オプション) pg_rewind バイナリのカスタム名。
    • listen: Postgres がリッスンする IP アドレス + ポート。ストリーミング レプリケーションを使用している場合は、クラスター内の他のノードからアクセスできる必要があります。ポートコンポーネントが最後のアドレスの後ろにコロンで追加されている限り、カンマで区切られた複数のアドレスが許可されます (例: listen: 127.0.0.1,127.0.0.2:5432)。 Patroni は、このリストの最初のアドレスを使用して、PostgreSQL ノードへのローカル接続を確立します。

    • use_unix_socket: Patroni がクラスターへの接続に Unix ソケットの使用を優先することを指定します。デフォルト値は false です。 unix_socket_directories が定義されている場合、Patroni はその中の最初の適切な値を使用してクラスターに接続し、適切なものがない場合は tcp にフォールバックします。 postgresql.parameters で unix_socket_directories が指定されていない場合、Patroni はデフォルト値を使用する必要があると想定し、接続パラメーターから host を省略します。

    • use_unix_socket_repl: Patroni がレプリケーション ユーザー クラスター接続に UNIX ソケットの使用を優先することを指定します。デフォルト値は false です。 unix_socket_directories が定義されている場合、Patroni はその中の最初の適切な値を使用してクラスターに接続し、適切なものがない場合は tcp にフォールバックします。 postgresql.parameters で unix_socket_directories が指定されていない場合、Patroni はデフォルト値を使用する必要があると想定し、接続パラメーターから host を省略します。

    • pgpass: .pgpass パスワード ファイルへのパス。 Patroni は、pg_basebackup、post_init スクリプトを実行する前、およびその他の状況下でこのファイルを作成します。この場所は Patroni によって書き込み可能である必要があります。

    • recovery_conf: フォロワーの構成時に recovery.conf に書き込まれる追加の構成設定。

    • custom_conf : postgresql.base.conf の代わりに使用される、オプションのカスタム postgresql.conf ファイルへのパス。ファイルはすべてのクラスター ノードに存在し、PostgreSQL によって読み取り可能であり、実際の postgresql.conf 上の場所からインクルードされる必要があります。 Patroni は、このファイルの変更を監視したり、バックアップしたりしないことに注意してください。ただし、その設定は Patroni 独自の構成機能によってオーバーライドできます。詳細については、動的構成 を参照してください。

    • parameters: {ssl: "on", ssl_cert_file: "cert_file"} 形式の Postgres の構成パラメーター (GUC)。

    • parameters_primary: (オプション) プライマリーのロール固有のパラメーターをオーバーライドします。これらの値は、ベースの parameters にマージされ、同じパラメーターのベース値を上書きします。

    • parameters_replica: (オプション) レプリカのロール固有のパラメーターをオーバーライドします。これらの値は、ベースの parameters にマージされ、同じパラメーターのベース値を上書きします。

    • parameters_standby_leader: (オプション) standby_leader のロール固有のパラメーターをオーバーライドします。これらの値は、ベースの parameters にマージされ、同じパラメーターのベース値を上書きします。

    • pg_hba: Patroni が pg_hba.conf を生成するために使用する行のリスト。 hba_file PostgreSQL パラメータがデフォルト以外の値に設定されている場合、Patroni はこのパラメータを無視します。このパラメータを 動的構成 と組み合わせると、pg_hba.conf の管理が簡素化されます。

      • - host all all 0.0.0.0/0 md5
      • - host replication replicator 127.0.0.1/32 md5: レプリケーションにはこのような行が必要です。
    • pg_hba_primary: (オプション) プライマリーのロール固有の pg_hba エントリ。これらは pg_hba を完全に置き換えます (マージなし)。定義されていない場合は、pg_hba が使用されます。

    • pg_hba_replica: (オプション) レプリカのロール固有の pg_hba エントリ。これらは pg_hba を完全に置き換えます (マージなし)。定義されていない場合は、pg_hba が使用されます。

    • pg_hba_standby_leader: (オプション) standby_leader のロール固有の pg_hba エントリ。これらは pg_hba を完全に置き換えます (マージなし)。定義されていない場合は、pg_hba が使用されます。

    • pg_ident: Patroni が pg_ident.conf を生成するために使用する行のリスト。 ident_file PostgreSQL パラメータがデフォルト以外の値に設定されている場合、Patroni はこのパラメータを無視します。このパラメータを 動的構成 と組み合わせると、pg_ident.conf の管理が簡素化されます。

      • - mapname1 systemname1 pguser1
      • - mapname1 systemname2 pguser2
    • pg_ident_primary: (オプション) プライマリーのロール固有の pg_ident エントリ。これらは pg_ident を完全に置き換えます (マージなし)。定義されていない場合は、pg_ident が使用されます。

    • pg_ident_replica: (オプション) レプリカのロール固有の pg_ident エントリ。これらは pg_ident を完全に置き換えます (マージなし)。定義されていない場合は、pg_ident が使用されます。

    • pg_ident_standby_leader: (オプション) standby_leader のロール固有の pg_ident エントリ。これらは pg_ident を完全に置き換えます (マージなし)。定義されていない場合は、pg_ident が使用されます。

    • pg_ctl_timeout: start、stop、または restart を実行するときに pg_ctl が待機する時間。デフォルト値は 60 秒です。

    • use_pg_rewind: 以前のリーダーがレプリカとしてクラスターに参加するときに、そのノードで pg_rewind の使用を試みます。クラスターは data page checksums (initdb の --data-checksums オプション) で初期化するか、wal_log_hints を on に設定する必要があります。そうしないと、pg_rewind は機能しません。

    • rewind: (オプション) pg_rewind コマンドに渡すカスタム オプション。文字列および/または単一のキーと値を持つ辞書のリストとして指定できます。許可されないオプションには、target-pgdata、source-pgdata、source-server、write-recovery-conf、dry-run、restore-target-wal、config-file、no-ensure-shutdown、version、help があります。使用例:

      postgresql:
        rewind:
          - debug
          - progress
          - sync-method: fsync
    • remove_data_directory_on_rewind_failure: このオプションが有効な場合、Patroni は PostgreSQL データ ディレクトリを削除し、レプリカを再作成します。そうでない場合、新しいリーダーに追従しようとします。デフォルト値は false です。

    • remove_data_directory_on_diverged_timelines: Patroni は、タイムラインが分岐し、以前のプライマリーが新しいプライマリーからストリーミングを開始できないことを認識した場合、PostgreSQL データ ディレクトリを削除し、レプリカを再作成します。このオプションは、pg_rewind が使用できない場合に役立ちます。 PostgreSQL v10 以前でタイムライン分岐チェックを実行する際、Patroni はレプリケーション資格情報を使用して “postgres” データベースへの接続を試みます。したがって、そのようなアクセスは pg_hba.conf で許可される必要があります。デフォルト値は false です。

    • replica_method: basebackup 以外の create_replica_methods の各メソッドについて、同じ名前の構成セクションを追加します。少なくとも、実行される実際のスクリプトへのフルパスを含む “command” を含める必要があります。他の構成パラメータは、“parameter=value"の形式でスクリプトに渡されます。

    • pre_promote: フェイルオーバー中にリーダー ロックを取得した後、レプリカを昇格する前に実行するフェンシング スクリプト。スクリプトがゼロ以外のコードで終了した場合、Patroni はレプリカを昇格させず、リーダー キーを DCS から削除します。

    • before_stop: postgres を停止する直前に実行されるスクリプト。コールバックとは対照的に、このスクリプトは同期的に実行され、完了するまでシャットダウンをブロックします。このスクリプトのリターン コードは、その後シャットダウンが続行されるかどうかには影響しません。


REST API

  • restapi:
    • thread_pool_size: REST API リクエストを処理するために Patroni によって使用されるスレッド プールのサイズ。最小値は 5、デフォルト値は 5 です。
    • connect_address: Patroni の REST API にアクセスするための IP アドレス (またはホスト名) とポート。クラスターのすべてのメンバーがこのアドレスに接続できる必要があるため、Patroni セットアップがローカルホスト内のデモを目的としている場合を除き、このアドレスには “localhost” やループバック アドレス (たとえば “127.0.0.1”) を使用してはなりません。これは、HTTP ヘルス チェック (“listen” REST API パラメーターについては以下を参照してください) のエンドポイントとして機能し、ユーザー クエリー (直接または REST API 経由) や、リーダーの選出中にクラスター メンバーによって実行されるヘルス チェック (たとえば、リーダーがまだ実行されているかどうか、クエリーを実行しているノードよりも先の WAL 位置を持つノードが存在するかどうか、などを判断するため) のエンドポイントとしても機能します。connect_address は DCS のメンバー キーに入れられ、メンバー名をその REST API に接続するためのアドレスに変換できるようになります。
    • listen: Patroni が REST API をリッスンする IP アドレス (またはホスト名) とポート - 前述のように、参加ノード間で同じヘルス チェックとクラスター メッセージングも提供します。 HAProxy (または HTTP “OPTIONS” または “GET” チェックを実行できるその他のロード バランサー) のヘルスチェック情報を提供します。
    • authentication: (オプション)
      • username: 安全でない REST API エンドポイントを保護するための Basic 認証ユーザー名。
      • password: 安全でないREST APIエンドポイントを保護するBasic認証のパスワード。
    • certfile: (任意)PEM形式の証明書ファイルを指定します。certfileが未指定または空の場合、APIサーバーはSSLを使用せずに動作します。
    • keyfile: (任意)PEM形式の秘密鍵ファイルを指定します。
    • keyfile_password: (任意)keyfileを復号するパスワードを指定します。
    • cafile: (任意)クライアント証明書の検証に使用する、信頼されたCAの証明書を含むCA_BUNDLEファイルを指定します。
    • ciphers: (任意)許可する暗号スイートを指定します(例:“ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1”)。
    • verify_client: (任意)none(デフォルト)、optional、requiredのいずれか。noneの場合、REST APIはクライアント証明書を検証しません。requiredの場合、すべてのREST API呼び出しでクライアント証明書が必要です。optionalの場合、安全でないすべてのREST APIエンドポイントでクライアント証明書が必要です。requiredでは、証明書の署名検証に成功するとクライアント認証が成功します。optionalでは、PUT、POST、PATCH、DELETEの要求だけでクライアント証明書を検証します。
    • allowlist: (任意)安全でないREST APIエンドポイントを呼び出せるホストの集合を指定します。各要素にはホスト名、IPアドレス、CIDR表記のネットワークアドレスを使用できます。デフォルトはallow allです。allowlistまたはallowlist_include_membersが設定されている場合、含まれないものはすべて拒否されます。
    • allowlist_include_members: (任意)trueの場合、DCSに登録された他のクラスターメンバーから安全でないREST APIエンドポイントへのアクセスを許可します。IPアドレスまたはホスト名は、メンバーのapi_urlから取得します。OSが外向きの接続に異なるIPを使用する場合がある点に注意してください。
    • http_extra_headers: (任意)REST APIサーバーがHTTP応答に追加情報を含めるためのHTTPヘッダー。
    • https_extra_headers: (任意)TLSが有効な場合に、REST APIサーバーがHTTP応答に追加情報を含めるためのHTTPSヘッダー。http_extra_headersに設定した追加情報も含まれます。
    • request_queue_size: (任意)Patroni REST APIが使用するTCPソケットの要求キューサイズを設定します。キューが満杯になると、それ以降の要求は「Connection denied」エラーになります。デフォルトは5です。
    • server_tokens: (任意)HTTPのServerヘッダーの値を設定します。
      • Minimal: ヘッダーには Patroni バージョンのみが含まれます (例: Patroni/4.0.0)。
      • ProductOnly: ヘッダーには製品名のみが含まれます (例: Patroni)。
      • Original (デフォルト): ヘッダーは元の動作を公開し、BaseHTTP および Python のバージョンを表示します (例: BaseHTTP/0.6 Python/3.12.3)。

次に、http_extra_headers と https_extra_headers の両方の例を示します。

restapi:
  listen: <listen>
  connect_address: <connect_address>
  authentication:
    username: <username>
    password: <password>
  http_extra_headers:
    'X-Frame-Options': 'SAMEORIGIN'
    'X-XSS-Protection': '1; mode=block'
    'X-Content-Type-Options': 'nosniff'
  cafile: <ca file>
  certfile: <cert>
  keyfile: <key>
  https_extra_headers:
    'Strict-Transport-Security': 'max-age=31536000; includeSubDomains'

警告

  • restapi.connect_address は、特定の Patroni クラスターのすべてのノードからアクセス可能である必要があります。内部的には、Patroni がリーダー レース中にこれを使用して、レプリケーション ラグが最小限のノードを見つけます。
  • クライアント証明書の検証を有効にした場合 (restapi.verify_client が required に設定されている場合)、ctl.certfile、ctl.keyfile、ctl.keyfile_password で有効なクライアント証明書を提供することが必須です。指定しない場合、Patroni は正しく動作しません。


CTL

  • ctl: (オプション)
    • authentication:
      • username: 保護された REST API エンドポイントにアクセスするための基本認証ユーザー名。指定されない場合、patronictl は REST API “username” パラメーターに指定された値を使用します。
      • password: 保護された REST API エンドポイントにアクセスするための基本認証パスワード。指定されない場合、patronictl は REST API “password” パラメーターに指定された値を使用します。
    • insecure: SSL 証明書を検証せずに、REST API への接続を許可します。
    • cacert: REST API SSL 証明書の検証中に使用する、信頼できる CA の証明書を含む CA_BUNDLE ファイルまたはディレクトリを指定します。指定されない場合、patronictl は REST API “cafile” パラメーターに指定された値を使用します。
    • certfile: クライアント証明書を含むファイルを PEM 形式で指定します。
    • keyfile: クライアント秘密鍵を含むファイルを PEM 形式で指定します。
    • keyfile_password: クライアントのキーファイルを復号化するためのパスワードを指定します。

ウォッチドッグ

  • mode: off、automatic、または required。 off の場合、ウォッチドッグは無効になります。 automatic の場合、ウォッチドッグが使用可能な場合は使用されますが、使用できない場合は無視されます。 required の場合、ウォッチドッグを正常に有効にできない限り、ノードはリーダーになりません。
  • device: ウォッチドッグ デバイスへのパス。デフォルトは /dev/watchdog です。
  • safety_margin: ウォッチドッグのトリガーとリーダー キーの有効期限の間の安全マージンの秒数。


タグ

  • clonefrom: true または false。 true に設定すると、他のノードはブートストラップにこのノードの使用を優先する可能性があります (このノードから pg_basebackup で取得します)。 clonefrom タグが true に設定されているノードが複数ある場合、ブートストラップ元のノードがランダムに選択されます。デフォルト値は false です。
  • noloadbalance: true または false。 true に設定すると、ノードは GET /replica REST API ヘルスチェックに対して HTTP ステータス コード 503 を返すため、ロード バランシングから除外されます。デフォルトは false です。
  • replicatefrom: 複製元の別のレプリカの名前。カスケード レプリケーションをサポートするために使用されます。
  • nosync: true または false。 true に設定すると、ノードは同期レプリカとして選択されなくなります。
  • sync_priority: 整数。synchronous_mode が on に設定されている場合に、同期レプリカの選択中にこのノードが持つべき優先順位を制御します。優先順位の高いノードは、優先順位の低いノードよりも優先されます。 sync_priority が 0 または負の場合、そのようなノードは synchronous_standby_names PostgreSQL パラメーターに書き込むことができません (nosync: true と同様)。このパラメータは、pg_stat_replication ビューで報告される sync_priority 値とは逆の意味をもつことに注意してください。
  • nofailover: true または false は、このノードがリーダー レースに参加してリーダーになることを許可するかどうかを制御します。デフォルトは false で、このノード はリーダー レースに参加できることを意味します。
  • failover_priority: 整数。フェイルオーバー中にこのノードが持つべき優先順位を制御します。同じ量の WAL を受信/再生した場合、優先順位の高いノードが優先順位の低いノードよりも優先されます。ただし、優先度に関係なく、受信/再生 LSN の値が高いノードが優先されます。 failover_priority が 0 または負の場合、そのようなノードはリーダー レースに参加したり、リーダーになることは許可されません (nofailover: true と同様)。既知の制限: failover_priority は現在、クォーラムベースの同期レプリケーション では動作しません。
  • nostream: true または false。 true に設定すると、ノードは WAL をストリーミングするためにレプリケーション プロトコルを使用しません。代わりに、アーカイブのリカバリ (restore_command が構成されている場合) と pg_wal/pg_xlog ポーリングに依存します。また、ノード自体とそのすべてのカスケード レプリカ上の永続的な論理レプリケーション スロットのコピーと同期も無効になります。このタグをプライマリー ノードに設定しても効果はありません。
警告

nofailover または failover_priority のいずれか 1 つだけを指定します。 nofailover: true を指定することは failover_priority: 0 と同じであり、nofailover: false を指定するとノードの優先順位 1 が与えられます。

これらの定義済みタグに加えて、独自のタグを追加することもできます。

  • key1: true
  • key2: false
  • key3: 1.4
  • key4: "RandomString"

タグは REST API および patronictl_list で表示されます。これらのタグを使用してインスタンスの健全性を確認することもできます。タグがインスタンスに定義されていない場合、またはそれぞれの値がクエリー値と一致しない場合は、HTTP ステータス コード 503 が返されます。

3 - 環境構成の設定

Patroni 構成パラメーターをオーバーライドするための環境変数。

システム環境変数を使用して、Patroni 構成ファイルで定義されている構成パラメーターの一部をオーバーライドすることができます。このドキュメントには、Patroni によって処理されるすべての環境変数がリストされています。これらの変数を介して設定された値は、Patroni 構成ファイルで設定された値よりも常に優先されます。


グローバル/ユニバーサル

  • PATRONI_CONFIGURATION: PATRONI_CONFIGURATION 環境変数を介して Patroni の構成全体を設定できます。この場合、他の環境変数は一切考慮されません!
  • PATRONI_THREAD_POOL_SIZE: リーダー競合またはフェールセーフ チェック中に、非同期タスクを実行し、REST API を介して他のメンバーと通信するために Patroni によって使用されるスレッド プールのサイズ。最小値は 5、デフォルト値は 5 です。
  • PATRONI_THREAD_STACK_SIZE: Patroni によって開始されるスレッドに使用されるスタック サイズを指定します。値は 64kB によってアライメントされる必要があります。最小値は 64kB 、デフォルト値 (Patroni によって設定) は 512kB です。
  • PATRONI_NAME: Patroni の現在のインスタンスが実行されているノードの名前。クラスター内で一意である必要があります。
  • PATRONI_NAMESPACE: Patroni がクラスターに関する情報を保持する構成ストア内のパス。デフォルト値: 「/service」
  • PATRONI_SCOPE: クラスター名
  • PG_MALLOC_ARENA_MAX: postmaster プロセスの MALLOC_ARENA_MAX 環境変数のカスタム値。設定されていない場合、postmaster は MALLOC_ARENA_MAX 値を継承します。

ログ

  • PATRONI_LOG_TYPE: ログの形式を設定します。 plain または json のいずれかになります。 json 形式を使用するには、jsonlogger がインストールされている必要があります。デフォルト値は plain です。
  • PATRONI_LOG_LEVEL: 一般的なログ レベルを設定します。デフォルト値は INFO です (Python ロギングのドキュメント を参照)
  • PATRONI_LOG_TRACEBACK_LEVEL: トレースバックが表示されるレベルを設定します。デフォルト値は ERROR です。PATRONI_LOG_LEVEL=DEBUG を有効にした場合にのみトレースバックを表示したい場合は、DEBUG に設定します。
  • PATRONI_LOG_FORMAT: ログのフォーマット文字列を設定します。ログ タイプが plain の場合、ログ形式は文字列で指定することを推奨します。使用可能な属性については、LogRecord 属性 を参照してください。ログ タイプが json の場合、ログ形式は文字列に加えてリストにすることもできます。各リスト項目は LogRecord 属性に対応させることを推奨します。フィールド名のみが必要であり、%( と ) は省略する必要があることに注意してください。別のキー名でログ フィールドを出力する場合は、辞書キーがログ フィールドで、値がログに出力するフィールドの名前である辞書を使用します。デフォルト値は %(asctime)s %(levelname)s: %(message)s です。
  • PATRONI_LOG_DATEFORMAT: 日時フォーマット文字列を設定します。 (formatTime() ドキュメント を参照)
  • PATRONI_LOG_STATIC_FIELDS: ログに追加のフィールドを付加します。このオプションは、ログタイプが json に設定されている場合にのみ使用できます。例 PATRONI_LOG_STATIC_FIELDS="{app: patroni}"
  • PATRONI_LOG_MAX_QUEUE_SIZE: Patroni は 2 段階のロギングを使用しています。ログ レコードはメモリ内のキューに書き込まれ、キューからログ レコードを取得して stderr またはファイルに書き込む別のスレッドがあります。内部キューの最大サイズはデフォルトで 1000 レコードによって制限されており、過去 1 時間 20 分までのログを保持するには十分なサイズです。
  • PATRONI_LOG_DIR: アプリケーションログを書き込むディレクトリ。ディレクトリは存在し、Patroni を実行するユーザーによる書き込みが可能である必要があります。この環境変数を設定すると、アプリケーションはデフォルトで 25MB のログを 4 つ保持します。これらの保持値は、PATRONI_LOG_FILE_NUM と PATRONI_LOG_FILE_SIZE で調整できます (以下を参照)。
  • PATRONI_LOG_MODE: ログ ファイルのアクセス許可 (0644 など)。指定しない場合、権限は現在の umask 値に基づいて設定されます。
  • PATRONI_LOG_FILE_NUM: 保持するアプリケーション ログの数。
  • PATRONI_LOG_FILE_SIZE: ログ ローリングをトリガーする patroni.log ファイルのサイズ (バイト単位)。
  • PATRONI_LOG_LOGGERS: Python モジュールごとにログ レベルを再定義します。例 PATRONI_LOG_LOGGERS="{patroni.postmaster: WARNING, urllib3: DEBUG}"
  • PATRONI_LOG_DEDUPLICATE_HEARTBEAT_LOGS: true に設定すると、同一のハートビートログが連続して出力されなくなります。デフォルト値は false です。
警告

HA ループの実行時間は、リソースの枯渇や同様の問題によるフェイルオーバーを診断する際に非常に貴重な情報となる可能性があります。 PATRONI_LOG_DEDUPLICATE_HEARTBEAT_LOGS が true に設定されている場合、(リーダーが変更されない限り) HA ループ実行のログは生成されないため、この潜在的に役立つ情報はログから取得できません。


Citus

Patroni と Citus の統合を有効にします。構成されている場合、Patroni はコーディネーター上での Citus ワーカーノードの登録を管理します。Citus サポートの詳細については、こちら を参照してください。

  • PATRONI_CITUS_GROUP: Citus グループ ID、整数。コーディネーターには 0 を使用し、ワーカーには 1、2 などを使用します。
  • PATRONI_CITUS_DATABASE: citus 拡張を作成するデータベース。コーディネーターとすべてのワーカーで同じである必要があります。現在サポートされているデータベースは 1 つだけです。

Consul

  • PATRONI_CONSUL_HOST: Consul ローカル エージェントのホスト:ポート。
  • PATRONI_CONSUL_URL: Consul ローカル エージェントの URL (形式: http(s)://host:port)
  • PATRONI_CONSUL_PORT: (オプション) Consul ポート
  • PATRONI_CONSUL_SCHEME: (オプション) http または https、デフォルトは http
  • PATRONI_CONSUL_TOKEN: (オプション) ACL トークン
  • PATRONI_CONSUL_VERIFY: (オプション) HTTPS リクエストの SSL 証明書を検証するかどうか
  • PATRONI_CONSUL_CACERT: (オプション) CA 証明書。存在する場合、検証が有効になります。
  • PATRONI_CONSUL_CERT: (オプション) クライアント証明書を含むファイル
  • PATRONI_CONSUL_KEY: (オプション) クライアント キーを含むファイル。キーが証明書の一部である場合は空にすることができます。
  • PATRONI_CONSUL_DC: (オプション) 通信するデータセンター。デフォルトでは、ホストのデータセンターが使用されます。
  • PATRONI_CONSUL_CONSISTENCY: (オプション) Consul の整合性モードを選択します。可能な値は default、consistent、または stale です (詳細については Consul API リファレンス を参照)
  • PATRONI_CONSUL_CHECKS: (オプション) セッションに使用される Consul ヘルス チェックのリスト。デフォルトでは、空のリストが使用されます。
  • PATRONI_CONSUL_REGISTER_SERVICE: (オプション) スコープパラメーターで定義された名前と、ノードのロールに応じた master、primary、replica、standby-leader のタグを持つサービスを登録するかどうか。デフォルトは false です
  • PATRONI_CONSUL_SERVICE_TAGS: (オプション) ロール (primary/replica/standby-leader) とは別に Consul サービスに追加する追加の静的タグ。デフォルトでは、空のリストが使用されます。
  • PATRONI_CONSUL_SERVICE_CHECK_INTERVAL: (オプション) 登録された URL に対してヘルスチェックを実行する頻度
  • PATRONI_CONSUL_SERVICE_CHECK_TLS_SERVER_NAME: (オプション) TLS 経由で接続するときに SNI ホストをオーバーライドします。Consul エージェントチェック API リファレンス も参照してください。

Etcd

  • PATRONI_ETCD_PROXY: etcd のプロキシ URL。プロキシを使用して etcd に接続している場合は、PATRONI_ETCD_URL の代わりにこのパラメータを使用します。
  • PATRONI_ETCD_URL: etcd の URL、形式: http(s)://(username:password@)host:port
  • PATRONI_ETCD_HOSTS: ‘host1:port1’、‘host2:port2’ などの形式の etcd エンドポイントのリスト
  • PATRONI_ETCD_USE_PROXIES: このパラメーターが true に設定されている場合、Patroni は hosts をプロキシのリストとして考慮し、etcd クラスターのトポロジ検出を実行せず、hosts の固定リストに固執します。
  • PATRONI_ETCD_PROTOCOL: http または https (指定しない場合は http が使用されます)。 url または proxy が指定されている場合は、それらからプロトコルを取得します。
  • PATRONI_ETCD_HOST: etcd エンドポイントのホスト:ポート。
  • PATRONI_ETCD_SRV: クラスター自動検出のために SRV レコードを検索するドメイン。 Patroni は、指定されたドメインの SRV サービス名 (最初に成功するまでこの順序で) のクエリーを試行します: _etcd-client-ssl、_etcd-client、_etcd-ssl、_etcd、_etcd-server-ssl、_etcd-server。 _etcd-server-ssl または _etcd-server の SRV レコードが取得された場合、ETCD ピア プロトコルが使用され、利用可能なメンバーについて ETCD がクエリーされます。それ以外の場合は、SRV レコードのホストが使用されます。
  • PATRONI_ETCD_SRV_SUFFIX: 検出中にクエリーされる SRV 名のサフィックスを構成します。このフラグを使用して、同じドメイン内の複数の etcd クラスターを区別します。 PATRONI_ETCD_SRV と組み合わせた場合にのみ機能します。たとえば、PATRONI_ETCD_SRV_SUFFIX=foo と PATRONI_ETCD_SRV=example.org が設定されている場合、DNS SRV クエリーが作成されます:_etcd-client-ssl-foo._tcp.example.org (考えられるすべての ETCD SRV サービス名に対して同様)。
  • PATRONI_ETCD_USERNAME: etcd 認証用のユーザー名。
  • PATRONI_ETCD_PASSWORD: etcd 認証用のパスワード。
  • PATRONI_ETCD_CACERT: CA 証明書。存在する場合、検証が有効になります。
  • PATRONI_ETCD_CERT: クライアント証明書を含むファイル。
  • PATRONI_ETCD_KEY: クライアント キーを含むファイル。キーが証明書の一部である場合は空にすることができます。

Etcdv3

Etcdv3 の環境名は etcd の場合と似ており、変数名に ETCD の代わりに ETCD3 を使用する必要があるだけです。例: PATRONI_ETCD3_HOST、PATRONI_ETCD3_CACERT など。

警告

プロトコル バージョン 2 で作成されたキーは、プロトコル バージョン 3 では表示されず、その逆も同様であるため、Patroni 構成を更新するだけでは etcd から Etcdv3 に切り替えることはできません。さらに、Patroni は etcd の gRPC ゲートウェイ (プロキシ) を使用して V3 API と通信します。これは、TLS 共通名認証が不可能であることを意味します。


ZooKeeper

  • PATRONI_ZOOKEEPER_HOSTS: ZooKeeper クラスター メンバーのカンマ区切りリスト: “‘host1:port1’,‘host2:port2’,’etc…’"。各要素を引用符で囲むことが重要です。
  • PATRONI_ZOOKEEPER_USE_SSL: (オプション) SSL が使用されているかどうか。デフォルトは false です。 false に設定すると、SSL 固有のパラメーターはすべて無視されます。
  • PATRONI_ZOOKEEPER_CACERT: (オプション) CA 証明書。存在する場合、検証が有効になります。
  • PATRONI_ZOOKEEPER_CERT: (オプション) クライアント証明書を含むファイル。
  • PATRONI_ZOOKEEPER_KEY: (オプション) クライアント キーを含むファイル。
  • PATRONI_ZOOKEEPER_KEY_PASSWORD: (オプション) クライアント キーのパスワード。
  • PATRONI_ZOOKEEPER_VERIFY: (オプション) 証明書を検証するかどうか。デフォルトは true です。
  • PATRONI_ZOOKEEPER_SET_ACLS: (オプション) 設定した場合、作成する各 ZNode にデフォルトの ACL を適用するように Kazoo を構成します。 ACL では、x509 スキーマ (デフォルト)、または digest などの他のサポートされている ZooKeeper スキーマのいずれかを使用できます。これらは、キーが完全なプリンシパル (オプションでスキームの接頭辞が付けられる) であり、値がアクセス許可のリストであるディクショナリとして指定する必要があります。権限は、CREATE、READ、WRITE、DELETE、ADMIN、または ALL の 1 つ以上です。たとえば、set_acls: {CN=principal1: [CREATE, READ], digest:principal2:+pjROuBuuwNNSujKyH8dGcEnFPQ=: [ALL]} です。
  • PATRONI_ZOOKEEPER_AUTH_DATA: (オプション) 接続に使用する認証資格情報。 scheme がキー、credential が値という形式の辞書である必要があります。デフォルトは空の辞書です。
注記

SSL をサポートするには、kazoo>=2.6.0 をインストールする必要があります。


Exhibitor

  • PATRONI_EXHIBITOR_HOSTS: Exhibitor (ZooKeeper) ノードの初期リスト (形式: ‘host1,host2,etc…’)。このリストは、Exhibitor (ZooKeeper) クラスターのトポロジーが変更されるたびに自動的に更新されます。
  • PATRONI_EXHIBITOR_PORT: Exhibitor ポート。


Kubernetes

  • PATRONI_KUBERNETES_BYPASS_API_SERVICE: (オプション) Kubernetes API と通信する場合、Patroni は通常 Kubernetes サービスに依存し、そのアドレスは KUBERNETES_SERVICE_HOST 環境変数を介してポッド内で公開されます。 PATRONI_KUBERNETES_BYPASS_API_SERVICE が true に設定されている場合、Patroni はサービスの背後にある API ノードのリストを解決し、それらのノードに直接接続します。
  • PATRONI_KUBERNETES_NAMESPACE: (オプション) Patroni ポッドが実行されている Kubernetes 名前空間。デフォルト値は default です。
  • PATRONI_KUBERNETES_LABELS: {label1: value1, label2: value2} 形式のラベル。これらのラベルは、現在のクラスターに関連付けられている既存のオブジェクト (ポッドとエンドポイントまたは ConfigMaps) を検索するために使用されます。また、Patroni は、作成するすべてのオブジェクト (エンドポイントまたは ConfigMap) にそれらを設定します。
  • PATRONI_KUBERNETES_SCOPE_LABEL: (オプション) クラスター名を含むラベルの名前。デフォルト値は cluster-name です。
  • PATRONI_KUBERNETES_BOOTSTRAP_LABELS: (オプション) {label1: value1, label2: value2} 形式のラベル。これらのラベルは、Patroni ポッドの状態が initializing new cluster、running custom bootstrap script、starting after custom bootstrap、または creating replica のいずれかである場合にそのポッドに割り当てられます。
  • PATRONI_KUBERNETES_ROLE_LABEL: (オプション) ロールを含むラベルの名前 (primary、replica、またはその他のカスタム値)。 Patroni は、実行されるポッドにこのラベルを設定します。デフォルト値は role です。
  • PATRONI_KUBERNETES_LEADER_LABEL_VALUE: (オプション) Postgres ロールが primary の場合のポッド ラベルの値。デフォルト値は primary です。
  • PATRONI_KUBERNETES_FOLLOWER_LABEL_VALUE: (オプション) Postgres ロールが replica の場合のポッド ラベルの値。デフォルト値は replica です。
  • PATRONI_KUBERNETES_STANDBY_LEADER_LABEL_VALUE: (オプション) Postgres ロールが standby_leader の場合のポッド ラベルの値。デフォルト値は primary です。
  • PATRONI_KUBERNETES_TMP_ROLE_LABEL: (オプション) ロールを含む一時ラベルの名前 (primary または replica)。このラベルの値には、対応するロールのデフォルトが常に使用されます。必要な場合のみ設定してください。
  • PATRONI_KUBERNETES_USE_ENDPOINTS: (オプション) true に設定すると、Patroni は ConfigMaps の代わりにエンドポイントを使用してリーダーの選出を実行し、クラスターの状態を維持します。
  • PATRONI_KUBERNETES_POD_IP: (オプション) Patroni が実行されているポッドの IP アドレス。 この値は PATRONI_KUBERNETES_USE_ENDPOINTS が有効な場合に必須であり、ポッドの PostgreSQL が昇格されるときにリーダー エンドポイント サブセットを設定するために使用されます。
  • PATRONI_KUBERNETES_PORTS: (オプション) Service オブジェクトにポートの名前がある場合、同じ名前が Endpoint オブジェクトに表示される必要があります。そうでない場合、サービスは機能しません。たとえば、サービスが {Kind: Service, spec: {ports: [{name: postgresql, port: 5432, targetPort: 5432}]}} として定義されている場合、PATRONI_KUBERNETES_PORTS='[{"name": "postgresql", "port": 5432}]' を設定する必要があります。これにより、Patroni はリーダー エンドポイントのサブセットの更新にそれを使用します。このパラメータは、PATRONI_KUBERNETES_USE_ENDPOINTS が設定されている場合にのみ使用されます。
  • PATRONI_KUBERNETES_CACERT: (オプション) Kubernetes API SSL 証明書の検証中に使用する、信頼できる CA の証明書を含む CA_BUNDLE ファイルを指定します。指定されない場合、Patroni は ServiceAccount シークレットによって提供される値を使用します。
  • PATRONI_RETRIABLE_HTTP_CODES: (オプション) 再試行する K8s API からの HTTP ステータス コードのリスト。デフォルトでは、Patroni は、500、503、および 504、または K8s API 応答に retry-after HTTP ヘッダーがある場合に再試行します。

Raft (非推奨)

  • PATRONI_RAFT_SELF_ADDR: Raft 接続をリッスンする ip:port。 self_addr はクラスターの他のノードからアクセスできる必要があります。設定されていない場合、ノードはコンセンサスに参加しません。
  • PATRONI_RAFT_BIND_ADDR: (オプション) Raft 接続をリッスンする ip:port。指定しない場合は、self_addr が使用されます。
  • PATRONI_RAFT_PARTNER_ADDRS: "'ip1:port1','ip2:port2'" 形式のクラスター内の他の Patroni ノードのリスト。各要素を引用符で囲むことが重要です。
  • PATRONI_RAFT_DATA_DIR: Raft ログとスナップショットを保存するディレクトリ。指定しない場合は、現在の作業ディレクトリが使用されます。
  • PATRONI_RAFT_PASSWORD: (オプション) 指定されたパスワードで Raft トラフィックを暗号化します。cryptography Python モジュールが必要です。
  • PATRONI_RAFT_MIN_TIMEOUT: (オプション) 基礎となる pysyncobj Raft 実装の最小選出タイムアウト (秒単位)。 3 * PATRONI_RAFT_APPEND_ENTRIES_PERIOD より大きくなければなりません。デフォルト: 0.4。
  • PATRONI_RAFT_MAX_TIMEOUT: (オプション) 基礎となる pysyncobj Raft 実装の最大選出タイムアウト (秒単位)。 PATRONI_RAFT_MIN_TIMEOUT より大きくなければなりません。デフォルト: 1.4。
  • PATRONI_RAFT_CONNECTION_TIMEOUT: (オプション) データを受信しなかった接続が切断されたとみなされるまでの秒数。 PATRONI_RAFT_MAX_TIMEOUT 以上である必要があります。デフォルト: 3.5。
  • PATRONI_RAFT_APPEND_ENTRIES_PERIOD: (オプション) ハートビート コマンドを送信する間隔 (秒単位)。 PATRONI_RAFT_MIN_TIMEOUT の 3 分の 1 未満である必要があります。デフォルト: 0.1。
  • PATRONI_RAFT_CONNECTION_RETRY_TIME: (オプション) オフライン ノードへの再接続試行間の秒単位の間隔。デフォルト: 5.0。
  • PATRONI_RAFT_LEADER_FALLBACK_TIMEOUT: (オプション) 過半数からの応答がないリーダーがフォロワー状態に戻るまでの秒数。 PATRONI_RAFT_APPEND_ENTRIES_PERIOD より大きくなければなりません。デフォルト: 30.0。
注記

Patroni は起動時にこれらの制約を検証し、違反している場合は起動を拒否します。これらの値は実行時に変更できないため、再起動が必要です。高遅延の制限などの詳細については、Raft 設定 を参照してください。


PostgreSQL

  • PATRONI_POSTGRESQL_LISTEN: Postgres がリッスンする IP アドレス + ポート。ポートコンポーネントが最後のアドレスの後ろにコロンで追加されている限り、カンマで区切られた複数のアドレスが許可されます (例: listen: 127.0.0.1,127.0.0.2:5432)。 Patroni は、このリストの最初のアドレスを使用して、PostgreSQL ノードへのローカル接続を確立します。
  • PATRONI_POSTGRESQL_CONNECT_ADDRESS: IP アドレス + 他のノードおよびアプリケーションから Postgres にアクセスできるポート。
  • PATRONI_POSTGRESQL_PROXY_ADDRESS: IP アドレス + Postgres の隣で実行されている接続プール (pgbouncer など) にアクセスできるポート。この値は、DCS のメンバー キーに proxy_url として書き込まれ、サービス検出に使用または役立つ可能性があります。
  • PATRONI_POSTGRESQL_DATA_DIR: Postgres データ ディレクトリの場所。既存であるか、Patroni によって初期化されます。
  • PATRONI_POSTGRESQL_CONFIG_DIR: Postgres 構成ディレクトリの場所。デフォルトはデータ ディレクトリです。 Patroni によって書き込み可能である必要があります。
  • PATRONI_POSTGRESQL_BIN_DIR: PostgreSQL バイナリへのパス。 (pg_ctl、initdb、pg_controldata、pg_basebackup、postgres、pg_isready、pg_rewind) デフォルト値は空の文字列で、PATH 環境変数が実行可能ファイルの検索に使用されることを意味します。
  • PATRONI_POSTGRESQL_BIN_PG_CTL: (オプション) pg_ctl バイナリのカスタム名。
  • PATRONI_POSTGRESQL_BIN_INITDB: (オプション) initdb バイナリのカスタム名。
  • PATRONI_POSTGRESQL_BIN_PG_CONTROLDATA: (オプション) pg_controldata バイナリのカスタム名。
  • PATRONI_POSTGRESQL_BIN_PG_BASEBACKUP: (オプション) pg_basebackup バイナリのカスタム名。
  • PATRONI_POSTGRESQL_BIN_POSTGRES: (オプション) postgres バイナリのカスタム名。
  • PATRONI_POSTGRESQL_BIN_IS_READY: (オプション) pg_isready バイナリのカスタム名。
  • PATRONI_POSTGRESQL_BIN_PG_REWIND: (オプション) pg_rewind バイナリのカスタム名。
  • PATRONI_POSTGRESQL_PGPASS: .pgpass パスワード ファイルへのパス。 Patroni は、pg_basebackup を実行する前および他の状況下でこのファイルを作成します。この場所は Patroni によって書き込み可能である必要があります。
  • PATRONI_REPLICATION_USERNAME: レプリケーション ユーザー名。ユーザーは初期化中に作成されます。レプリカはこのユーザーを使用して、ストリーミング レプリケーション経由でレプリケーション ソースにアクセスします。
  • PATRONI_REPLICATION_PASSWORD: レプリケーションのパスワード。ユーザーは初期化中に作成されます。
  • PATRONI_REPLICATION_SSLMODE: (オプション) sslmode 接続パラメータにマップします。これにより、クライアントはサーバーとの TLS ネゴシエーション モードのタイプを指定できます。各モードの動作の詳細については、PostgreSQL ドキュメント を参照してください。デフォルトのモードは prefer です。
  • PATRONI_REPLICATION_SSLKEY: (オプション) sslkey 接続パラメータにマップします。これは、クライアントの証明書で使用される秘密キーの場所を指定します。
  • PATRONI_REPLICATION_SSLPASSWORD: (任意)sslpassword 接続パラメーターに対応し、PATRONI_REPLICATION_SSLKEYで指定した秘密鍵のパスワードを指定します。
  • PATRONI_REPLICATION_SSLCERT: (オプション) sslcert 接続パラメータにマップされ、クライアント証明書の場所を指定します。
  • PATRONI_REPLICATION_SSLROOTCERT: (任意)sslrootcert 接続パラメーターに対応します。クライアントがサーバー証明書の検証に使用する、1つ以上の認証局(CA)の証明書を含むファイルの場所を指定します。
  • PATRONI_REPLICATION_SSLCRL: (オプション) sslcrl 接続パラメーターにマップされ、証明書失効リストを含むファイルの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
  • PATRONI_REPLICATION_SSLCRLDIR: (オプション) sslcrldir 接続パラメーターにマップされ、証明書失効リストを含むファイルが格納されたディレクトリの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
  • PATRONI_REPLICATION_SSLNEGOTIATION: (任意)sslnegotiation 接続パラメーターに対応し、SSLを使用する場合に、サーバーとのSSL暗号化のネゴシエーション方法を制御します。
  • PATRONI_REPLICATION_GSSENCMODE: (任意)gssencmode 接続パラメーターに対応します。サーバーと安全なGSS TCP/IP接続をネゴシエートするかどうか、またその優先順位を決定します。
  • PATRONI_REPLICATION_CHANNEL_BINDING: (オプション) channel_binding 接続パラメーターにマップされ、クライアントによるチャネル バインディングの使用を制御します。
  • PATRONI_SUPERUSER_USERNAME: スーパーユーザーの名前。初期化 (initdb) 中に設定され、後で postgres に接続するために Patroni によって使用されます。また、このユーザーは pg_rewind によって使用されます。
  • PATRONI_SUPERUSER_PASSWORD: スーパーユーザーのパスワード。初期化 (initdb) 中に設定されます。
  • PATRONI_SUPERUSER_SSLMODE: (オプション) sslmode 接続パラメータにマップします。これにより、クライアントはサーバーとの TLS ネゴシエーション モードのタイプを指定できます。各モードの動作の詳細については、PostgreSQL ドキュメント を参照してください。デフォルトのモードは prefer です。
  • PATRONI_SUPERUSER_SSLKEY: (オプション) sslkey 接続パラメータにマップします。これは、クライアントの証明書で使用される秘密キーの場所を指定します。
  • PATRONI_SUPERUSER_SSLPASSWORD: (任意)sslpassword 接続パラメーターに対応し、PATRONI_SUPERUSER_SSLKEYで指定した秘密鍵のパスワードを指定します。
  • PATRONI_SUPERUSER_SSLCERT: (オプション) sslcert 接続パラメータにマップされ、クライアント証明書の場所を指定します。
  • PATRONI_SUPERUSER_SSLROOTCERT: (任意)sslrootcert 接続パラメーターに対応します。クライアントがサーバー証明書の検証に使用する、1つ以上の認証局(CA)の証明書を含むファイルの場所を指定します。
  • PATRONI_SUPERUSER_SSLCRL: (オプション) sslcrl 接続パラメーターにマップされ、証明書失効リストを含むファイルの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
  • PATRONI_SUPERUSER_SSLCRLDIR: (オプション) sslcrldir 接続パラメーターにマップされ、証明書失効リストを含むファイルが格納されたディレクトリの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
  • PATRONI_SUPERUSER_SSLNEGOTIATION: (任意)sslnegotiation 接続パラメーターに対応し、SSLを使用する場合に、サーバーとのSSL暗号化のネゴシエーション方法を制御します。
  • PATRONI_SUPERUSER_GSSENCMODE: (任意)gssencmode 接続パラメーターに対応します。サーバーと安全なGSS TCP/IP接続をネゴシエートするかどうか、またその優先順位を決定します。
  • PATRONI_SUPERUSER_CHANNEL_BINDING: (オプション) channel_binding 接続パラメーターにマップされ、クライアントによるチャネル バインディングの使用を制御します。
  • PATRONI_REWIND_USERNAME: (オプション) pg_rewind のユーザーの名前。ユーザーは postgres 11+ の初期化中に作成され、必要なすべての 権限 が付与されます。
  • PATRONI_REWIND_PASSWORD: (オプション) pg_rewind のユーザーのパスワード。ユーザーは初期化中に作成されます。
  • PATRONI_REWIND_SSLMODE: (オプション) sslmode 接続パラメータにマップします。これにより、クライアントはサーバーとの TLS ネゴシエーション モードのタイプを指定できます。各モードの動作の詳細については、PostgreSQL ドキュメント を参照してください。デフォルトのモードは prefer です。
  • PATRONI_REWIND_SSLKEY: (オプション) sslkey 接続パラメータにマップします。これは、クライアントの証明書で使用される秘密キーの場所を指定します。
  • PATRONI_REWIND_SSLPASSWORD: (任意)sslpassword 接続パラメーターに対応し、PATRONI_REWIND_SSLKEYで指定した秘密鍵のパスワードを指定します。
  • PATRONI_REWIND_SSLCERT: (オプション) sslcert 接続パラメータにマップされ、クライアント証明書の場所を指定します。
  • PATRONI_REWIND_SSLROOTCERT: (任意)sslrootcert 接続パラメーターに対応します。クライアントがサーバー証明書の検証に使用する、1つ以上の認証局(CA)の証明書を含むファイルの場所を指定します。
  • PATRONI_REWIND_SSLCRL: (オプション) sslcrl 接続パラメーターにマップされ、証明書失効リストを含むファイルの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
  • PATRONI_REWIND_SSLCRLDIR: (オプション) sslcrldir 接続パラメーターにマップされ、証明書失効リストを含むファイルが格納されたディレクトリの場所を指定します。クライアントは、このリストに存在する証明書を持つサーバーへの接続を拒否します。
  • PATRONI_REWIND_SSLNEGOTIATION: (任意)sslnegotiation 接続パラメーターに対応し、SSLを使用する場合に、サーバーとのSSL暗号化のネゴシエーション方法を制御します。
  • PATRONI_REWIND_GSSENCMODE: (任意)gssencmode 接続パラメーターに対応します。サーバーと安全なGSS TCP/IP接続をネゴシエートするかどうか、またその優先順位を決定します。
  • PATRONI_REWIND_CHANNEL_BINDING: (オプション) channel_binding 接続パラメーターにマップされ、クライアントによるチャネル バインディングの使用を制御します。

REST API

  • PATRONI_RESTAPI_THREAD_POOL_SIZE: REST API リクエストを処理するために Patroni によって使用されるスレッド プールのサイズ。最小値は 5、デフォルト値は 5 です。
  • PATRONI_RESTAPI_CONNECT_ADDRESS: REST API にアクセスするための IP アドレスとポート。
  • PATRONI_RESTAPI_LISTEN: HAProxy のヘルスチェック情報を提供するために、Patroni がリッスンする IP アドレスとポート。
  • PATRONI_RESTAPI_USERNAME: 安全でない REST API エンドポイントを保護するための Basic 認証ユーザー名。
  • PATRONI_RESTAPI_PASSWORD: 安全でない REST API エンドポイントを保護するための Basic 認証パスワード。
  • PATRONI_RESTAPI_CERTFILE: PEM 形式の証明書を含むファイルを指定します。 certfile が指定されていないか空のままの場合、API サーバーは SSL を使用せずに動作します。
  • PATRONI_RESTAPI_KEYFILE: 秘密鍵を含むファイルを PEM 形式で指定します。
  • PATRONI_RESTAPI_KEYFILE_PASSWORD: キーファイルを復号化するためのパスワードを指定します。
  • PATRONI_RESTAPI_CAFILE: クライアント証明書の検証中に使用する、信頼できる CA の証明書を含むファイルを CA_BUNDLE で指定します。
  • PATRONI_RESTAPI_CIPHERS: (任意)許可する暗号スイートを指定します(例:“ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1”)。
  • PATRONI_RESTAPI_VERIFY_CLIENT: none (デフォルト)、optional、または required。none の場合、REST API はクライアント証明書をチェックしません。required の場合、すべての REST API 呼び出しにクライアント証明書が必要です。optional の場合、すべての安全でない REST API エンドポイントにクライアント証明書が必要です。required が使用されている場合、証明書の署名の検証が成功するとクライアント認証は成功します。optional の場合、クライアント証明書がチェックされるのは PUT、POST、PATCH、および DELETE リクエストに対してのみです。
  • PATRONI_RESTAPI_ALLOWLIST: (オプション): 安全でない REST API エンドポイントの呼び出しを許可するホストのセットを指定します。単一の要素は、ホスト名、IP アドレス、または CIDR 表記を使用したネットワーク アドレスです。デフォルトでは allow all が使用されます。 allowlist または allowlist_include_members が設定されている場合、含まれていないものはすべて拒否されます。
  • PATRONI_RESTAPI_ALLOWLIST_INCLUDE_MEMBERS: (オプション): true に設定すると、DCS に登録されている他のクラスターメンバーから安全でない REST API エンドポイントへのアクセスが許可されます (IP アドレスまたはホスト名はメンバーの api_url から取得されます)。OS が送信接続に別の IP を使用する可能性があることに注意してください。
  • PATRONI_RESTAPI_HTTP_EXTRA_HEADERS: (任意)REST APIサーバーがHTTP応答に追加情報を含めるためのHTTPヘッダー。
  • PATRONI_RESTAPI_HTTPS_EXTRA_HEADERS: (オプション) HTTPS ヘッダーは、TLS が有効な場合に REST API サーバーが HTTP 応答とともに追加情報を渡せるようにします。これにより、http_extra_headers で設定された追加情報も渡されます。
  • PATRONI_RESTAPI_REQUEST_QUEUE_SIZE: (オプション): Patroni REST API が使用する TCP ソケットのリクエストキューサイズを設定します。キューがいっぱいになると、それ以降のリクエストでは “Connection denied” エラーが発生します。デフォルト値は 5 です。
  • PATRONI_RESTAPI_SERVER_TOKENS: (オプション) Server HTTP ヘッダーの値を構成します。Original (デフォルト) は元の動作を公開し、BaseHTTP および Python のバージョンを表示します (例: BaseHTTP/0.6 Python/3.12.3)。Minimal: ヘッダーには Patroni のバージョンのみが含まれます (例: Patroni/4.0.0)。ProductOnly: ヘッダーには製品名のみが含まれます (例: Patroni)。

警告

  • PATRONI_RESTAPI_CONNECT_ADDRESS は、特定の Patroni クラスターのすべてのノードからアクセス可能である必要があります。内部的には、Patroni がリーダー レース中にこれを使用して、レプリケーション ラグが最小限のノードを見つけます。
  • クライアント証明書の検証を有効にした場合 (PATRONI_RESTAPI_VERIFY_CLIENT が required に設定されている場合)、PATRONI_CTL_CERTFILE、PATRONI_CTL_KEYFILE、PATRONI_CTL_KEYFILE_PASSWORD で 有効なクライアント証明書 を提供することが必須です。提供しない場合、Patroni は正しく動作しません。

CTL

  • PATRONICTL_CONFIG_FILE: (オプション) 構成ファイルの場所。
  • PATRONI_CTL_USERNAME: (オプション) 保護された REST API エンドポイントにアクセスするための Basic 認証ユーザー名。指定されない場合、patronictl は REST API “username” パラメーターに指定された値を使用します。
  • PATRONI_CTL_PASSWORD: (オプション) 保護された REST API エンドポイントにアクセスするための Basic 認証パスワード。指定されない場合、patronictl は REST API “password” パラメーターに指定された値を使用します。
  • PATRONI_CTL_INSECURE: (オプション) SSL 証明書を検証せずに、REST API への接続を許可します。
  • PATRONI_CTL_CACERT: (オプション) REST API SSL 証明書の検証中に使用する、CA_BUNDLE ファイルまたは信頼できる CA の証明書が含まれるディレクトリを指定します。指定されない場合、patronictl は REST API “cafile” パラメーターに指定された値を使用します。
  • PATRONI_CTL_CERTFILE: (オプション) PEM 形式のクライアント証明書を含むファイルを指定します。
  • PATRONI_CTL_KEYFILE: (オプション) クライアント秘密鍵を含むファイルを PEM 形式で指定します。
  • PATRONI_CTL_KEYFILE_PASSWORD: (オプション) クライアントのキーファイルを復号化するためのパスワードを指定します。