【发布时间】:2017-11-17 15:20:12
【问题描述】:
我正在尝试设置一个 mongo db 副本集,使用 Mongodb 3.4。
服务器A:
- srv1:27017 - 主要
- arb:27027 - 仲裁者
服务器B:
- srv2:27017 - 次要
arb 不应在 ServerA 上使用 srv1 托管,计划稍后移动。
服务器端口已打开,连接 mongo shell 可在所有实例上运行。
在 srv1 上运行 rs.status() 表明一切正常。
但是,在 srv2 上运行它会显示:
{
"_id" : 2,
"name" : "ServerA:27027",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"lastHeartbeat" : ISODate("2017-11-17T14::36:48.088Z"),
"lastHeartbeatMessage" : "Permission denied",
"configVersion" : -1
}
对于仲裁部分(其余部分都很好)。 srv2 上的日志重复这三行:
2017-11-17T09:19:02.758-0500 | ASIO [NetworkInterfaceASIO-Replication-0] Failed to connect to ServerA:27027 - HostUnreachable: Permission denied
2017-11-17T09:19:02.758-0500 | ASIO [NetworkInterfaceASIO-Replication-0] Dropping all pooled connections to ServerA:27027 due to failed operation on a connection
2017-11-17T09:19:02.758-0500 | REPL [ReplicationExecutor] Error in heartbeat request to ServerA:27027; HostUnreachable: Permission denied
它们都没有任何身份验证集,并且托管在同一台机器上的 srv1 与仲裁器没有心跳问题。 Srv2 与 srv1 没有心跳问题。 谷歌搜索,我看到人们无法连接,因为 mongod.config 中没有绑定 IP 地址,或者被防火墙,但这里不是这种情况。
【问题讨论】:
-
srv1 和 arb 共享同一个主机,因此它们可能会尝试通过本地环回进行通信。你能确认服务器在两个接口上都监听吗?
-
我尝试将 mongo shell 从 ServerB 连接到 ServerA:27017 和 ServerA:27027,效果很好。此外,srv2 显示副本集中的 srv1 没有问题,只有 arb 存在。你还有别的意思吗?
-
telnet serv1 27027form serv 2 工作吗? -
Telnet 确实有效。
标签: mongodb