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

MongoDB 4.4副本集跨AWS账号AMI迁移后认证失败无法连接

环境信息

  • 操作系统:Ubuntu 18.04
  • MongoDB版本:MongoDB shell version v4.4.14
故障现象

基于3节点MongoDB副本集的源EC2实例制作AMI镜像,跨AWS账号启动新实例后,mongod服务进程可正常启动,但所有身份认证操作失败,无法连接MongoDB服务:

  • 源环境可正常使用的连接命令:
mongo -u "adminuser" -p "adminpass" --authenticationDatabase "admin"
  • 新实例执行上述命令返回Authentication failed,进程退出码为1。
  • 查看MongoDB运行日志核心信息:

    SCRAM-SHA-256、SCRAM-SHA-1机制认证失败,错误为UserNotFound: Could not find user "srrclusteradmin" for db "admin";同时提示Replication has not yet been configured、config.system.sessions does not exist;WiredTiger存储引擎检查点相关日志无异常。

  • 已排查确认配置项:
    • mongod配置中keyFile路径、副本集名称mongors配置正确
    • systemd服务启动参数已添加--auth标识
    • bindIp、数据存储目录、日志路径与源环境完全一致
    • 本地直连mongo shell切换至admin库,执行db.auth("adminuser", passwordPrompt())输入正确密码仍认证失败
    • 执行show dbs返回NotPrimaryNoSecondaryOk错误
    • 源环境可用的所有管理员账号密码在新实例全部失效,无法访问存量业务数据
故障根因
  • 跨账号通过AMI启动单实例时,原3节点副本集的配置仍保存在节点local库中,但当前仅启动单个节点,无法满足副本集投票多数要求,节点无法自动选举为主,处于副本集不可用状态,因此执行查询等操作会返回NotPrimaryNoSecondaryOk错误。
  • 开启--auth与keyFile认证的MongoDB副本集,在未完成主节点选举、集群状态未正常收敛时,无法读取admin库下的系统用户集合,会抛出UserNotFound的假报错,并非用户数据丢失、密码错误。
  • 日志中config.system.sessions does not exist为副本集单节点首次启动时的正常提示,主节点选举完成后会自动生成该集合,不影响存量业务数据完整性。
解决步骤
  1. 停止当前运行的mongod服务
systemctl stop mongod
  1. 临时以无认证、仅本地监听的方式启动mongod,必须保留原副本集名称配置,不要修改原数据目录,避免公网暴露无认证的数据库服务:
mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongod.log --bind_ip 127.0.0.1 --port 27017 --replSet mongors --fork

如果数据目录、日志路径、副本集名称与示例不一致,替换为实际环境的对应值即可。
3. 本地直连mongo shell:

mongo
  1. 清理旧副本集配置,强制将当前节点重配置为单节点副本集成员:
// 切换到local库删除旧的3节点副本集配置
use local
db.system.replset.deleteMany({})

// 切换到admin库执行强制重配置
use admin
rs.reconfig(
  {
    _id: "mongors",
    members: [
      // 如果后续仅需单节点访问填localhost:27017,需要扩展多节点则填当前实例内网IP:27017
      {_id: 0, host: "localhost:27017"}
    ]
  },
  {force: true}
)
  1. 等待10-20秒,执行rs.status()确认当前节点状态变为PRIMARY。
  2. 验证用户认证与数据访问是否恢复正常:
use admin
// 认证成功将返回1
db.auth("adminuser", "adminpass")
// 正常返回所有数据库列表即代表数据访问恢复
show dbs
  1. 验证完成后,停止临时启动的mongod进程:
ps aux | grep mongod | grep -v grep
kill <上述命令输出的mongod进程PID>
  1. 恢复mongod配置文件中security.authorization: enabled、security.keyFile的原有认证配置,通过systemd正常启动mongod服务:
systemctl start mongod
  1. 服务启动完成后,使用原有连接命令即可正常认证、访问所有业务数据。如果后续需要恢复3节点副本集,在当前单节点为主的状态下通过rs.add()添加其他节点即可,无需重建用户或重新导入数据。

内容的提问来源于stack exchange,提问作者Chetan Sachdev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:36:27