启用身份认证后MongoDB副本集在MongoDB Compass连接超时问题求助
MongoDB副本集启用认证后集群模式连接超时问题排查结果
根因定位
- 副本集内部配置的成员节点IP和客户端连接时使用的可达IP不匹配:你在连接串中使用的是
10.47.72.28/38/39这三个IP访问节点,但副本集rs.config()返回的成员host是174.1.0.6/7/8。当使用副本集模式连接时,MongoDB客户端会先连接到任意一个种子节点,拉取副本集配置后,会尝试连接配置中记录的174.1.0.x地址,这个地址从你客户端所在网络不可达,因此触发超时错误。 - 单独连接单个节点时不会触发副本集节点发现逻辑,直接使用你输入的IP连接,因此可以正常访问。
解决步骤
- 重新配置副本集的成员host为客户端可以正常访问的IP(即你连接串中使用的
10.47.72.x段),操作流程如下:
登录当前主节点,执行以下命令:
cfg = rs.config() // 请根据节点实际对应关系修改IP,此处假设members数组下标0对应10.47.72.28,下标1对应10.47.72.38,下标2对应10.47.72.39 cfg.members[0].host = "10.47.72.28:27017" cfg.members[1].host = "10.47.72.38:27017" cfg.members[2].host = "10.47.72.39:27017" rs.reconfig(cfg)
注意:如果调整过程中出现主节点切换,需要确认每个节点ID对应的实际IP后再修改对应members数组下的host值
2. 调整完成后等待30秒让副本集配置同步完成,再使用原集群模式连接串尝试连接即可正常访问。
3. 额外检查项:
- 确认客户端所在网络到
10.47.72.x三个节点的27017端口都已放开访问权限 - 检查三个节点的keyFile权限是否为600,且三个节点的keyFile内容完全一致
- 检查mongod.cnf配置中
enableMajorityReadConcern: true后面多余的特殊字符,避免配置加载异常
内容的提问来源于stack exchange,提问作者Richard Parker
相关产品推荐
相关产品推荐

