(一)主機信息html
操做系統版本:centos7 64-bitmongodb
數據庫版本 :MongoDB 4.2 社區版shell
ip | hostname |
192.168.10.41 | mongoserver1 |
192.168.10.42 | mongoserver2 |
192.168.10.43 | mongoserver3 |
(二)副本集搭建過程數據庫
首先須要在3臺服務器上安裝MongoDB軟件,安裝過程見:http://www.javashuo.com/article/p-fwvvjmqu-cd.html。安裝完成以後,便可進行後續的配置,具體操做以下:centos
(1)在一臺機器上建立keyfileapi
openssl rand -base64 756 > /mongo/mongo-keyfile chmod 400 /mongo/mongo-keyfile
(2)拷貝feyfile到全部節點服務器
scp /mongo/mongo-keyfile root@192.168.10.42:/mongo/ scp /mongo/mongo-keyfile root@192.168.10.43:/mongo/
(3)以啓用身份驗證的方式開啓全部節點
這裏將全部參數設置到配置文件裏面,方便管理,配置文件以下:session
[root@mongodbserver1 mongo]# cat /etc/mongod.conf # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /mongo/mongod.log # Where and how to store data. storage: dbPath: /mongo/data journal: enabled: true # engine: # mmapv1: # wiredTiger: # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /mongo/mongod.pid # location of pidfile # network interfaces net: port: 27017 bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces. security: authorization: enabled # 啓用身份驗證 keyFile: /mongo/mongo-keyfile # 配置keyfile文件 replication: replSetName: rstest # 設置副本集名稱
而後啓動全部節點,以節點1爲例:centos7
[root@mongodbserver1 mongo]# mongod -f /etc/mongod.conf
(4)初始化副本集
在其中一個節點執行如下腳本初始化副本集,只需在一個節點上執行便可。spa
rs.initiate( { _id : "rstest", members: [ { _id : 0, host : "192.168.10.41:27017" }, { _id : 1, host : "192.168.10.42:27017" }, { _id : 2, host : "192.168.10.43:27017" } ] } )
參數含義:
_id :副本集的名稱
members :副本集的成員信息
在初始化時,會觸發投票選舉一個主節點,可使用rs.status()來肯定主節點成員
rstest:SECONDARY> rs.status() ... "members" : [ { "_id" : 0, "name" : "192.168.10.41:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 280, "optime" : { "ts" : Timestamp(1592897767, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2020-06-23T07:36:07Z"), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "electionTime" : Timestamp(1592897607, 1), "electionDate" : ISODate("2020-06-23T07:33:27Z"), "configVersion" : 1, "self" : true, "lastHeartbeatMessage" : "" }, ...
(5)建立管理員用戶
第一個用戶必需要有建立其它用戶的權限,例如須要有userAdminAnyDatabase權限,而且須要建立在admin數據庫中。
由於是在副本集上建立用戶,故要在主節點上執行。如建立root用戶
use admin; db.createUser( { user:"root", pwd:"123456", roles:[{role:"userAdminAnyDatabase",db:"admin"}] } )
(6)以管理員身份登陸數據庫
經過如下方式以管理員身份登陸到數據庫
mongo -u root -p 123456 --authenticationDatabase admin
(7)建立一個集羣管理員帳戶
clusterAdmin角色被授予副本集操做的權限,如配置副本集。在admin數據庫中建立一個集羣管理員並授予clusterAdmin角色。
use admin db.createUser( { "user" : "replica", "pwd" : "replica", roles: [ { "role" : "clusterAdmin", "db" : "admin" } ] } )
(8)要啓用身份驗證,須要重啓數據庫
重啓完成後,就須要以用戶密碼方式登陸數據庫了,假如不使用用戶名密碼,能夠登陸數據庫,可是沒法訪問數據
[root@mongodbserver2 mongo]# mongo MongoDB shell version v4.2.7 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("d49b410b-a7af-4550-a455-faa82885517b") } MongoDB server version: 4.2.7 rstest:PRIMARY> show dbs rstest:PRIMARY> rstest:PRIMARY> db test
只有使用了用戶名密碼,才能查到數據:
[root@mongodbserver2 mongo]# mongo -u root -p 123456 --authenticationDatabase admin MongoDB shell version v4.2.7 connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("a1f0da48-1266-4766-a9e4-32b97a46c3ec") } MongoDB server version: 4.2.7 rstest:PRIMARY> rstest:PRIMARY> show dbs admin 0.000GB config 0.000GB local 0.000GB
【完】