クラスターの一時停止/再開モード
Patroni クラスター管理における一時停止および再開モードの動作。
目的
ある条件下では、Patroni はクラスターの管理を一時的に停止する必要があり、DCS にクラスター状態を保持したままにする必要があります。このような状況の例として、メジャーバージョンのアップグレードや破損からの復旧など、稀なクラスター操作が挙げられます。これらの操作中は、Patroni が認識しない理由でノードの起動・停止が頻発し、一部のノードが一時的にプライマリーに昇格する場合もあり、その結果、同時に1つのプライマリーしか実行されていないという前提が破られることがあります。したがって、Patroni は「クラスターから分離」する機能を備えており、Pacemaker のメンテナンスモードに相当する動作を実現できる必要があります。
実装
Patroni が一時停止モードで実行されている場合、PostgreSQL の状態を変更しません。ただし、以下のケースを除きます。
- 各ノードについて、DCS のメンバーキーはクラスターに関する現在の情報をもとに更新されます。これにより、メンバーノードが実行中である場合、Patroni はそのノードで読み取り専用のクエリーを実行します。
- リーダーロックを持つPostgresのプライマリーでは、Patroniがロックを更新します。リーダーロックを持つノードがプライマリーでなくなる(つまり手動で降格された)場合、Patroniはそのノードを再び昇格するのではなく、ロックを解放します。
- 手動での再起動、手動での予期しないフェイルオーバー/スイッチオーバーおよび再初期化は許可されています。スケジュールされた操作は許可されません。スイッチオーバーは、切り替えるノードを明示した場合にのみ許可されます。
- Patroni が「並列」なプライマリーを検出すると警告を発しますが、リーダー・ロックがなければプライマリーを降格しません。
- クラスターにリーダー・ロックが存在しない場合、実行中のプライマリーがロックを取得します。プライマリー・ノードが複数存在する場合、ロックを最初に取得したプライマリーが勝者となります。プライマリーがまったく存在しない場合、Patroni はレプリカの昇格を試みません。このルールには例外があります。以前のプライマリーが手動での昇格により自己降格したためにリーダー・ロックが存在しない場合、昇格リクエストで指定された候補ノードのみがリーダー・ロックを取得できます。新しいリーダー・ロックが付与された場合(すなわち手動でレプリカを昇格した後)、Patroni は以前のリーダーからストリーミングしていたレプリカが新しいリーダーに切り替えることを確認します。
- Postgres を停止した場合、Patroni は再起動を試みません。Patroni を停止した場合、管理している Postgres インスタンスの停止を試みません。
- Patroni は、他のクラスター メンバーを表さない、または永続スロットの構成にリストされていないレプリケーション スロットを削除しようとはしません。
ユーザーガイド
patronictl は pause および resume コマンドをサポートしています。
また、PATCH リクエストを {namespace}/{cluster}/config キーに対して {"pause": true/false/null} で発行することもできます。