网上有很多说副本集用户名密码配置的,但是很多都不靠谱,本人实测采坑总结如下:
######配置副本集####
1.首先需要配置副本集
副本集最少三台集群,每台机器添加相同的配置文件mongod.conf内容如下:
dbpath=/usr/local/mongodb/rs/data #数据存放目录
logpath=/usr/local/mongodb/rs/logs/mongod.log #日志文件目录
pidfilepath=/usr/local/mongodb/rs/mongod.pid #pid端口文件
port=27017 #mongodb端口
logappend=true #追加方式写日志文件
fork=true #后台运行
journal=true #启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
oplogSize=500 #同步操作记录文件大小(MB)
smallfiles=true #使用较小的默认文件
#auth=true
#keyFile = /usr/local/mongodb/rs/config/access.key
replSet=socialset #副本集名称,同一个副本集,名称必须一致
2.登录其中一台机器使用命令./bin/mongo启动命令工具
然后配置副本集config,config配置如下:
config={_id : ‘socialset’,members : [{_id : 1, host : ‘172.19.72.63:27017’},{_id : 2, host : ‘172.21.4.94:27017’},{_id : 3, host : ‘172.21.4.99:27017’}]}
回车
然后执行rs.initiate(config)
到此副本集配置完成
####副本集设置用户名密码###
1.集群中每个集群都创建相同的权限协同文件keyfile
进入目录/usr/local/mongodb/rs/config/
openssl rand -base64 1024 > access.key
chmod 600 access.key
集群所有集群需要使用同一个文件(可使用远程主机拷贝或是上传)
2.mongod.conf文件添加如下配置
auth=true
keyFile = /usr/local/mongodb/rs/config/access.key
3.创建整个数据库的超级管理员
3.X版本以后没有admin库,需要先创建admin库(此处相当于多创建一个库,可以直接在local库上创建),可通过Robo 3T创建。
db.createUser(
{
user:”root”,
pwd:”903F826D413F3B4D”,
roles:[{role:”readWriteAnyDatabase”,db:”admin”},{role:”dbAdminAnyDatabase”,db:”admin”},{role:”userAdminAnyDatabase”,db:”admin”}]
}
)
4.如果需要管理集群的用户需要创建针对集群的管理用户,创建语句如下(可以最开始创建或是后续通过步骤3中创建的用户创建):
db.createUser(
{
user:”suroot”,
pwd:”903F826D413F3B4D”,
roles:[{role:”clusterAdmin”,db:”admin”},{role:”clusterManager”,db:”admin”},{role:”clusterMonitor”,db:”admin”}]
}
)
5.创建针对ehomesocialdb的可读写、可管理用户、可管理数据库的用户
db.createUser(
{
user:”ehomesocial”,
pwd:”903F826D413F3B4D”,
roles:[{role:”readWrite”,db:”ehomesocialdb”},{role:”dbAdmin”,db:”ehomesocialdb”},{role:”userAdmin”,db:”ehomesocialdb”}]
}
)
(自己可查看具体权限配置)
>use admin
switched to db admin
testrepl:PRIMARY> db.system.users.find() 查看所有用户
注意:需要先创建用户名密码然后配置文件开启权限认证模式,重启主机,同时mongodb的用户名密码创建必须指定库,也就是需要在某个库上创建相关权限的用户。
//先关闭从节点在关闭主节点,然后重启主节点再重启从节点