温馨提示×

PostgreSQL在Ubuntu上的高可用性实现

小樊
35
2025-12-26 13:23:08
栏目: 云计算

在 Ubuntu 上落地 PostgreSQL 高可用,常用且稳定的路径有:基于复制栈的Patroni+etcd(可叠加 VIPHAProxy)、pg_repmgr、以及“主从+Keepalived VIP”的轻量方案。下面给出可操作的架构对比与关键配置步骤,便于快速选型与实施。

一、方案对比与适用场景

方案 组件与拓扑 自动故障转移 对外访问方式 优点 注意点
Patroni + etcd + VIP 3 节点 etcd + 2/3+ PostgreSQL 节点 + vip-manager 虚拟 IP(VIP)或负载均衡 成熟、可编排、支持手动/自动切换 需维护一致性集群(etcd)
Patroni + etcd + HAProxy 同上 + HAProxy 前置 HAProxy 读写分离/主路由 无状态代理、便于与现有 LB 体系融合 需健康检查与联动(如 callback)
pg_repmgr PostgreSQL + repmgrd 守护 是(配 repmgrd) VIP 或应用直连 轻量、与 PG 紧耦合、运维简单 需 SSH 免密、WAL 保留策略
主从 + Keepalived VIP 主从复制 + Keepalived 是(Keepalived) VIP 实现简单、依赖少 脑裂风险、需严格网络与时间同步

上述组合在实际生产中被广泛采用:Patroni+etcd 负责控制面与自动故障转移,VIP 或 HAProxy 提供稳定接入;pg_repmgr 以复制管理为核心,配合守护进程实现自动切换;Keepalived VIP 方案实现成本低、易上手。

二、Patroni + etcd + VIP 快速落地

  • 准备与安装
    • 建议准备3 台 etcd(奇数台,便于选举)与2/3+ PostgreSQL 节点(Ubuntu 20.04/22.04/24.04 均可)。安装组件:PostgreSQL、etcd、Patroni(Ubuntu 可用系统仓库或 pip 安装),以及用于漂移 VIP 的vip-manager
  • 配置 Patroni(每个节点 /etc/patroni.yml 要点)
    • 集群命名与作用域:scope、namespace
    • DCS(etcd)连接与租约:如 ttl、loop_wait、retry_timeout
    • PostgreSQL 参数:wal_level=replica、max_wal_senders、max_replication_slots、hot_standby=on、use_pg_rewind=true
    • REST API:用于健康检查与切换(如 listen: 0.0.0.0:8008)
    • 示例片段(关键项):
      • bootstrap.dcs.ttl: 30、loop_wait: 10、maximum_lag_on_failover
      • bootstrap.postgresql.parameters: wal_level/replica、max_wal_senders/4、use_slots/true、use_pg_rewind/true
      • postgresql.listen: 0.0.0.0:5432;data_dir: /var/lib/postgresql//main
  • 启动与验证
    • systemctl 启动 etcd、patroni;patronictl list/cluster show 查看角色与一致性
    • 配置 vip-manager(指向 etcd/Consul 状态),为主库所在节点绑定VIP,对外提供稳定地址
  • 接入与切换
    • 应用/中间件连接 VIP 或 Patroni REST/HAProxy 前端;演练手动 switchover/failover,验证数据一致性与服务连续性

三、pg_repmgr 实操要点

  • 安装与初始化
    • 所有节点安装 PostgreSQLrepmgr;主库创建 repmgr 用户与库:CREATE USER repmgr SUPERUSER REPLICATION PASSWORD ‘…’; CREATE DATABASE repmgr OWNER repmgr;
  • 主库关键配置(postgresql.conf)
    • wal_level=replica、wal_log_hints=on、max_wal_senders≥10、hot_standby=on、archive_mode=on、archive_command(如 ‘test ! -f /arch/%f && cp %p /arch/%f’)
    • pg_hba.conf 放行复制与 repmgr:host replication all <网段>/<掩码> md5;host repmgr all <网段>/<掩码> trust/md5
  • 从库搭建
    • 使用 repmgr 克隆:repmgr -f /etc/repmgr//repmgr.conf standby clone
    • 启动从库后执行:repmgr -f … standby follow
  • 自动故障转移
    • 启动守护进程:repmgrd -f …;配置故障策略与告警;定期 repmgr cluster show 巡检
  • 扩展与仲裁
    • 可加入 Witness 节点提升仲裁可靠性(如 3 数据节点 + 1 witness)

四、主从 + Keepalived VIP 轻量方案

  • 适用场景
    • 资源受限或希望最小化外部依赖时,可采用主从复制 + Keepalived 实现 VIP 漂移,对外保持单一连接地址。
  • 实施要点
    • 主从完成流复制(wal_level=replica、max_wal_senders、hot_standby=on 等);应用连接 VIP:5432
    • Keepalived 配置 VRRP 实例与健康检查脚本(如基于 psql 的 replication lag 或角色判断);主库异常时降低优先级,备库接管 VIP
    • 建议配合 WAL 归档与监控告警,降低脑裂与数据丢失风险

五、通用加固与运维要点

  • 复制与健康
    • 合理设置 WAL 保留(如 wal_keep_segments 或使用复制槽)、监控复制延迟(如 pg_stat_replication);启用日志与告警
  • 安全与网络
    • 复制与管理通道使用强认证(scram-sha-256)、最小权限;跨机房/公网部署启用 TLS;保证 NTP/chrony 时间同步
  • 变更与演练
    • 任何参数变更先在测试环境验证;定期执行故障转移演练备份恢复演练;保留回滚预案
  • 连接入口治理
    • 统一通过 VIP/HAProxy/Patroni REST 接入,避免应用直连具体节点;读写分离在代理层或应用侧明确策略

以上方案均可满足不同规模与复杂度的可用性需求:追求自动化与可编排性优先选择Patroni+etcd;希望轻量运维可选pg_repmgr;极致简化可用Keepalived VIP。无论采用哪种路径,务必结合业务 RPO/RTO、团队运维能力与网络条件进行选型与验证。

0