我正在尝试配置一个有三个节点的副本集:节点 A、B 和 C。我rs.add()
从节点 A 执行 ,之后rs.status()
显示这三个节点是主节点。此外,节点 B 和 C 的 pingM 为 0。如果我rs.status()
从节点 B 或 C 执行,则列出的唯一节点是自身节点(作为主节点)。我尝试添加仲裁器,但没有成功(它表现得像节点 B 和 C)。我认为这可能是网络问题,但我搞不清楚。
编辑:这是的输出netstat -anp|grep 27017
:
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN -
tcp 0 0 10.0.1.211:55772 10.0.1.213:27017 TIME_WAIT -
tcp 0 0 127.0.0.1:50509 127.0.0.1:27017 ESTABLISHED -
tcp 0 0 127.0.0.1:27017 127.0.0.1:50509 ESTABLISHED -
tcp 0 0 10.0.1.211:55774 10.0.1.213:27017 TIME_WAIT -
tcp 0 0 10.0.1.211:55776 10.0.1.213:27017 ESTABLISHED -
tcp 0 0 10.0.1.211:39180 10.0.1.212:27017 ESTABLISHED -
tcp 0 0 10.0.1.211:39178 10.0.1.212:27017 TIME_WAIT -
tcp 0 0 10.0.1.211:39176 10.0.1.212:27017 TIME_WAIT -
unix 2 [ ACC ] STREAM LISTENING 3291267 - /tmp/mongodb-27017.sock
节点 B 和 C 的私有 IP 分别为 10.0.1.212 和 10.0.1.213(根据 netstat 输出,它们似乎在 27017 端口建立了连接)。
答案1
听起来节点 A 上的 mongo 进程实际上没有成功联系到其他两个节点。有三个大箭头指向这一点:
- 节点 A 报告所有节点均处于 PRIMARY 状态. 初选发生后连接已建立。如果连接尚未建立,它将在所有设备上显示 PRIMARY。
- Ping=0。如果建立了连接,则它应该是非零的。
- 节点 B 和 C 没有听说过任何其他节点。如果建立了连接,他们就会被告知其他节点在那里。
此时,我会再三确认……
- 任何防火墙都通过正确的端口(通常是 27017,但请检查
/etc/mongodb.conf
以确保) - Mongo 正在监听节点 B 和 C 上的预期端口。
netstat -anp
应该会显示 Mongo 进程的 LISTEN 端口。确保该端口是您期望的端口。