首页 > 解决方案 > mongo 3.4到3.6升级后Mongo E11000重复密钥错误收集

问题描述

我在 Ubuntu 上有一个 Mongo 副本集,其中为我的信息系统配置了三个成员,当我尝试将 MongoDB 从版本 3.4 升级到 3.6 时遇到问题

在主节点上设置featureCompatibilityVersion为 3.4 并在两个从节点上检查后,我开始一个一个升级从节点(我优雅地关闭了数据库db.shutdownServer(),使用 apt 更新包并启动 mongod 服务)。一切都很顺利,奴隶们又回到了次要状态。然后我关闭了master,重复了官方指南(https://docs.mongodb.com/manual/release-notes/3.6-upgrade-replica-set/)中的所有升级步骤,并尝试启动mongod服务再次。

但是,当我升级主节点时,被选为新主节点的从节点崩溃并出现错误:

[rsSync] 致命断言 40454 DuplicateKey:E11000 重复密钥错误集合:admin.system.users 索引:user_1_db_1 dup key:{:“john”,:“admin”} 在 src/mongo/db/system_index.cpp 134

我没有注意到这一点,当旧主人再次启动时,它也因同样的错误而崩溃。在我疯狂地试图让成员重新站起来的过程中,第三名成员也被选为大师了很短的时间,然后又因同样的错误而崩溃。

当我设法让第一个成员再次成为独立成员时,我检查了system.users集合,发现确实有两个用户在 admin 数据库中使用相同的用户名(我用...编辑了部分):

{ "_id" : ObjectId("5...8"), "user" : "john", "db" : "admin", "credentials" : { "MONGODB-CR" : "f...c" }, "roles" : [ { "role" : "read", "db" : "admin" } ] }

{ "_id" : "admin.john", "user" : "john", "db" : "admin", "credentials" : { "MONGODB-CR" : "f...c" }, "roles" : [ { "role" : "read", "db" : "admin" } ] }

我的问题是这怎么可能?mongo 不应该阻止某人添加相同的用户吗?还是 mongo 在升级后尝试更改该集合但失败了?如果有任何区别,我正在使用 authSchema 版本 3。谢谢!

标签: databasemongodbdatabase-administration

解决方案


推荐阅读