PostgreSQL在Ubuntu上的高可用性方案
PostgreSQL在Ubuntu上的高可用性(High Availability, HA)方案旨在通过冗余、自动故障转移和数据同步机制,确保数据库服务的连续性和可靠性。以下是几种主流方案,涵盖从基础到高级的实现方式:
主从复制是PostgreSQL原生支持的基础高可用方案,通过**流式传输预写式日志(WAL)**实现主库与从库的数据同步。
postgresql.conf,启用WAL日志(wal_level = replica)、允许复制连接(max_wal_senders = 10)、设置WAL保留大小(wal_keep_size = 128MB);修改pg_hba.conf,允许从库IP通过复制用户连接(host replication all <standby_ip>/32 md5);重启服务使配置生效。pg_basebackup工具从主库拉取数据(pg_basebackup -h <master_ip> -D /var/lib/postgresql/<version>/main -U postgres -P -R),-R参数会自动创建standby.signal文件和primary_conninfo配置。SELECT * FROM pg_stat_replication;查看从库连接状态,在从库执行SELECT pg_is_in_recovery();(返回true表示从库状态正常)。repmgr是EDB公司开源的PostgreSQL复制管理工具,简化了主从复制的部署、监控和故障转移流程。
repmgr standby clone);repmgr cluster show);repmgrd守护进程检测主库状态,自动提升从库为新主库);repmgr standby promote)。sudo apt install repmgr);CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD 'replpass';),并配置pg_hba.conf允许复制连接;repmgr.conf(指定节点ID、名称、连接信息),执行repmgr standby clone克隆数据,启动repmgrd守护进程。Patroni是基于Python的高可用解决方案,通过分布式一致性存储(如etcd、Consul)实现自动故障转移,避免脑裂问题。
patronictl failover)、节点恢复(patronictl reinit)。patroni.yml文件(指定etcd地址、PostgreSQL数据目录、复制用户信息);sudo patroni /etc/patroni.yml),通过patronictl list查看集群状态。Keepalived通过**VRRP(虚拟路由冗余协议)**实现虚拟IP(VIP)的漂移,为PostgreSQL提供高可用访问入口。
sudo apt install keepalived);keepalived.conf文件(指定VIP、优先级、健康检查脚本);sudo systemctl start keepalived),通过ip addr命令验证VIP绑定。对于需要高可用+负载均衡的场景,可以组合使用Patroni、etcd和PgBouncer:
pool_mode参数(如session、transaction)调整连接池模式,适应不同业务需求。以上方案可根据业务需求(如数据一致性要求、运维复杂度、预算)选择: