Mongodb Can';不创建用户

Mongodb Can';不创建用户,mongodb,google-compute-engine,Mongodb,Google Compute Engine,我在Google Compute Engine上使用MongoDB 2.6.6版,并使用单击部署方法 rs0:SECONDARY> db.createUser({user:"admin", pwd:"secret_password", roles:[{role:"root", db:"admin"}]}) 2015-07-13T15:02:28.434+0000 Error: couldn't add user: not master at src/mongo/shell/db.js:10

我在Google Compute Engine上使用MongoDB 2.6.6版,并使用单击部署方法

rs0:SECONDARY> db.createUser({user:"admin", pwd:"secret_password", roles:[{role:"root", db:"admin"}]})
2015-07-13T15:02:28.434+0000 Error: couldn't add user: not master at src/mongo/shell/db.js:1004

rs0:SECONDARY> use admin
switched to db admin
rs0:SECONDARY> db.createUser({user:"admin", pwd:"secret_password", roles:["root"]})
2015-07-13T15:13:28.591+0000 Error: couldn't add user: not master at src/mongo/shell/db.js:1004

MongoDB将部署在计算引擎实例集群中(也称为MongoDB副本集)。每个实例将为数据库文件使用一个引导磁盘和单独的磁盘

主节点和主节点是可以接受写入的节点。MongoDB的复制是“单主机”:一次只有一个节点可以接受写操作

辅助节点和从属节点是从主节点复制的只读节点


您的错误消息看起来好像您正在尝试将用户添加到辅助服务器上。尝试在主应用程序中添加用户。

我在mongo 3.2中遇到了类似的问题:

错误:无法添加用户:非主用户:

尝试创建具有root角色的新用户时

我只使用了mongo的本地副本

在我的mongod.conf文件中,我有以下未注释的内容:

replication:
   replSetName:  <node name>
复制:
回复名称:
对此进行注释并重新启动修复了问题。我猜mongo认为它是复制集的一部分,并对谁是主控感到困惑

编辑:

我还发现,如果您试图设置复制集,但出现上述错误,请运行:

rs.启动()

这将启动复制集,并将当前节点设置为主节点

退出,然后重新登录,您将看到:

初级>


现在根据需要创建用户。

我在编写副本集创建脚本时遇到此错误

解决方案是在
rs.initiate()
db.createUser()
之间添加一个延迟


副本集的创建似乎是在后台完成的,主节点实际成为主节点需要时间。在交互使用中,这不会导致问题,因为键入下一个命令时会有延迟,但在编写交互脚本时,可能需要强制延迟。

我在运行mongo 3.4时遇到了这个问题,但它是mongo 3.6。卸载3.6和安装3.4修复了我的问题。

我只使用了一个主要副本,并获得与Lolxdnubt相同的结果。这可能有效,但与此处的指南完全相反:我认为这是一个bug。在v3.2.9中也有此功能。@EddieKumar我可以问一下您使用的是什么版本的Mongo吗?@comfytoday我使用的是4.01,有人克隆了主机VM,因此我没有意识到复制已启用,禁用它有帮助。4年后,仍然遇到这个问题。这取决于服务器上的互联网速度,我在脚本中添加了30秒睡眠命令。创建延迟不是一个干净的方法,可能会导致生产中的错误。我认为应该有一个更好的方法来做,但是如果你没有找到另一种方法,使用重试机制而不是简单的延迟。