新增成员长期显示“DOWN”或“health”: 0,基本确定是网络层阻断;需用telnet或nc双向实测27017端口连通性,检查防火墙、安全组、bindIp配置(不能仅设127.0.0.1)、/etc/hosts双向解析、replSetName与keyFile严格一致。
新增成员在 rs.status() 中长期显示为 "stateStr": "DOWN" 或 "health": 0,基本可以确定是网络层阻断,而非配置语法错误或服务未启动。
别信 ping,也别只连自己;必须从「新增成员」所在机器,向「主节点」IP+端口发起连接测试,再反向测试一次:
telnet 192.168.86.11 27017(从新节点连主节点)nc -zv 192.168.86.11 27017(Linux 下更准,不依赖 telnet 包)sudo ufw disable(Ubuntu)或 sudo systemctl stop firewalld(CentOS)新增成员的 /etc/mongod.conf 中 net.bindIp 若仍为默认的 127.0.0.1,它只会响应本机请求,其他节点发来的握手包直接被内核丢弃:
bindIp: 192.168.86.12,127.0.0.1(假设该节点内网 IP 是 192.168.86.12)0.0.0.0 虽能通,但必须配合防火墙严格限制来源 IP,生产环境不推荐systemctl restart mongod,重载配置(systemctl reload)无效如果副本集配置里写的是主机名(如 mongo2.example.com),而新增成员无法解析该名,rs.add() 或心跳就会卡在 STARTUP2 并报 HostNotFound:
getent hosts mongo2.example.com,应返回真实内网 IP(非 127.0.0.1)/etc/hosts 都要包含彼此的映射,例如:192.168.86.11 mongo1.example.com mongo1
hostname -f 输出,必须和它在 rs.conf() 中声明的 host 字段完全一致(大小写、无空格)即使网络通了,新增成员也会因身份校验失败被拒之门外:
replication.replSetName 必须完全相同(大小写敏感),且与 rs.initiate() 中的 _id 一致security.keyFile 文件内容必须字节级一致,权限必须是 600
tail -f /var/log/mongodb/mongod.log | grep -i "key|repl|auth",常见报错如 Unable to load key file: Invalid argument
真正卡住的地方往往不是某一个点,而是多个条件叠加:比如 bindIp 没放开 + /etc/hosts 少写了一行 + 安全组没配。每次只改一项,然后立刻用 telnet 和 rs.status() 验证,比一次性调一堆配置更可靠。