mongodb分片集群开启认证功能

mongodb分片集群开启认证功能

前言

MongoDB 在开启了访问控制后,只有一次添加用户的机会,此后的操作都需要先认证通过。为了方便,我们先添加用户, 然后再开启访
问控制。

环境说明

服务      端口      版本  
docker              1.13.1
mongos    27017     4.2.8
config    27000     4.2.8
shard01   27001     4.2.8
shard02   27002     4.2.8
。。。

1、添加用户

连接上 mongos 添加的用户会保存在 config 副本集中,但是不会保存到 shard 副本集,因此添加用户的操作需要分别在 config、 shard01、shard02、 shard03 上执行。 mongos 没有数据不需要集群启动后任意连接 config 3 台中的一台

1)给config创建用户(主节点操作)
mongo --port 27000
>use admin
>db.createUser({user: "root", pwd:"ptmind890iop",roles:["clusterAdmin","userAdminAnyDatabase","dbAdminAnyDatabase","readWriteAnyDatabase" ]})
>db.auth("root","ptmind890iop")
1      <<====返回1 说明认证成功
2)依次连接所有 shard 的主节点 创建用户
mongo --port 27001
>use admin
>db.createUser({user: "root",pwd:"ptmind890iop",roles:["clusterAdmin","userAdminAnyDatabase","dbAdminAnyDatabase","readWriteAnyDatabase" ]})
>db.auth("root","ptmind890iop")
1      <<====返回1 说明认证成功

MongoDB 数据库默认角色
数据库用户角色:read、readWrite
数据库管理角色:dbAdmin、dbOwner、userAdmin
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
备份恢复角色:backup、restore
所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase
超级用户角色:root

角色介绍链接:https://docs.mongodb.com/manual/reference/built-in-roles/

2、启动访问控制

启用访问控制之后,外部访问 MongoDB 服务需要进行身份验证,而 mongos 访问 config 和 shard 服务则是通过配置的秘钥文件

1)创建秘钥文件
>openssl rand -base64 753 >> /data/mongodb/keyFile.key
>chmod 0600 /data/mongodb/keyFile.key
>chown mongod:mongod /data/mongodb/keyFile.key

将密钥文件复制到所有节点上。

2)添加keyfile配置

mongos 与config 指定keyfile文件的位置 --keyFile 然后依次升级重启

注:此操作最好在集群创建之初操作,升级mongo服务是因为认证开启的差异性,会倒是整个集群获取不到状态,无法对外提供服务

config 
/usr/bin/mongod --keyFile /data/db/keyfile.txt --configsvr --replSet myset --bind_ip_all --dbpath /data/db --port 27000 --logpath /var/log/mongo/config.log --maxConns 8000 --wiredTigerCacheSizeGB 4


shard01
/usr/bin/mongod --keyFile /data/db/keyfile.txt --shardsvr --replSet shard1 --port 27001 --bind_ip_all --dbpath /data/db --logpath /var/log/shard1.log --oplogSize 8000 --maxConns 5000 --profile 2 --slowms 200 --journalCommitInterval 500 --wiredTigerCacheSizeGB 8


shard02
/usr/bin/mongod --keyFile /data/db/keyfile.txt --shardsvr --replSet shard2 --port 27002 --bind_ip_all --dbpath /data/db --logpath /var/log/shard2.log --oplogSize 8000 --maxConns 5000 --profile 2 --slowms 200 --journalCommitInterval 500 --wiredTigerCacheSizeGB 8

mongos
mongos --configdb myset/172.20.100.101:27000,172.20.100.103:27000,172.20.100.104:27000,172.20.100.132:27000  --keyFile /data/db/keyfile.txt --logpath /var/log/mongo/mongos.log --logappend --port 27017 --bind_ip_all --maxConns 10000
3)查看状态
mongo --port 27017
>show dbs            <===因为没有认证,所以查看库,返回空
> use admin
switched to db admin
>db.auth("root","ptmind890iop")   
1                    <===认证成功,返回值 1,相反失败则返回0
>show dbs            
admin                           0.000GB
config                          0.018GB
ptx_13b93484                    0.001GB
ptx_17c0213x                    0.001GB
ptx_1dxaxd9r                    0.001GB
ptx_1fd21rt7                    0.001GB
ptx_21f0e7b5                    0.007GB
ptx_21nhxrgw                    0.001GB
...   ##返回所有库,认证配置成功

参考链接:
https://docs.mongodb.com/v4.2/tutorial/deploy-sharded-cluster-with-keyfile-access-control/

原文地址:https://www.cnblogs.com/dzc-/p/13898351.html