Open Source
Patroni PostgreSQL HA
基于 Patroni、etcd、PgBouncer 和 HAProxy,只需运行一次 Ansible Playbook 即可构建 PostgreSQL 高可用(HA)集群的开源项目。
Apache License 2.0 · 开源GitHub 仓库
特点与优势
01
自动故障转移
检测到主节点故障后,备节点在数秒内自动升级,将服务中断降到最低。
02
防止脑裂
基于 etcd 法定人数(多数派)共识选举主节点,从根本上杜绝出现两个主节点的情况。
03
固定接入地址(VIP)
应用通过 Keepalived 管理的 VIP 接入,即使发生故障转移也无需修改应用配置。
04
不停机变更配置
通过 Patroni 在运行时应用 PostgreSQL 配置,并在整个集群中保持一致。
组成组件
组合久经验证的标准开源组件,清晰划分各层职责。
PostgreSQL
数据库本体,基于流复制构建主备架构(支持 14~17,默认 16)。
Patroni
集群指挥者,自动管理主节点选举、复制配置与故障转移。
etcd
集群状态存储,通过法定人数共识安全保存主节点信息。
PgBouncer
轻量级连接池,高效代理海量连接,降低数据库负载。
HAProxy
流量向导,识别当前主节点,将读写流量路由到正确的节点。
Keepalived
VIP 管理器,即使发生故障也保持单一固定接入地址。
架构
应用 → VIP → HAProxy → PgBouncer → PostgreSQL 的接入路径,由 etcd 共识提供保障。
应用程序
即使发生主备切换,也始终连接同一个 VIP
VIP:5000 · 写入
VIP:5001 · 读取
固定地址 VIP
由 Keepalived 分配给存活的 HAProxy 节点
HAProxy
通过健康检查(/primary·/replica)路由到当前 Leader
/primary
/replica
Leader 节点
可读写
PgBouncer · 连接池
PostgreSQL Leader
副本节点
只读
PgBouncer · 连接池
PostgreSQL 副本
流复制
Patroni
常驻每个 DB 节点 — 负责选主与升降级控制
记录 · 续约 · 监视 Leader 键
etcd 集群
共享账本 · 法定人数 3 — 记录并监视 Leader 键
etcd-1
etcd-2
etcd-3
接入层
Keepalived · HAProxy
提供固定 VIP
主/副本路由
基于健康检查的切换
读负载均衡
连接池层
PgBouncer
连接池
代理海量连接
事务池模式
降低数据库负载
数据层
PostgreSQL · Patroni
流复制
自动主节点选举
自动故障转移
运行时配置生效
共识层
etcd 集群
集群状态存储
法定人数(多数派)共识
防止脑裂
推荐 3 节点部署
推荐组件版本
PostgreSQL 14–17Patroni 3.xetcd 3.5.xPgBouncer 1.21+HAProxy 2.x+Ansible 2.15+
部署方式
使用 Ansible Playbook 自动化全部流程,并提供两种拓扑以匹配不同规模的基础设施。
分离式部署
3 台专用 etcd 节点 + 2 台以上数据库节点,职责分离,适合大规模关键业务环境。
一体式部署
在 3 台服务器上部署全部组件,以最小资源实现高可用。
Ansible 自动化
支持 Debian/Ubuntu 与 RHEL/Rocky 的幂等 Playbook,可安全地重复执行。