mongodb分片叢集開啟認證功能
阿新 • • 發佈:2020-10-29
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/