フェイルオーバーとリーダー選出(Patroni、Stolon)
PatroniまたはStolonで自動フェイルオーバーを実現し、スプリットブレインを避けるためにクォーラムを設定します。
「フェイルオーバーとリーダー選出(Patroni、Stolon)」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
なぜ自動フェイルオーバーするのか
手動フェイルオーバーは遅く、ミスも起こりやすいものです。ツールを使えば、プライマリの障害を検出し、人の介入なしにレプリカを昇格できます。
フェイルオーバーの手順
次の処理が必要です。
- プライマリが停止していることを検出する(ヘルスチェック、コンセンサス)
- 最新の WAL を持つレプリカを選ぶ
- そのレプリカを昇格する(pg_promote / pg_ctl promote)
- 他のレプリカが新しいプライマリに追従するよう再設定する
- アプリケーションの接続ルーティングを更新する
スプリットブレインのリスク
ネットワークが分断されると、古いプライマリがまだ稼働しているのにレプリカを昇格してしまう可能性があります。2 つのプライマリが存在すると、書き込みが競合してデータが破損します。クォーラムで回避してください。
Patroni
外部 DCS(分散構成ストア)を使用する Python デーモンです。通常は etcd、Consul、または Zookeeper をリーダー選出に使用します。
# patroni.yml
name: pg1
scope: my_cluster
etcd:
hosts: 10.0.0.10:2379,10.0.0.11:2379,10.0.0.12:2379
postgresql:
data_dir: /var/lib/postgresql/dataPatroni が新しいリーダーを選ぶ方法
各ノードの Patroni デーモンは、etcd のリーダーロックを取得しようと競争します。ロックを保持できるのは 1 つのノードだけで、そのノードがプライマリになります。その他のノードはそのノードに追従します。
Stolon
Go ベースの代替ツールです。似たコンセンサスモデルを使用しますが、運用上の特性が異なります。sentinel、keeper、proxy の各コンポーネントに責任を分割します。
repmgr
2ndQuadrant が提供する軽量なツールです。自動化が少ない代わりに、手動での制御性に優れています。小規模な構成に適しています。
クラウド管理型フェイルオーバー
RDS、Cloud SQL、Aurora はフェイルオーバーを自動で処理します。運用の簡単さと引き換えに、柔軟性が低下します。
フェイルオーバー後の接続ルーティング
アプリは新しいプライマリを認識する必要があります。選択肢は次のとおりです。
- DNS の更新(TTL により遅延します)
- フェイルオーバーツールが管理するフローティング IP
- プロキシ層:HAProxy、スクリプトと組み合わせた pgbouncer、AWS RDS エンドポイント
同期レプリケーションとフェイルオーバー
同期スタンバイを使用すると、データ損失ゼロが保証されます。自動フェイルオーバーと組み合わせると、最も強固な HA を実現できます。
クォーラム
同期レプリケーションでは、synchronous_standby_names にクォーラムを設定します。3 つのレプリカのうち任意の 2 つが確認すればよいため、遅いレプリカや障害が発生したレプリカが 1 つあっても、コミットをブロックせずに済みます。
synchronous_standby_names = 'ANY 2 (replica1, replica2, replica3)'書き込み後の読み取り
フェイルオーバー後やレプリケーション遅延がある場合、アプリが新しいプライマリに書き込んだ直後にレプリカから読み取ると、古いデータを取得する可能性があります。書き込み直後の読み取りをプライマリにルーティングするか、pg_last_wal_replay_lsn を追跡してください。
フェイルオーバーのテスト
必要になる前にテストしてください。ステージング環境で毎月プライマリを停止し、ランブックを練習します。本番のフェイルオーバーはそれだけでも大きな負荷がかかるため、予期せぬ事態は避けるべきです。
まとめ
自動フェイルオーバーにより、重要な処理経路から人を排除できます。
- 自己管理環境では Patroni / Stolon
- マネージド環境では RDS / Cloud SQL
- スプリットブレインに注意し、クォーラムを使用
- 定期的にフェイルオーバーを練習
クイックチェック
PostgreSQL のレプリケーションにおける「スプリットブレイン」とは何ですか?
よくある質問
「フェイルオーバーとリーダー選出(Patroni、Stolon)」レッスンは無料ですか?
はい。「フェイルオーバーとリーダー選出(Patroni、Stolon)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「フェイルオーバーとリーダー選出(Patroni、Stolon)」で何を学びますか?
PatroniまたはStolonで自動フェイルオーバーを実現し、スプリットブレインを避けるためにクォーラムを設定します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「フェイルオーバーとリーダー選出(Patroni、Stolon)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ストリーミングレプリケーションとWAL
- シャーディングのための論理レプリケーション
- フェイルオーバーとリーダー選出(Patroni、Stolon)
- 読み取りレプリカと接続ルーティング