部署MongoDB Replica Set同时给数据库设置用户名密码

时间:2021-08-14 02:32:29

1. 根据下面链接配置好mongodb replica set

http://blog.csdn.net/monkey_four/article/details/50837586

2. 由于前面配置好后所有结点的MongoDB服务都启动了,所以第二步先service mongod stop(所有结点都要停止服务) 
3. 启动其中一台mongod服务, 正常启动,不要开启认证功能,并执行下面语句:
mongo 
use admin
<span style="color: rgb(34, 36, 38); font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 15px; line-height: 19.5px;">db.createUser({ user: "root", pwd: "123", roles: [ { role: "root", db: "admin" } ] })</span>

4. 修改配置文件,在/etc/mongod.conf中添加
security:
authorization: enabled
#keyFile: /data/mongodb/mongodb-keyfile
其中authorization: enabled是作用于mongodb认证功能的,keyFile属性下面会解释,暂时加上注释.

5. 重启所有结点的mongod服务,这时随便在一台机器运行mongo,此时就需要认证了. use admin db.auth("root", "123")  返回1表示认证成功.
6. 运行rs.status()会出现其他的结点状态是not reachable,类似于如下的信息.这说明结点之间没有认证功能(对于这一块还是有点模糊)
    "name" : "IP ADDRESS",
"health" : 0,
"state" : 8,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : {
"t" : 0,
"i" : 0
},

7. 为解决步骤6中提到的问题,先在一台机器上产生mongodb keyfile
openssl rand -base64 741 > /data/mongodb/mongodb-keyfile
chmod 600 /data/mongodb/mongodb-keyfile
将mongodb-keyfile文件拷贝到各个节点上.
8. 修改配置文件etc/mongod.conf文件,即将步骤4中的keyFile前面的注释去掉,再重启所有结点的mongod服务,现在会发现所有结点状态正常.
总结: 1. 给admin库添加用户名和密码时,只需要在一个结点上操作,只要配置好了replica set, 用户名和密码会同步到其他结点. 2. 关于用户名密码认证和结点之间认证. 前者是对于mongodb client而言,处于对每个库的安全考虑,client端想操作数据库,必须先用用户名和密码登录,即配置文件中的authorization: enabled; 而对于节点之间的认证,其实跟前面用户名密码认证是分离的,是让各结点之间有一个key来保持通信,即数据的同步等,是对整个集群成员的安全进行考虑,避免其他用户给集群胡乱添加成员. 但是出现了一个问题,在设置用户名密码认证时,对于replica set而言必须设置结点之间的认证吗? 我在使用的过程中发现确实必须,否则会出现结点状态是not reachable提示.