本文參考地址:https://docs.mongodb.com/manual/replication/
一、復制集介紹
主要目的:MongoDB可以通過在不同數據庫服務器上提供多個數據副本來提供冗余並提高數據可用性,進行讀寫分離以及災難備份。
MongDB復制集由一組MongDB實例組成,包含一個Primary節點及多個Secondary節點。所有數據寫入Primary節點,Secondary從Primary同步寫入的數據,用來對數據進行冗余備份,並提供讀取作用。
以下是一個最簡單的復制集模型圖,由一個主節點,一個從節點,一個仲裁器組成。
仲裁器不維護數據,主要用來通過響應其他成員的心跳和選舉請求來維護復制集中的主節點。
二、復制集部署
1、MongoDB安裝。
首先從MongoDB官網(https://www.mongodb.com/download-center/community)下載對應安裝文件MSI或者ZIP,MSI可以直接按照提示進行安裝。ZIP包的話需要手動配置MongoDB存儲數據、日志的文件路徑,以及配置服務。
2、安裝完成修改配置文件。
1 # mongod.conf 2 3 # for documentation of all options, see: 4 # http://docs.mongodb.org/manual/reference/configuration-options/ 5 6 # Where and how to store data. 7 storage: 8 dbPath: E:\mongoDB\mongoDB-27020\data 9 journal: 10 enabled: true 11 # engine: 12 # mmapv1: 13 wiredTiger: 14 engineConfig: 15 cacheSizeGB: 1 16 17 # where to write logging data. 18 systemLog: 19 destination: file 20 logAppend: true 21 path: E:\mongoDB\mongoDB-27020\log\mongod.log 22 # network interfaces 23 net: 24 port: 27020 25 bindIp: 127.0.0.1 26 #operationProfiling: 27 #復制集名稱 28 replication: 29 replSetName: rs0
3、安裝MongDB服務
"C:\Program Files\MongoDB\Server\4.0\bin\mongod.exe" --config "E:\mongoDB\mongoDB-27018\mongod.cfg" --serviceName "MongoDB-27018" --serviceDisplayName "MongoDB Server 27018" --install
4、啟動MongDB服務
5、配置復制集
rs.initiate();//初始化副本集
rs.add("127.0.0.1:27018");//添加成員
rs.add({"host":"127.0.0.1:27019","arbiterOnly":true});//添加仲裁節點
6、查看副本集狀態
rs.status();//查看副本集狀態
/* 1 */ { "set" : "rs0", "date" : ISODate("2019-09-19T19:59:10.801+08:00"), "myState" : 2, "term" : NumberLong(8), "syncingTo" : "127.0.0.1:27018", "syncSourceHost" : "127.0.0.1:27018", "syncSourceId" : 1, "heartbeatIntervalMillis" : NumberLong(2000), "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1568894340, 1), "t" : NumberLong(8) }, "readConcernMajorityOpTime" : { "ts" : Timestamp(1568894340, 1), "t" : NumberLong(8) }, "appliedOpTime" : { "ts" : Timestamp(1568894340, 1), "t" : NumberLong(8) }, "durableOpTime" : { "ts" : Timestamp(1568894340, 1), "t" : NumberLong(8) } }, "lastStableCheckpointTimestamp" : Timestamp(1568894340, 1), "members" : [ { "_id" : 0, "name" : "127.0.0.1:27017", "health" : 1.0, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 669, "optime" : { "ts" : Timestamp(1568894340, 1), "t" : NumberLong(8) }, "optimeDate" : ISODate("2019-09-19T19:59:00.000+08:00"), "syncingTo" : "127.0.0.1:27018", "syncSourceHost" : "127.0.0.1:27018", "syncSourceId" : 1, "infoMessage" : "", "configVersion" : 5, "self" : true, "lastHeartbeatMessage" : "" }, { "_id" : 1, "name" : "127.0.0.1:27018", "health" : 1.0, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 664, "optime" : { "ts" : Timestamp(1568894340, 1), "t" : NumberLong(8) }, "optimeDurable" : { "ts" : Timestamp(1568894340, 1), "t" : NumberLong(8) }, "optimeDate" : ISODate("2019-09-19T19:59:00.000+08:00"), "optimeDurableDate" : ISODate("2019-09-19T19:59:00.000+08:00"), "lastHeartbeat" : ISODate("2019-09-19T19:59:09.787+08:00"), "lastHeartbeatRecv" : ISODate("2019-09-19T19:59:09.594+08:00"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "electionTime" : Timestamp(1568856315, 1), "electionDate" : ISODate("2019-09-19T09:25:15.000+08:00"), "configVersion" : 5 }, { "_id" : 2, "name" : "127.0.0.1:27019", "health" : 1.0, "state" : 7, "stateStr" : "ARBITER", "uptime" : 664, "lastHeartbeat" : ISODate("2019-09-19T19:59:09.787+08:00"), "lastHeartbeatRecv" : ISODate("2019-09-19T19:59:10.565+08:00"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "configVersion" : 5 } ], "ok" : 1.0, "operationTime" : Timestamp(1568894340, 1), "$clusterTime" : { "clusterTime" : Timestamp(1568894340, 1), "signature" : { "hash" : { "$binary" : "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", "$type" : "00" }, "keyId" : NumberLong(0) } } }