Patroni PostgreSQL HA
Patroni・etcd・PgBouncer・HAProxy をベースに、PostgreSQL 高可用性(HA)クラスタを Ansible Playbook の一回の実行で構築するオープンソースプロジェクトです。
特徴と強み
自動フェイルオーバー
リーダーノードの障害を検知すると、数秒以内にスタンバイが自動昇格し、サービス停止を最小限に抑えます。
スプリットブレイン防止
etcd のクォーラム(過半数)合意に基づいてリーダーを選出し、リーダーが二重に存在する状況を根本から防ぎます。
固定接続アドレス(VIP)
Keepalived が管理する VIP に接続するため、フェイルオーバーが発生してもアプリケーション設定の変更は不要です。
無停止での設定変更
Patroni を通じて PostgreSQL の設定をランタイムに反映し、クラスタ全体へ一貫して配布します。
構成コンポーネント
実績ある標準的なオープンソーススタックを組み合わせ、各レイヤーの役割を明確に分離します。
PostgreSQL
データベース本体。ストリーミングレプリケーションでリーダーとスタンバイを構成します(14〜17 対応、デフォルト 16)。
Patroni
クラスタの指揮者。リーダー選出・レプリケーション構成・フェイルオーバーを自動管理します。
etcd
クラスタ状態ストア。クォーラム合意でリーダー情報を安全に保管します。
PgBouncer
軽量コネクションプーラー。大量接続を効率的に仲介し、DB 負荷を軽減します。
HAProxy
トラフィックの案内役。現在のリーダーを判別し、読み書きトラフィックを正しいノードへ振り分けます。
Keepalived
VIP 管理者。障害時にも単一の固定接続アドレスを維持します。
アーキテクチャ
アプリケーション → VIP → HAProxy → PgBouncer → PostgreSQL という接続経路を、etcd の合意が支えます。
デプロイ方式
Ansible Playbook で全工程を自動化し、インフラ規模に合わせて 2 つのトポロジーをサポートします。
分離型構成
etcd 専用 3 台 + DB 2 台以上で役割を分離し、大規模・ミッションクリティカルな環境に適しています。
統合型構成
3 台のサーバーに全コンポーネントを同居させ、最小リソースで HA を構成します。
Ansible 自動化
Debian/Ubuntu・RHEL/Rocky に対応した冪等(idempotent)な Playbook で、繰り返し実行しても安全です。