用 Patroni + etcd + HAProxy/VIP 搭建 1 主多从的 PostgreSQL 高可用集群,支持自动故障切换和读写分离。
安装 PostgreSQL、Patroni、etcd 和 HAProxy。
配置 etcd 集群(3 节点奇数)。
配置 /etc/patroni.yml:
scope: pg-cluster
name: pg1
restapi:
listen: 0.0.0.0:8008
connect_address: 10.0.0.11:8008
etcd3:
hosts: 10.0.0.11:2379,10.0.0.12:2379,10.0.0.13:2379
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
listen: 0.0.0.0:5432
data_dir: /var/lib/postgresql/16/main
authentication:
replication:
username: replicator
password: secret
启动第一个节点并初始化,其他节点用相同配置加入。
验证集群:
patronictl -c /etc/patroni.yml list
patronictl -c /etc/patroni.yml topology
配置 HAProxy 指向 Patroni REST API 或主库端口,提供读写/只读入口。
测试切换:
patronictl -c /etc/patroni.yml switchover
patronictl -c /etc/patroni.yml failover
pg_rewind,不一定总能成功。patroni — 高可用psql — 数据库etcdctl — DCSpgbackrest — 备份合上页面,先回答,再展开对照。
patronictl list 确认 1 leader + N replica,验证主库写入、备库只读和复制延迟,做一次计划内 switchover 确认无数据丢失且 VIP/LB 正常切换,并确认备份和 WAL 归档正常。pg_rewind,不一定总能成功。