一、基本概念
1、副本集:一個副本集就是一組MongoDB實例組成的集群,由一個主(Primary)服務器和多個備份(Secondary)服務器構成
2、主節點(master):主節點接收所有寫入操作。主節點將對其數據集所做的所有更改記錄到其 oplog。
3、副節點(secondary):復制主節點的 oplog 並將操作應用到其數據集,如果主節點不可用,一個合格的副節點將被選為新的主節點。
4、仲裁節點(arbiter):負載選舉,當主節點不可用,它將從副節點中選一個作為主節點。
二、部署副本集
1、下載monodb鏡像,我這里版本為:3.2.11
docker pull registry.cn-hangzhou.aliyuncs.com/boshen-ns/mongodb:3.2.11
docker tag docker pull registry.cn-hangzhou.aliyuncs.com/boshen-ns/mongodb:3.2.11 mongodb:3.2.11
2、創建三個mongodb的數據目錄:
mkdir -p /home/mongodb-cluster/data/master mkdir -p /home/mongodb-cluster/data/secondary mkdir -p /home/mongodb-cluster/data/arbiter
3、編寫docker-compose.yml
version: '2.1' services: master: image: mongodb:3.2.11 container_name: master restart: always ports: - 27017:27017 volumes: - ./data/master:/data/db command: mongod --dbpath /data/db --replSet testSet --oplogSize 128 secondary: image: mongodb:3.2.11 container_name: secondary restart: always ports: - 27018:27017 volumes: - ./data/secondary:/data/db command: mongod --dbpath /data/db --replSet testSet --oplogSize 128 arbiter: image: mongodb:3.2.11 container_name: arbiter restart: always ports: - 27019:27017 volumes: - ./data/arbiter:/data/db command: mongod --replSet testSet --smallfiles --oplogSize 128
4、啟動
docker-compse up -d
5、配置副本集
1)進入容器內部:
docker exec -it master mongo
2)在mongo shell里面執行:rs.initiate()
3)繼續執行:rs.add('172.16.1.11:27018') 表示將secondary添加進副本集
4)繼續執行:rs.add('172.16.1.11:27019',true) 其中true表示這個節點是仲裁節點
5)查看配置
testSet:PRIMARY> rs.conf() { "_id" : "testSet", "version" : 77284, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "172.16.1.11:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "172.16.1.11:27018", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "172.16.1.11:27019", "arbiterOnly" : true, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("5c6fb85fb21aeac107319862") } }
6)查看狀態
testSet:PRIMARY> rs.status() { "set" : "testSet", "date" : ISODate("2019-02-26T02:12:48.124Z"), "myState" : 1, "term" : NumberLong(2), "heartbeatIntervalMillis" : NumberLong(2000), "members" : [ { "_id" : 0, "name" : "172.16.1.11:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 268, "optime" : { "ts" : Timestamp(1551147003, 4), "t" : NumberLong(2) }, "optimeDate" : ISODate("2019-02-26T02:10:03Z"), "lastHeartbeat" : ISODate("2019-02-26T02:12:46.189Z"), "lastHeartbeatRecv" : ISODate("2019-02-26T02:12:46.188Z"), "pingMs" : NumberLong(0), "syncingTo" : "172.16.1.11:27018", "configVersion" : 77284 }, { "_id" : 1, "name" : "172.16.1.11:27018", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 938, "optime" : { "ts" : Timestamp(1551147003, 4), "t" : NumberLong(2) }, "optimeDate" : ISODate("2019-02-26T02:10:03Z"), "electionTime" : Timestamp(1551146242, 1), "electionDate" : ISODate("2019-02-26T01:57:22Z"), "configVersion" : 77284, "self" : true }, { "_id" : 2, "name" : "172.16.1.11:27019", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 270, "lastHeartbeat" : ISODate("2019-02-26T02:12:46.189Z"), "lastHeartbeatRecv" : ISODate("2019-02-26T02:12:48.118Z"), "pingMs" : NumberLong(0), "configVersion" : 77284 } ], "ok" : 1 }
如果想要修改副本集的配置,可以采用以下方法:
conf=rs.conf() conf.members[0].host="172.16.1.11:27017" rs.reconfig(conf,{"force":true})
三、驗證mongdb可用性:
由上測試可知:副節點只能讀,不能寫
二、windows客戶端連接mongodb
1、登錄mongo shell,創建一個admin用戶
testSet:PRIMARY> db.createUser({user:"admin",pwd:"admin",roles:[{"role":"userAdminAnyDatabase","db":"admin"},{"role":"readWrite","db":"testdb"}]}) Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "readWrite", "db" : "testdb" } ] }
2、安裝 robomongo-1.0.0-windows-x86_64-89f24ea.exe
3、填寫連接信息