You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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等节点参数与预期角色匹配,没有误配置。
  • 核查集群现有角色
    确认当前集群是否已经存在正常运行的主节点,避免重复注册主节点。

解决方案

根据排查结果对应处理:

  1. 若当前节点本应为主节点,误被标记为备节点
    • 停止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参数正式执行。
  2. 若当前节点确实是备节点,需要切换为主节点后注册
    • 先执行备节点提升命令:repmgr standby promote
    • 等待节点切换完成,确认pg_is_in_recovery()返回f后,再执行主节点注册命令。
  3. 若repmgr元数据库存在残留的旧主节点记录
    • 登录repmgr元数据库,查询现有节点记录:SELECT * FROM repmgr.nodes;
    • 确认旧主节点已经下线后,删除冲突的旧主节点记录,再重新注册当前节点。

内容的提问来源于stack exchange,提问作者Mr.FreshPR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:45:05