分布式集群搭建:PostgreSQL高可用解决方案
(5) feilong.org 修订于2026-07-13 09:37:22 PostgreSQL教程分布式集群搭建:PostgreSQL高可用解决方案
1. 高可用架构概述
PostgreSQL作为开源关系型数据库,其高可用性(High Availability, HA)方案是保障业务连续性的关键。在分布式环境中,常见的HA架构包括主从复制、流复制、逻辑复制以及结合负载均衡的多节点集群。本文将以主从复制+故障转移为例,详细介绍如何搭建PostgreSQL高可用集群。
1.1 核心组件
- 主节点(Primary):负责处理写操作和数据变更
- 从节点(Standby):通过流复制同步主节点数据
- 故障转移机制:自动切换主备角色,确保服务不中断
- 监控系统:实时检测节点状态并触发告警
---
2. 环境准备与规划
2.1 网络配置
所有节点需处于同一局域网内,并确保以下端口开放:
- PostgreSQL默认端口 5432
- 主从复制专用端口(可自定义)
|
1 2 3 |
示例:iptables开放端口(CentOS) sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT sudo iptables -A INPUT -p tcp --dport <replication-port> -j ACCEPT |
2.2 节点角色分配
假设集群包含两台物理服务器:
- 主节点:192.168.1.10
- 从节点:192.168.1.11
---
3. 主从复制配置
3.1 主节点配置
编辑 postgresql.conf 文件,启用流复制功能:
|
1 2 3 4 5 |
postgresql.conf listen_addresses = '*' wal_level = replica max_wal_senders = 3 hot_standby = on |
重启PostgreSQL服务使配置生效:
|
1 |
sudo systemctl restart postgresql |
创建复制用户并授权:
|
1 2 3 |
-- 在主节点执行 CREATE USER repl_user WITH REPLICATION PASSWORD 'secure_password'; GRANT REPLICATION SLAVE ON DATABASE dbname TO repl_user; |
3.2 从节点配置
编辑 postgresql.conf 文件,指定主节点地址:
|
1 2 |
postgresql.conf hot_standby = on |
修改 pg_hba.conf 允许复制连接:
|
1 2 |
pg_hba.conf host replication repl_user 192.168.1.10/32 md5 |
初始化从节点数据(需主节点开启archive_mode):
|
1 |
pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/data -U repl_user -P |
启动从节点服务并验证复制状态:
|
1 |
psql -c "SELECT * FROM pg_stat_replication;" |
---
4. 故障转移机制实现
4.1 使用 Patroni 实现自动切换
Patroni 是基于 etcd 的 PostgreSQL 集群管理工具,支持故障检测与自动主备切换。
安装 Patroni:
|
1 |
sudo apt-get install patroni -y |
配置 patroni.yml 文件(示例):
|
1 2 3 4 5 6 7 |
cluster_name: my_cluster nodes: - name: node1 dcs: etcd: hosts: http://localhost:2379 prefix: /my-cluster |
启动 Patroni 服务:
|
1 |
sudo systemctl start patroni |
4.2 验证故障转移
模拟主节点宕机:
|
1 |
sudo systemctl stop postgresql |
观察 Patroni 是否自动将从节点提升为主节点,并更新 DNS 记录(需结合 Keepalived 或 HAProxy 实现负载均衡)。
---
5. 监控与维护
5.1 使用 Prometheus + Grafana 监控
安装 Prometheus PostgreSQL Exporter:
|
1 2 |
wget https://github.com/wrouesnel/postgres_exporter/releases/download/v0.13.0/postgres_exporter-0.13.0.linux-amd64.tar.gz tar -xzf postgres_exporter-0.13.0.linux-amd64.tar.gz |
配置 Exporter 并启动:
|
1 |
./postgres_exporter --web.listen-address=:9187 --config.file=exporter.yaml |
在 Grafana 中创建数据源,导入 PostgreSQL 监控仪表盘模板(如
|
1 |
postgresql-dashboards.json |
)。
5.2 日常维护建议
- 定期检查 WAL 文件同步状态:
|
1 |
SELECT * FROM pg_waldump('pg_xlog_replay_pause'); |
- 备份策略:结合 pg_dump 和云存储实现异地备份。
- 节点扩容:通过 Patroni 动态添加新节点至集群。
---
6. 总结
PostgreSQL 高可用集群的搭建需要合理规划网络、配置主从复制机制,并配合故障转移工具(如 Patroni)与监控系统实现稳定运行。在分布式环境中,需结合业务需求选择合适的架构方案,同时关注性能优化与安全性加固。通过本文提供的步骤和示例代码,开发者可快速构建具备高可用性的 PostgreSQL 集群环境。
---
参考文档
- [PostgreSQL 官方文档 - Replication](https://www.postgresql.org/docs/current/replication.html)
- [Patroni GitHub 仓库](https://github.com/patroni/patroni)
更新网址:https://feilong.org/postgresql-ha-cluster
最初发布:20260713 09:37:22 feilong.org 于广州
加入收藏夹,查看更方便。