本文へ移動

クラスターの一時停止/再開モード

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} で発行することもできます。