スタンバイクラスター
Patroniは、/"スタンバイクラスター/"と呼ばれる機能を使用して、リモートデータセンターリージョンへのカスケードレプリケーションの実行もサポートしています。このタイプのクラスターには次の特徴があります。
/"standby leader/" リモートノードから複製することを除き、通常のクラスターリーダーとほぼ同じように動作します。
カスケードレプリカ、スタンバイリーダーから複製しています。
スタンバイリーダーは、DCSのリーダーロックを保持および更新します。リーダーロックの有効期限が切れると、カスケードレプリカは選択を実行して、スタンバイから別のリーダーを選択します。
スタンバイクラスターと、それが複製するプライマリクラスターの間にはそれ以上の関係はありません。特に、同じDCSを使用する場合、同じDCSスコープを共有してはなりません。これらは、レプリケーション情報を除き、お互いに何も知りません。また、スタンバイクラスターは、プライマリクラスターの 後援者リスト または 後援者リスト 出力に表示されません。
柔軟性を高めるために、standby_cluster`セクションに :ref:`create_replica_methods <custom_replica_creation> キーを提供することにより、クラスターが/"スタンバイモード"のときにレプリカとリカバリWALレコードの作成方法を指定できます。クラスターがデタッチされ、`postgresql`セクションの`create_replica_methods`によって制御される通常のクラスターとして機能する場合、これはレプリカの作成とは異なります。 /"standby/"と/"normal/" `create_replica_methods`は両方とも、`postgresql`セクションのキーを参照します。
このようなクラスターを構成するには、パトロニ構成でセクション standby_cluster を指定する必要があります。
bootstrap:
dcs:
standby_cluster:
host: 1.2.3.4
port: 5432
primary_slot_name: patroni
create_replica_methods:
- basebackup
これらのオプションは、クラスターブートストラップ中に1回のみ適用され、その後にそれらを変更する唯一の方法はDCSを介することに注意してください。
Patroniは、リモートプライマリのPGDATAで`postgresql.conf`または`postgresql.conf.backup`を見つけることを想定しており、ベースバックアップ後に見つからない場合は起動しません。リモートプライマリが`postgresql.conf`を他の場所で保持している場合、それをPGDATAにコピーするのはあなたの責任です。
スタンバイクラスターでレプリケーションスロットを使用する場合、プライマリクラスターで対応するレプリケーションスロットも作成する必要があります。 これは、スタンバイクラスター実装によって自動的に実行されません。 プライマリクラスターでPatroniの永久レプリケーションスロット機能を使用して、 primary_slot_name と同じ名前のレプリケーションスロット、または primary_slot_name が提供されていない場合はそのデフォルト値を維持できます。
リモートサイトがプライマリに接続する単一のエンドポイントを提供しない場合、 standby_cluster.host セクションにソースクラスターのすべてのホストをリストできます。 standby_cluster.host にコンマで区切られた複数のホストが含まれる場合、Patroniは次のことを行います。
スタンバイリーダーノードの
primary_conninfoにtarget_session_attrs=read-writeを追加します。pg_rewindを実行する必要があるかどうかを判断するとき、またはスタンバイクラスターのすべてのノードでpg_rewindを実行するときは、target_session_attrs=read-writeを使用します。pg_rewindが正常に動作するには、クラスターをdata page checksumsinitdbの--data-checksumsオプションで初期化する必要があるか、wal_log_hintsをonに設定する必要があることに注意してください。そうしないと、pg_rewindは正常に機能しません。
別のスタンバイクラスターまたはプライマリクラスターのスタンバイメンバーからスタンバイクラスターをレプリケートする可能性があります。そのためには、 standby_cluster.host セクションで単一のホストを定義する必要があります。ただし、この場合、 pg_rewind はスタンバイクラスターでの実行に失敗することに注意する必要があります。