postgresql高可用演进需依业务规模选择方案:一、流复制+keepalived适用于中小规模秒级rto;二、repmgr增强自动化运维;三、patroni+etcd适配云原生;四、pg_auto_failover简化双节点自治;五、polardb实现计算存储分离。

如果您正在运行一个单机 PostgreSQL 实例,但已面临业务增长带来的停机风险、数据丢失隐患或读写瓶颈,则说明架构演进已迫在眉睫。PostgreSQL 的高可用演进并非一蹴而就的替换动作,而是围绕 WAL 日志、复制机制与集群协调能力展开的系统性升级路径。以下是覆盖主流生产场景的多种可行架构实践:
一、基于流复制 + keepalived 的主从高可用方案
该方案利用 PostgreSQL 原生流复制完成数据同步,并通过 keepalived 管理虚拟 IP(VIP)实现故障时的快速服务接管。其优势在于组件成熟、无额外数据库扩展依赖、RPO 接近零,适用于中小规模且对 RTO 要求在秒级的业务。
1、在主节点上启用 wal_level = replica,设置 max_wal_senders ≥ 2,并配置 pg_hba.conf 允许从节点 IP 发起 replication 连接。
2、使用 pg_basebackup 命令从主节点拉取基础备份,在从节点初始化数据目录并启动为热备模式(recovery.conf 或 postgresql.conf 中配置 primary_conninfo)。
3、在主从节点均部署 keepalived,主节点配置 priority 100 并声明 VIP;从节点 priority 设为 90,并启用 nopreempt 防止脑裂;所有应用连接指向该 VIP 地址。
4、验证主从同步状态:在主节点执行 SELECT * FROM pg_stat_replication;,确认 state = 'streaming' 且 sync_state = 'sync'(若启用同步复制)。
二、基于 repmgr 的自动化主从管理方案
repmgr 将流复制封装为可编程的集群生命周期管理工具,提供统一 CLI、自动故障检测、手动/自动 failover 及节点注册发现能力。它不替代复制本身,而是增强其可观测性与可控性,适合需要标准化运维流程的团队。
1、在所有节点安装 repmgr 5.3.1 及其依赖,并确保 PostgreSQL 编译时启用 --with-openssl 和 --with-libxml。
2、初始化集群:在主节点执行 repmgr -f /etc/repmgr.conf primary register,生成 repmgr.nodes 表并记录主节点元数据。
3、克隆从节点:在备用服务器运行 repmgr -h 主节点IP -U repmgr -d repmgr standby clone,自动完成备份、配置写入与服务启动。
4、启用监控服务:启动 repmgrd 守护进程,配置 monitor_interval_secs = 5,使其持续检查节点健康并根据 failure_threshold 触发提升逻辑。
三、基于 Patroni + Etcd 的云原生高可用集群
Patroni 是面向容器与云环境设计的 PostgreSQL 集群控制器,将故障转移决策委托给外部分布式协调服务(如 Etcd、ZooKeeper 或 Consul)。它支持多节点拓扑、级联复制声明、自定义恢复钩子及 REST API 集成,适用于 Kubernetes 或混合云生产环境。
1、部署 Etcd 集群(至少三节点),确保端口 2379/2380 可达,并配置 client-cert-auth = true 提升安全性。
2、为每个 PostgreSQL 节点编写 patroni.yml,指定 scope、namespace、etcd host、postgresql.bin_dir 及 recovery_conf 设置。
3、启动 Patroni 服务:执行 patroni /etc/patroni.yml,Patroni 自动完成初始化、注册、选举与状态同步。
4、验证集群视图:调用 curl http://localhost:8008/cluster,返回 JSON 中应包含当前 leader、members 列表及每个节点的 role、state 和 timeline。
四、基于 pg_auto_failover 的轻量级双节点自治方案
pg_auto_failover 专为简化双节点 HA 而生,内置 Monitor、Primary、Secondary 三角色,采用轻量级状态机驱动,无需外部依赖即可完成自动故障识别与切换。其设计目标是“开箱即用”,适合 DevOps 快速交付或边缘计算场景。
1、在独立服务器或主节点旁部署 Monitor:运行 pg_auto_failover monitor --init --pgdata /var/lib/pg_auto_failover/monitor。
2、在主节点执行 pg_auto_failover node create --host 主节点IP --pgdata /var/lib/pgsql/data --monitor "postgres://autoctl_node@monitor-host:5432/pg_auto_failover"。
3、在从节点重复 node create 命令,仅修改 --host 参数为本机 IP,并确保 postgresql.conf 中 wal_level = logical 且 max_replication_slots ≥ 2。
4、触发模拟故障:在主节点执行 sudo systemctl stop postgresql-14,Monitor 将在 10 秒内检测失败并自动执行 promote 操作。
五、PolarDB for PostgreSQL 计算存储分离架构部署
PolarDB 是阿里云提供的兼容 PostgreSQL 协议的云原生数据库服务,采用计算与存储分离架构,多个计算节点共享同一份底层存储,天然规避数据同步延迟问题。该方案免去复制配置与故障转移逻辑开发,由云平台统一保障 RPO=0 与 RTO
1、登录阿里云控制台,进入 PolarDB for PostgreSQL 页面,选择地域与可用区,创建集群实例(推荐版本 14 或 15)。
2、在集群配置中启用“读写分离”开关,并设置只读节点数量(支持 1–15 个弹性扩展)。
3、获取集群连接地址:主地址用于写入与强一致性读,只读地址用于最终一致性查询,两者均支持 DNS 轮询与权重配置。
4、验证高可用能力:在控制台主动重启主节点,观察只读节点是否自动接管流量,同时检查 SELECT * FROM pg_stat_activity WHERE backend_type = 'client backend'; 中连接分布变化。









