使用repmgr搭建PostgreSQL高可用集群实战指南

发布时间:2026/10/31 9:23:45

使用repmgr搭建PostgreSQL高可用集群实战指南 1. 为什么选择repmgr搭建PostgreSQL高可用集群在数据库运维领域高可用性(High Availability)是保证业务连续性的关键要素。PostgreSQL作为一款功能强大的开源关系型数据库其原生支持流复制(Streaming Replication)机制这为构建高可用架构奠定了基础。然而原生的流复制缺乏自动故障检测和切换能力这正是repmgr工具大显身手的地方。repmgr是一个专门为PostgreSQL设计的开源集群管理工具它通过以下核心功能增强了PostgreSQL的流复制能力自动化节点注册与集群状态监控支持手动和自动故障转移(Failover)提供节点重新加入(Rejoin)机制维护集群元数据信息与Patroni等同类工具相比repmgr的优势在于其轻量级和简单性。它不需要额外的分布式协调服务(如etcd或ZooKeeper)而是通过每个节点上运行的repmgrd守护进程来监控集群状态。这种设计使得repmgr特别适合中小规模的生产环境也是我推荐在3节点集群中使用的关键原因。2. 环境准备与规划2.1 硬件与系统要求在开始部署前我们需要准备3台服务器建议配置如下操作系统CentOS 7.9或Ubuntu 20.04 LTSCPU4核以上内存8GB以上存储SSD硬盘至少50GB可用空间网络节点间延迟1ms建议千兆内网互联对于我们的3节点集群规划如下节点1 (pg-node1): 初始主节点IP 192.168.1.101节点2 (pg-node2): 备节点1IP 192.168.1.102节点3 (pg-node3): 备节点2IP 192.168.1.1032.2 软件版本选择根据实际生产经验我推荐以下版本组合PostgreSQL: 14.5 (长期支持版本)repmgr: 5.3.3 (稳定版本避免使用最新的5.4.1已知有安装问题)注意在生产环境中强烈建议所有节点使用相同版本的操作系统和软件以避免兼容性问题。2.3 系统基础配置在所有节点上执行以下配置创建postgres用户useradd postgres passwd postgres配置SSH互信用于后续切换操作su - postgres ssh-keygen -t rsa ssh-copy-id postgrespg-node1 ssh-copy-id postgrespg-node2 ssh-copy-id postgrespg-node3安装必要依赖yum install -y readline readline-devel zlib zlib-devel openssl openssl-devel \ pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel \ perl perl-devel libcurl-devel libicu libicu-devel tcl-devel \ uuid-devel gcc gcc-c make flex bison perl-ExtUtils*3. PostgreSQL与repmgr安装配置3.1 PostgreSQL安装与初始化在所有节点上编译安装PostgreSQLwget https://ftp.postgresql.org/pub/source/v14.5/postgresql-14.5.tar.gz tar -xzvf postgresql-14.5.tar.gz cd postgresql-14.5 ./configure --prefix/usr/local/pgsql make make install在主节点(pg-node1)初始化数据库mkdir -p /data/pgdata chown postgres:postgres /data/pgdata su - postgres /usr/local/pgsql/bin/initdb -D /data/pgdata --data-checksums -E UTF83.2 主节点参数配置编辑主节点的postgresql.confvi /data/pgdata/postgresql.conf # 修改以下参数 listen_addresses * port 5432 max_connections 1000 wal_level replica archive_mode on archive_command test ! -f /data/pg_archive/%f cp %p /data/pg_archive/%f max_wal_senders 10 wal_keep_size 1024 hot_standby on wal_log_hints on shared_preload_libraries repmgr配置pg_hba.conf允许复制连接vi /data/pgdata/pg_hba.conf # 添加以下行 host replication repuser 192.168.1.101/32 trust host replication repuser 192.168.1.102/32 trust host replication repuser 192.168.1.103/32 trust host all all 0.0.0.0/0 scram-sha-256启动主节点PostgreSQL服务/usr/local/pgsql/bin/pg_ctl -D /data/pgdata start3.3 repmgr安装与配置在所有节点上安装repmgrwget https://repmgr.org/download/repmgr-5.3.3.tar.gz tar -xzvf repmgr-5.3.3.tar.gz cd repmgr-5.3.3 ./configure --prefix/usr/local/repmgr PG_CONFIG/usr/local/pgsql/bin/pg_config make make install在主节点创建repmgr元数据库和用户/usr/local/pgsql/bin/psql -c CREATE USER repmgr SUPERUSER PASSWORD repmgr; /usr/local/pgsql/bin/psql -c CREATE DATABASE repmgr OWNER repmgr; /usr/local/pgsql/bin/psql -c CREATE USER repuser REPLICATION;配置.pgpass文件所有节点vi ~/.pgpass *:5432:repmgr:repmgr:repmgr *:5432:postgres:postgres:postgres chmod 600 ~/.pgpass4. 3节点集群搭建实战4.1 主节点注册在主节点创建repmgr配置文件mkdir -p /etc/repmgr vi /etc/repmgr/repmgr.conf node_id1 node_namepg-node1 conninfohost192.168.1.101 port5432 userrepmgr passwordrepmgr dbnamerepmgr connect_timeout3 data_directory/data/pgdata replication_userrepuser replication_typephysical repmgr_bindir/usr/local/pgsql/bin pg_bindir/usr/local/pgsql/bin failoverautomatic log_file/var/log/repmgr.log注册主节点/usr/local/repmgr/bin/repmgr -f /etc/repmgr/repmgr.conf primary register验证注册/usr/local/repmgr/bin/repmgr -f /etc/repmgr/repmgr.conf cluster show4.2 备节点配置与加入在两个备节点上执行克隆操作/usr/local/repmgr/bin/repmgr -h 192.168.1.101 -U repmgr -d repmgr -f /etc/repmgr/repmgr.conf standby clone启动备节点PostgreSQL服务/usr/local/pgsql/bin/pg_ctl -D /data/pgdata start注册备节点/usr/local/repmgr/bin/repmgr -f /etc/repmgr/repmgr.conf standby register4.3 启动repmgrd守护进程在所有节点上配置repmgrd服务vi /etc/repmgr/repmgr.conf # 添加以下配置 repmgrd_service_start_command/usr/local/repmgr/bin/repmgrd -f /etc/repmgr/repmgr.conf -p /var/run/repmgrd.pid -d --verbose repmgrd_service_stop_commandkill cat /var/run/repmgrd.pid connection_check_typeping reconnect_attempts3 reconnect_interval5 promote_command/usr/local/repmgr/bin/repmgr standby promote -f /etc/repmgr/repmgr.conf --log-to-file follow_command/usr/local/repmgr/bin/repmgr standby follow -f /etc/repmgr/repmgr.conf --log-to-file --upstream-node-id%n创建systemd服务文件vi /etc/systemd/system/repmgrd.service [Unit] Descriptionrepmgr daemon Afterpostgresql.service [Service] Userpostgres Grouppostgres Typeforking ExecStart/usr/local/repmgr/bin/repmgrd -f /etc/repmgr/repmgr.conf -p /var/run/repmgrd.pid -d ExecStopkill cat /var/run/repmgrd.pid Restartalways [Install] WantedBymulti-user.target启动并启用服务systemctl daemon-reload systemctl enable repmgrd systemctl start repmgrd5. 集群管理与故障切换测试5.1 日常管理命令查看集群状态repmgr -f /etc/repmgr/repmgr.conf cluster show检查节点状态repmgr -f /etc/repmgr/repmgr.conf node status查看事件日志repmgr -f /etc/repmgr/repmgr.conf cluster event5.2 手动切换(Switchover)测试在备节点上执行手动切换repmgr -f /etc/repmgr/repmgr.conf standby switchover切换过程详解验证当前主备状态停止主节点PostgreSQL服务提升目标备节点为新主节点重新配置原主节点为备节点并加入集群更新其他备节点指向新主节点5.3 自动故障转移(Failover)测试模拟主节点故障# 在主节点上 pg_ctl -D /data/pgdata stop观察自动故障转移repmgrd检测到主节点不可用备节点间进行选举基于LSN、优先级和节点ID选举出的备节点自动提升为新主节点其他备节点自动重新指向新主节点恢复原主节点repmgr -f /etc/repmgr/repmgr.conf node rejoin --force-rewind6. 生产环境优化与注意事项6.1 监控与告警配置建议配置以下监控项节点复制延迟集群节点状态repmgrd进程状态自动故障转移事件可以使用Prometheus Grafana搭建监控系统关键指标包括pg_replication_lagrepmgr_nodes_statusrepmgr_events_count6.2 常见问题排查问题1备节点无法加入集群可能原因主备节点PostgreSQL版本不一致网络连接问题认证配置错误(pg_hba.conf)复制槽冲突解决方案# 检查日志获取详细错误 tail -f /data/pgdata/log/postgresql-*.log # 验证网络连接 psql -h 主节点IP -U repmgr -d repmgr -c SELECT 1 # 检查复制用户权限 psql -c SELECT * FROM pg_roles WHERE rolname repuser;问题2自动故障转移不触发可能原因repmgrd服务未运行连接检查配置不正确选举超时解决方案# 检查repmgrd服务状态 systemctl status repmgrd # 验证连接检查配置 grep connection_check_type /etc/repmgr/repmgr.conf # 增加日志级别调试 repmgrd -f /etc/repmgr/repmgr.conf --log-levelDEBUG6.3 性能优化建议调整WAL相关参数wal_buffers 16MB max_wal_size 2GB min_wal_size 1GB优化复制性能max_replication_slots 10 max_wal_senders 10 wal_keep_size 2048MB定期维护# 在维护窗口期执行 vacuumdb -a -z reindexdb -a7. 扩展思考3节点集群的特殊考量在3节点配置中我们面临一个重要的设计决策是否引入见证节点(Witness Node)。见证节点不存储数据仅参与选举投票可以防止网络分区时的脑裂问题。对于关键业务系统我建议的3节点部署模式为1个主节点(读写)1个同步备节点(同步复制)1个异步备节点或见证节点这种配置既保证了数据安全性(同步复制)又提供了故障转移的仲裁机制。要配置同步复制可以在主节点的postgresql.conf中添加synchronous_standby_names pg-node2在实际操作中我发现3节点集群的最佳实践包括将节点分布在不同的机架或可用区配置适当的监控检查间隔(通常5-10秒)定期测试故障转移流程维护详细的切换操作手册记住任何高可用架构都需要定期测试才能确保其可靠性。我建议至少每季度进行一次完整的故障转移演练包括自动和手动切换场景。
延伸阅读

