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

MongoDB副本集添加Secondary节点时遇Error code18认证失败问题

跨服务器Docker容器添加MongoDB副本集Secondary节点时认证失败问题

错误日志

{"t":{"$date":"2022-12-24T11:00:54.895+00:00"},"s":"I",  "c":"NETWORK",  "id":4712102, "ctx":"ReplicaSetMonitor-TaskExecutor","msg":"Host failed in replica set","attr":{"replicaSet":"{Replset_name}","host":"{VPS_IP}:27019","error":{"code":18,"codeName":"AuthenticationFailed","errmsg":"Authentication failed."},"action":{"dropConnections":false,"requestImmediateCheck":true}}}

副本集结构

  • 主节点(Primary):VPS1_DO:container1(已激活,处于同一overlay网络)
  • 从节点1(Secondary1):VPS1_DO:container2(已激活,处于同一overlay网络)
  • 从节点2(Secondary2):VPS2_Azure:container1(出现错误)

rs.status() 成员信息

"members" : [
                {
                        "_id" : 0,
                        "name" : "10.5.0.11(staticIP-container1):27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 258904,
                        "optime" : {
                                "ts" : Timestamp(1672026076, 1),
                                "t" : NumberLong(67)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1672026076, 1),
                                "t" : NumberLong(67)
                        },
                        "optimeDate" : ISODate("2022-12-26T03:41:16Z"),
                        "optimeDurableDate" : ISODate("2022-12-26T03:41:16Z"),
                        "lastAppliedWallTime" : ISODate("2022-12-26T03:41:16.739Z"),
                        "lastDurableWallTime" : ISODate("2022-12-26T03:41:16.739Z"),
                        "lastHeartbeat" : ISODate("2022-12-26T03:41:17.962Z"),
                        "lastHeartbeatRecv" : ISODate("2022-12-26T03:41:18.521Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncSourceHost" : "10.5.0.12:27017",
                        "syncSourceId" : 1,
                        "infoMessage" : "",
                        "configVersion" : 17,
                        "configTerm" : 67
                },
                {
                        "_id" : 1,
                        "name" : "10.5.0.12(staticIP-container2):27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 589529,
                        "optime" : {
                                "ts" : Timestamp(1672026076, 1),
                                "t" : NumberLong(67)
                        },
                        "optimeDate" : ISODate("2022-12-26T03:41:16Z"),
                        "lastAppliedWallTime" : ISODate("2022-12-26T03:41:16.739Z"),
                        "lastDurableWallTime" : ISODate("2022-12-26T03:41:16.739Z"),
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1671767185, 1),
                        "electionDate" : ISODate("2022-12-23T03:46:25Z"),
                        "configVersion" : 17,
                        "configTerm" : 67,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 2,
                        "name" : "178.128.xx.xxx(IP-VPS):27019",
                        "health" : 0,
                        "state" : 6,
                        "stateStr" : "(not reachable/healthy)",
                        "uptime" : 0,
                        "optime" : {
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                        "optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
                        "lastAppliedWallTime" : ISODate("1970-01-01T00:00:00Z"),
                        "lastDurableWallTime" : ISODate("1970-01-01T00:00:00Z"),
                        "lastHeartbeat" : ISODate("2022-12-26T03:41:17.427Z"),
                        "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "authenticated" : false,
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "configVersion" : -1,
                        "configTerm" : -1
                }
        ]

已确认一致的配置

  • 相同的MongoDB版本(5.0.6)
  • 相同的mongod.conf文件(相同的replSet名称)
  • 相同的keyFile且权限为chmod 400(只读)
  • 服务器间可ping通(已开放ICMP入站端口)

排查与解决方案

1. 端口与网络连通性校验

  • 确认VPS2_Azure的27019端口已在防火墙/安全组中开放,允许VPS1_DO的IP访问;在VPS1_DO上执行nc -zv 178.128.xx.xxx 27019验证端口是否可连通。
  • 检查Docker容器端口映射:VPS2_Azure的container1需将内部27017端口映射到主机27019端口,且容器内mongod的net.bindIp配置为0.0.0.0(允许外部访问)。

2. KeyFile一致性与权限复查

  • 用md5sum命令对比两台服务器上keyFile的哈希值,确保内容完全一致;避免复制时出现换行符、空格等差异。
  • 进入VPS2_Azure的容器,执行ls -l /path/to/keyfile,确认权限为400且所属用户为mongodb(MongoDB运行用户)。

3. 副本集地址配置检查

  • 确认Secondary2节点自身的rs.conf()中,成员地址与主节点添加时使用的178.128.xx.xxx:27019一致;若节点初始化时用了容器内网IP,会导致主节点无法正确识别。
  • 检查Secondary2的mongod.conf中replSetName与主节点完全匹配。

4. 认证用户权限验证

  • 在主节点执行db.getUsers(),确认存在拥有clusterAdmin或clusterManager角色的集群管理用户,且Secondary2节点使用该用户进行认证。
  • 手动在Secondary2节点用该用户登录MongoDB,验证认证是否成功:mongo -u <username> -p <password> --authenticationDatabase admin。

5. 查看Secondary2节点日志

  • 登录VPS2_Azure,查看container1的mongod日志,定位更详细的认证失败原因(如keyFile读取错误、用户权限不足等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:55:16