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

MongoDB副本集无法添加第二个secondary节点报not reachable/health错误

MongoDB副本集第二个Secondary节点异常排查方案

1. 网络连通性排查

stateStr显示not reachable/healthy首先优先排查网络问题:

  • 校验节点互通性:分别在主节点、正常从节点、故障从节点上执行telnet 对端节点IP MongoDB端口,确认三者两两之间双向可以连通默认27017端口(自定义端口替换为实际端口即可)。
  • 检查访问规则:确认三台服务器的系统防火墙、云服务商安全组均已放开MongoDB服务端口的出入站规则,无网段访问限制。
  • 校验绑定IP配置:查看故障从节点的mongod配置文件(默认路径/etc/mongod.conf)中bindIp参数,不能仅绑定127.0.0.1,需要绑定节点对外提供服务的IP,或临时设置为0.0.0.0测试(生产环境不建议绑定全地址),修改后需重启mongod服务生效。
    注意:副本集所有节点必须双向互通服务端口,仅单向开放会导致节点间心跳检测失败

2. 副本集配置一致性排查

  • 确认三台节点的mongod配置中replication.replSetName参数值完全一致,MongoDB副本集名称大小写敏感,需排除拼写错误。
  • 清理故障节点残留数据:如果故障从节点之前加入过其他副本集,先停掉mongod服务,删除数据目录(默认路径/var/lib/mongo)下的所有文件,再重启mongod服务,避免旧副本集配置冲突。
  • 校验添加的节点地址是否正确:在主节点执行rs.conf()查看当前副本集配置,确认故障从节点的地址、端口和实际配置一致,如果配置错误可执行rs.remove("错误的节点地址")删除后,重新添加正确地址。

3. 权限与服务状态排查

  • 先排查故障节点本地服务可用性:在故障从节点本地用mongo shell直接连接,执行show dbs看是否能正常返回结果,若本地也无法操作,先执行systemctl status mongod确认mongod服务处于运行状态,查看mongod日志(默认路径/var/log/mongodb/mongod.log)定位具体报错,比如数据目录权限不足、端口被占用等问题。
  • 身份认证校验:如果副本集开启了身份认证,确认三台节点的keyfile文件内容、权限完全一致,keyfile权限必须设置为600,属主为mongod用户,否则会导致节点间认证失败无法通信。
  • Robot 3T连接适配:副本集从节点默认不可读,你可以在从节点的mongo shell中执行db.getMongo().setSecondaryOk()(旧版本为rs.slaveOk())开启从节点读权限后,再测试list databases操作;同时确认Robot 3T使用的账号拥有listDatabases权限。

4. 最终验证

所有配置调整完成后,在主节点重新执行rs.add("故障从节点的正确地址:端口"),等待30秒后执行rs.status()查看节点状态,stateStr变为SECONDARY即为添加成功。

内容的提问来源于stack exchange,提问作者user2315732

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:54:06