更多相关文章

2026/10/31 9:23:45

Codex实战:从安装配置到秒级生成前端组件全流程

前端开发里有一件事特别磨人:组件代码本身不算难,但写起来非常耗时间。一个带状态管理、交互逻辑、样式方案的表单组件,从零手敲到能跑通,怎么也得一两个小时,要是再来几个变体和边界情况,小半天就没了。所…

2026/10/31 9:23:45

Claude Code Routine架构:面向开发者的AI工作流操作系统

1. 这不是又一个“Agent玩具”:Claude Code 的 Routine 架构本质是工程化生产力操作系统你有没有试过让 Claude Code 写一段 Python 脚本,结果它生成了代码,但没处理异常;你让它加日志,它加了,但日志级别全…

2026/10/31 9:18:45

RNL区域级注意力:从视频分类长程建模到人脸识别迁移

基于 CNN 的人脸识别这条路走了很多年,从检测对齐到特征提取再到度量学习,整条工程链早就定型了,想再挤出几个点提升都很费劲。前阵子看到某高校研究团队放出的 RNL,全称 Region-based Non-local,专门用来做视频分类里…

2026/10/31 11:49:08

API版本管理策略与实践指南

1. API版本管理的基本概念与挑战当API作为不同系统间的通信桥梁时,版本管理直接关系到服务的稳定性和用户体验。我经历过一次惨痛的教训:某次未做版本控制的API变更导致客户端大面积崩溃,这让我深刻认识到版本策略的重要性。1.1 为什么需要版…

