我有一个由3台服务器组成的MongoDB副本集(1台主服务器、1台辅助服务器、1台仲裁器;这是Google Cloud 1-click install创建的默认副本集).主服务器和辅助服务器的2个配置文件(mongod.conf)已更改,添加了security.authorization: enabled个.

使用以下MongoDB shell命令添加Root用户:

use admin
db.createUser({user:"root",pwd:"root",roles:["root"]})

在使用"sudo service mongod restart"在主服务器和辅助服务器上重新启动MongoDB服务后,与副本集的连接变得不稳定.

r.status()有时会给出如下结果:

  • 1个主要的,1个无法到达的,1个仲裁人
  • 1个二级、1个二级、1个仲裁员
  • 1个二级,1个无法访问,1个仲裁人

How to setup basic password authentication (not using keyfile) for MongoDB replica set the correct way?

推荐答案

我终于找到了答案.MongoDB副本集需要用户帐户和密钥文件.Keyfile似乎用于在副本集中的服务器之间进行身份验证,而不是用于登录.

在linux上创建mongodb密钥文件,复制到所有db服务器,模式600保持不变:

cd
openssl rand -base64 741 > mongodb.key
chmod 600 mongodb.key

蒙哥德.配置文件:

replication:
  replSetName: rs0

security:
  authorization: enabled
  keyFile: /home/USERNAME/mongodb.key

管理员用户:

(just like in question content)

Mongodb相关问答推荐

聚合管道可以用于更新数据库中的文档吗?

发布到 MongoDB 时生成的附加id字段

对对象数组进行分组并在 mongodb 中获取计数

如何向所有文档添加一个字段,其中前 100 个文档的值为 1,接下来的 100 个文档的值为 2,依此类推?

在mongodb中,如何使用聚合来获取字段之间的对应关系

使用 $addFields 将字段添加到 $lookup 结果中的每个项目

MongoID find 或 find_by

TypeError:Cannot read property '_id' of undefined

Mongo C#忽略属性

如何在 Mongoose 中定义一个通用的嵌套对象

获取收集字节使用情况统计信息的pymongo方法?

如何使用 c# 2.0 驱动程序将数据插入到 mongodb 集合中?

使用已排序的数据获取不同的值

MongoDb:如何将附加对象插入对象集合?

NumberLong和简单整数之间的MongoDB区别?

使用 Node.js 将许多记录插入 Mongodb 的正确方法

Mongoose:Model.create 和 Collection.insert 有什么区别

MongoError:Can't extract geo keys from object

对象不是 JSON 可序列化的

开发人员必须采取哪些mental steps才能开始从 SQL 迁移到 NOSQL(CouchDB、Fathom DB、MongoDB 等)?