Open Source

Patroni PostgreSQL HA

Patroni・etcd・PgBouncer・HAProxy をベースに、PostgreSQL 高可用性(HA)クラスタを Ansible Playbook の一回の実行で構築するオープンソースプロジェクトです。

Apache License 2.0 · オープンソースGitHub リポジトリ

特徴と強み

01

自動フェイルオーバー

リーダーノードの障害を検知すると、数秒以内にスタンバイが自動昇格し、サービス停止を最小限に抑えます。

02

スプリットブレイン防止

etcd のクォーラム(過半数)合意に基づいてリーダーを選出し、リーダーが二重に存在する状況を根本から防ぎます。

03

固定接続アドレス(VIP)

Keepalived が管理する VIP に接続するため、フェイルオーバーが発生してもアプリケーション設定の変更は不要です。

04

無停止での設定変更

Patroni を通じて PostgreSQL の設定をランタイムに反映し、クラスタ全体へ一貫して配布します。

構成コンポーネント

実績ある標準的なオープンソーススタックを組み合わせ、各レイヤーの役割を明確に分離します。

PostgreSQL

データベース本体。ストリーミングレプリケーションでリーダーとスタンバイを構成します(14〜17 対応、デフォルト 16)。

Patroni

クラスタの指揮者。リーダー選出・レプリケーション構成・フェイルオーバーを自動管理します。

etcd

クラスタ状態ストア。クォーラム合意でリーダー情報を安全に保管します。

PgBouncer

軽量コネクションプーラー。大量接続を効率的に仲介し、DB 負荷を軽減します。

HAProxy

トラフィックの案内役。現在のリーダーを判別し、読み書きトラフィックを正しいノードへ振り分けます。

Keepalived

VIP 管理者。障害時にも単一の固定接続アドレスを維持します。

アーキテクチャ

アプリケーション → VIP → HAProxy → PgBouncer → PostgreSQL という接続経路を、etcd の合意が支えます。

アプリケーション
リーダーが替わっても常に同じ VIP に接続
VIP:5000 · 書き込み
VIP:5001 · 読み取り
固定アドレス VIP
Keepalived が稼働中の HAProxy ノードに付与
HAProxy
ヘルスチェック(/primary·/replica)で現リーダーへルーティング
/primary
/replica
リーダーノード
書き込み可能
PgBouncer · コネクションプーリング
PostgreSQL リーダー
レプリカノード
読み取り専用
PgBouncer · コネクションプーリング
PostgreSQL レプリカ
ストリーミングレプリケーション
Patroni
各 DB ノードに常駐 — リーダー選出と昇格/降格の制御
リーダーキーの記録 · 更新 · 監視
etcd クラスタ
共同台帳 · クォーラム 3 — リーダーキーを記録・監視
etcd-1
etcd-2
etcd-3
接続レイヤー
Keepalived · HAProxy
固定 VIP の提供
リーダー/レプリカのルーティング
ヘルスチェックによる切替
読み取り負荷分散
プーリングレイヤー
PgBouncer
コネクションプーリング
大量接続の仲介
トランザクションプールモード
DB 負荷の削減
データレイヤー
PostgreSQL · Patroni
ストリーミングレプリケーション
自動リーダー選出
自動フェイルオーバー
無停止の設定反映
合意レイヤー
etcd クラスタ
クラスタ状態の保存
クォーラム(過半数)合意
スプリットブレイン防止
3 ノード構成を推奨
推奨スタック
PostgreSQL 14–17Patroni 3.xetcd 3.5.xPgBouncer 1.21+HAProxy 2.x+Ansible 2.15+

デプロイ方式

Ansible Playbook で全工程を自動化し、インフラ規模に合わせて 2 つのトポロジーをサポートします。

分離型構成

etcd 専用 3 台 + DB 2 台以上で役割を分離し、大規模・ミッションクリティカルな環境に適しています。

統合型構成

3 台のサーバーに全コンポーネントを同居させ、最小リソースで HA を構成します。

Ansible 自動化

Debian/Ubuntu・RHEL/Rocky に対応した冪等(idempotent)な Playbook で、繰り返し実行しても安全です。

GitHub ですぐに始められます

Playbook 全体とインストールガイドはリポジトリでオープンソースとして公開されています。