repmgr执行primary注册时报错节点为standby模式无法注册问题咨询
repmgr主节点注册报错排查及解决方法
报错原文:Error: (repmgr) server is in standby mode and cannot be registered as a primary
该报错的核心触发逻辑是repmgr检测到当前PostgreSQL实例运行在备节点恢复模式,不满足主节点注册的前置要求,可按以下步骤排查处理:
排查步骤
- 确认PostgreSQL实例运行模式
执行如下命令查询实例当前状态:psql -U <你的管理用户> -c 'SELECT pg_is_in_recovery();'
返回结果为t说明实例处于备节点恢复模式,返回f才是正常主节点模式。 - 检查备节点标识文件
PostgreSQL 12及以上版本:查看数据目录下是否存在standby.signal文件
PostgreSQL 11及更低版本:查看数据目录下是否存在recovery.conf文件
只要上述对应文件存在,实例启动后就会强制进入备节点模式。 - 核对repmgr配置
检查当前节点的repmgr.conf配置文件,确认node_id、node_name、conninfo等节点参数与预期角色匹配,没有误配置。 - 核查集群现有角色
确认当前集群是否已经存在正常运行的主节点,避免重复注册主节点。
解决方案
根据排查结果对应处理:
- 若当前节点本应为主节点,误被标记为备节点
- 停止PostgreSQL服务:
systemctl stop postgresql(请根据实际部署的服务名称调整) - 删除备节点标识文件:PostgreSQL 12+执行
rm -f <PG数据目录路径>/standby.signal;11及以下版本执行rm -f <PG数据目录路径>/recovery.conf - 重新启动PostgreSQL服务:
systemctl start postgresql - 再次执行注册命令,先验证:
repmgr primary register --force --dry-run,验证无问题后去掉--dry-run参数正式执行。
- 停止PostgreSQL服务:
- 若当前节点确实是备节点,需要切换为主节点后注册
- 先执行备节点提升命令:
repmgr standby promote - 等待节点切换完成,确认
pg_is_in_recovery()返回f后,再执行主节点注册命令。
- 先执行备节点提升命令:
- 若repmgr元数据库存在残留的旧主节点记录
- 登录repmgr元数据库,查询现有节点记录:
SELECT * FROM repmgr.nodes; - 确认旧主节点已经下线后,删除冲突的旧主节点记录,再重新注册当前节点。
- 登录repmgr元数据库,查询现有节点记录:
内容的提问来源于stack exchange,提问作者Mr.FreshPR
相关产品推荐
相关产品推荐

