1. 程式人生 > 實用技巧 >mongodb分片叢集開啟認證功能

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/