总体思路与架构分层
- 将高可用分为两层:
- 数据面 PostgreSQL 集群高可用(负责主从复制、自动故障转移、恢复)。
- 管理面 pgAdmin 高可用(多实例部署 + 外部负载均衡/虚拟IP,保证控制台7×24可达)。
- 数据面在 CentOS 上常用且成熟的方案有:Patroni + etcd/Consul(自动选主、REST API、易与 HAProxy 集成),repmgr(轻量、脚本化事件、自动故障转移),PAF(基于 Pacemaker/Corosync 的集群资源管理)。pgAdmin 属于无状态 Web 应用,推荐多实例 + HAProxy/Keepalived VIP 或容器编排平台(如 Kubernetes)对外提供统一入口。
方案一 Patroni + etcd + HAProxy + Keepalived(推荐)
- 适用场景:需要自动故障转移、可观测性强、与云平台或标准负载均衡器易集成。
- 组件与端口规划示例:
- PostgreSQL:节点间复制端口 5432;Patroni REST API:8008;etcd:2379。
- HAProxy 管理端口:7000(统计),业务端口:5432(读写分离可再开读端口)。
- Keepalived VIP:192.168.10.100(对外统一地址)。
- 核心步骤(概要):
- 部署 3 节点 etcd 作为 DCS(奇数节点以形成多数派)。
- 各节点部署 Patroni,配置 scope、DCS、REST API、复制参数(如 use_pg_rewind、use_slots、wal_level=replica、max_wal_senders 等),启动 Patroni 形成集群。
- 部署 HAProxy:启用 health check,配置后端为各 PostgreSQL 节点;对外暴露 5432,必要时将“写”定向到 leader、将“读”做负载均衡(Patroni 提供 API/标签辅助识别角色)。
- 部署 Keepalived 提供 VIP(或直接使用云厂商的负载均衡器),对外统一入口,故障时 VIP 漂移到新的主节点所在主机。
- pgAdmin 连接字符串指向 VIP:5432,无需随数据库主从切换而修改。
- 说明:Patroni 负责选主与自动故障转移,DCS(如 etcd)维护集群状态;HAProxy/Keepalived 提供稳定的访问入口与故障切换能力。
方案二 repmgr + pgpool-II + Keepalived(轻量替代)
- 适用场景:希望减少外部依赖(无需 etcd),以 PostgreSQL 复制管理为中心,借助 pgpool-II 做连接池/负载均衡/故障转移。
- 组件与端口规划示例:
- PostgreSQL:5432;pgpool-II:5432(业务)、7000(管理/统计);Keepalived VIP:192.168.10.100。
- 核心步骤(概要):
- 初始化主从复制,使用 repmgr 完成节点注册、克隆与监控,启用自动故障转移(配置 witness 可提升脑裂判定可靠性)。
- 部署 pgpool-II:配置后端节点、开启 load_balance_mode、配置 health_check_period/health_check_timeout、failover_command/recovery_command 脚本(用于主从切换时刷新连接状态)。
- 部署 Keepalived 提供 VIP,或直接使用 pgpool 对外端口;pgAdmin 指向 VIP:5432。
- 说明:repmgr 侧重复制与切换流程,pgpool-II 提供连接池、读写分离与健康检查;整体依赖较少,运维脚本需完善。
pgAdmin 部署与高可用要点
- 多实例部署:在 2–3 台 CentOS 上独立部署 pgAdmin(RPM 包或 Docker),保持配置与数据目录一致;对外统一域名或 VIP。
- 负载均衡与健康检查:在 HAProxy 中为 pgAdmin 配置后端实例与健康检查(HTTP),对外暴露 80/443;会话保持可选(pgAdmin 自身会话粘性需求较低)。
- 安全加固:启用 HTTPS/TLS、强密码策略、限制管理网访问、必要时启用 SELinux 或最小权限运行。
- 备份与恢复:定期备份 pgAdmin 配置与用户数据库(若使用本地 SQLite/外部数据库),并记录服务器连接清单,便于快速恢复。
- 监控与告警:对 pgAdmin 主机与应用做 systemd/进程存活、端口连通、HTTP 200 监控;结合日志轮转与告警通道(邮件/IM)。
备份与监控联动
- 数据库备份:建议与数据库高可用方案配套使用 pgBackrest,支持全量/增量/差异备份、并行传输、从备机备份、WAL 归档到对象存储等,便于灾难恢复与节点重建。
- 监控与可视化:部署 Prometheus PostgreSQL Exporter(默认 9187) + Grafana,采集连接数、事务、复制延迟等关键指标,配置阈值告警;pgAdmin 的 Dashboard 可用于日常巡检。
- 日志分析:启用数据库日志收集(如 logging_collector=on),定期用 pgBadger 生成报表,定位慢查询与异常。
快速对比与选型建议
| 方案 |
数据面组件 |
入口/负载 |
优点 |
注意点 |
| Patroni + etcd + HAProxy + Keepalived |
Patroni + etcd + PostgreSQL |
VIP 或云 LB + HAProxy |
自动选主、REST API、生态成熟、易集成云 LB |
需维护 DCS(建议 3/5 节点多数派) |
| repmgr + pgpool-II + Keepalived |
repmgr + PostgreSQL + pgpool-II |
VIP 或 pgpool 端口 |
依赖少、脚本化、连接池/读写分离内置 |
需完善切换脚本与健康检查策略 |
- 选型建议:追求自动化与可观测性优先选 Patroni;希望轻量且以复制管理为中心可选 repmgr + pgpool-II。无论哪种方案,pgAdmin 均建议多实例 + VIP/负载均衡 对外提供稳定入口。