2026/10/31 11:49:08

SpringBoot智慧农业远程指导系统架构与实践

1. 项目背景与核心价值 智慧农业专家远程指导系统是当前农业数字化转型中的关键应用场景。随着物联网设备在农田的普及,农户每天都能获取大量作物生长数据,但如何解读这些数据并做出科学决策成为新的痛点。传统模式下,农户需要亲自前往农业技…

2026/10/31 11:49:08

跨境电商独立站GEO优化策略:从SEO到生成式引擎优化

1. 为什么跨境电商独立站需要重新思考流量获取策略 在跨境电商领域,独立站卖家们普遍面临一个核心痛点:传统SEO带来的流量越来越难以转化为实际订单。我运营过多个年销售额超百万美元的独立站,发现一个残酷事实——即使你的关键词排名做到Goo…

2026/10/31 11:49:08

用友NC65本地环境搭建:Oracle+JDK+NC65全链路实操指南

简介:本资源是一份面向用友NC65初学者与实施顾问的实操型安装指南,专为自我学习、沙箱测试及NCC高版本环境搭建设计,有效解决数据库配置、中间件部署与系统初始化等关键实施难点。压缩包为单文件DOC文档(933KB)&#x…

2026/10/31 11:49:08

Linux多线程编程:从基础到线程池实现

1. Linux线程控制基础 在Linux系统中&#xff0c;线程是程序执行的最小单位&#xff0c;而进程则是资源分配的最小单位。理解线程控制是掌握多线程编程的基础&#xff0c;我们先来看一个最基本的线程创建示例&#xff1a; #include <pthread.h> #include <stdio.h&g…

2026/10/30 20:55:10

全国计算机二级C语言真题PDF高效刷题指南

简介&#xff1a;这份PDF是全国计算机二级C语言考试的试题与答案解析&#xff0c;专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/30 20:55:10

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介&#xff1a;一份以实战为导向的Python爬虫入门资源&#xff0c;面向具备基本编程基础、希望快速掌握网络数据抓取的初学者&#xff0c;可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档&#xff0c;完整演示从网页中提取 标题…

2026/10/30 20:55:09

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介&#xff1a;这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档&#xff0c;压缩包大小七十八KB&#xff0c;内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开&#xff1a;先构造一个极点位于单位圆内…

2026/10/31 0:02:41

猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包

简介&#xff1a;本资源是一套面向计算机视觉初学者与YOLO目标检测实践者的猫狗图像数据集及配套开发工具包&#xff0c;专为快速上手目标检测模型训练而设计。资源包含1000张真实场景高清猫狗图片&#xff0c;标注质量高&#xff0c;同时提供VOC&#xff08;XML&#xff09;、…

2026/10/31 0:02:41

HDU2017多校标程复现:算法竞赛工程化真题沙盒

简介&#xff1a;本资源为2017年HDU多校联合训练第一场官方配套资料&#xff0c;面向ACM程序设计竞赛备赛学生、算法爱好者及高校编程集训队成员&#xff0c;旨在提供权威解题参考与完整测试验证环境。压缩包共40个文件&#xff0c;含15份C标程&#xff08;覆盖全部赛题&#x…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