如何向MongoDB replica set(副本集)添加节点及处理相关报错?
MongoDB副本集添加节点主机名混用报错解决方案
错误原因
你遇到的报错是MongoDB副本集的硬性配置限制导致的:
"Either all host names in a replica set configuration must be localhost references, or none must be; found 1 out of 2"
副本集所有成员的主机名必须统一格式:要么全部使用localhost指向本地,要么全部使用可被所有节点解析的非本地域名/IP,不允许两种格式混合使用。你当前的副本集已有节点使用了localhost作为主机名,新增节点使用m103:27002,两种格式冲突因此触发报错。
解决步骤
步骤1:查看当前副本集配置
连接主节点进入Mongo shell,执行以下命令获取现有配置:rs.conf()
返回结果的members数组中可查看所有已存在节点的host字段值,确认现有节点是否为localhost:<端口>格式。
步骤2:统一所有节点的主机名格式
推荐统一使用非localhost的可解析域名(符合副本集跨节点部署的常规使用场景),操作如下:
- 将现有配置存入变量:
cfg = rs.conf() - 修改现有节点的host值为非localhost格式,示例中主节点部署在
m103服务器的27001端口,对应修改命令为:cfg.members[0].host = "m103:27001" - 应用修改后的配置:
rs.reconfig(cfg)
如果是纯本地测试场景,也可以选择统一使用localhost格式,将新增节点的host改为localhost:<端口>添加即可,无需修改现有配置。
步骤3:重新添加新节点
配置生效后,执行原有添加命令即可:
rs.add("m103:27002") rs.add("m103:27003")
验证结果
执行rs.status()命令,查看所有新增节点的状态为SECONDARY即表示添加成功。
内容的提问来源于stack exchange,提问作者Anita
相关产品推荐
相关产品推荐

