mongodb 學習之——MongoDB 複製集搭建
阿新 • • 發佈:2020-12-24
安裝:
1、複製集replica sets
1.1 什麼是複製集?
複製集是由一組擁有相同資料集的mongod例項做組成的叢集。 複製集是一個叢集,它是2臺及2臺以上的伺服器組成,以及複製整合員包括Primary主節點,secondary從節點和投票節點。 複製集提供了資料的冗餘備份,並在多個伺服器上儲存資料副本,提高了資料的可用性,保證資料的安全性。
1.2 為什麼要使用複製集
1.高可用 防止裝置(伺服器、網路)故障。 提供自動failover 功能。 技術來保證高可用 2.災難恢復 當發生故障時,可以從其他節點恢復 用於備份。 3.功能隔離 我們可以在備節點上執行讀操作,減少主節點的壓力 比如:用於分析、報表,資料探勘,系統任務等。
2 複製集搭建
注:如果之前安裝過mongon ,請先停掉
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# ./bin/mongod --shutdown --dbpath /home/mongodb-linux-x86_64-amazon-3.6.21/data/mongo
步驟:
//新建資料夾 mkdir replica_sets //copy cp cp mongodb-linux-x86_64-amazon-3.6.21.tgz replica_sets/ cd replica_sets/ //解壓 tar -xvf mongodb-linux-x86_64-amazon-3.6.21.tgz
節點配置
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# vi mongo_37017.conf [root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# cp mongo_37017.conf mongo_37018.conf [root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# cp mongo_37018.conf mongo_37019.conf [root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/data/server1 -p [root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/data/server2 -p [root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/data/server3 -p [root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# mkdir /data/mongo/logs
1.主節點配置 mongo_37017.conf
# 主節點配置 dbpath=/data/mongo/data/server1 bind_ip=0.0.0.0 port=37017 fork=true logpath=/data/mongo/logs/server37017.log replSet=wgCluster
2.從節點1配置 mongo_37018.conf
# 從節點配置 dbpath=/data/mongo/data/server2 bind_ip=0.0.0.0 port=37018 fork=true logpath=/data/mongo/logs/server37018.log replSet=wgCluster
3.從節點2配置 mongo_37019.conf
dbpath=/data/mongo/data/server3 bind_ip=0.0.0.0 port=37019 fork=true logpath=/data/mongo/logs/server37019.log replSet=wgCluster
4.初始化節點配置
//啟動節點
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# ./bin/mongod -f mongo_37017.conf about to fork child process, waiting until server is ready for connections. forked process: 10653
//進入節點
[root@VM_0_4_centos mongodb-linux-x86_64-amazon-3.6.21]# ./bin/mongo --port 37017
啟動三個節點 然後進入任意一個節點 執行如下命令:
var cfg ={"_id":"lagouCluster", "protocolVersion" : 1, "members":[ {"_id":1,"host":"主機ip:37017","priority":10}, {"_id":2,"host":"主機ip:37018"} ] } rs.initiate(cfg) rs.status()
5.節點的動態增刪,上邊我們只添加了倆個節點,下邊動態的增加刪除節點。
增加節點 rs.add("192.168.211.133:37019") 刪除slave 節點 rs.remove("192.168.211.133:37019")
檢視節點狀態
wgCluster:PRIMARY> rs.status() { "set" : "wgCluster", "date" : ISODate("2020-12-24T01:19:35.883Z"), "myState" : 1, "term" : NumberLong(1), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "heartbeatIntervalMillis" : NumberLong(2000), "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1608772772, 1), "t" : NumberLong(1) }, "readConcernMajorityOpTime" : { "ts" : Timestamp(1608772772, 1), "t" : NumberLong(1) }, "appliedOpTime" : { "ts" : Timestamp(1608772772, 1), "t" : NumberLong(1) }, "durableOpTime" : { "ts" : Timestamp(1608772772, 1), "t" : NumberLong(1) } }, "members" : [ { "_id" : 1, "name" : "152.136.193.58:37017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 57238, "optime" : { "ts" : Timestamp(1608772772, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2020-12-24T01:19:32Z"), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "electionTime" : Timestamp(1608715848, 1), "electionDate" : ISODate("2020-12-23T09:30:48Z"), "configVersion" : 2, "self" : true, "lastHeartbeatMessage" : "" }, { "_id" : 2, "name" : "152.136.193.58:37018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 56937, "optime" : { "ts" : Timestamp(1608772772, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1608772772, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2020-12-24T01:19:32Z"), "optimeDurableDate" : ISODate("2020-12-24T01:19:32Z"), "lastHeartbeat" : ISODate("2020-12-24T01:19:33.896Z"), "lastHeartbeatRecv" : ISODate("2020-12-24T01:19:34.917Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "152.136.193.58:37017", "syncSourceHost" : "152.136.193.58:37017", "syncSourceId" : 1, "infoMessage" : "", "configVersion" : 2 }, { "_id" : 3, "name" : "152.136.193.58:37019", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 13, "optime" : { "ts" : Timestamp(1608772772, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1608772772, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2020-12-24T01:19:32Z"), "optimeDurableDate" : ISODate("2020-12-24T01:19:32Z"), "lastHeartbeat" : ISODate("2020-12-24T01:19:33.897Z"), "lastHeartbeatRecv" : ISODate("2020-12-24T01:19:35.214Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "152.136.193.58:37017", "syncSourceHost" : "152.136.193.58:37017", "syncSourceId" : 1, "infoMessage" : "", "configVersion" : 2 } ], "ok" : 1, "operationTime" : Timestamp(1608772772, 1), "$clusterTime" : { "clusterTime" : Timestamp(1608772772, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }
6.複製集操作演示
進入主節點 ----- 插入資料 ------ 進入從節點驗證
注意:預設節點下從節點不能讀取資料。呼叫 rs.slaveOk() 解決
為了保證高可用,在叢集當中如果主節點掛掉後,會自動 在從節點中選舉一個 重新做為主節點。
rs.status()
節點說明:
PRIMARY 主節點: 可以查詢和新增資料
SECONDARY 從節點:只能查詢 不能新增 基於priority 權重可以被選為主節點
ARBITER 仲裁節點: 不能查詢資料 和新增資料 ,不能變成主節點
7.主從自動切換操作演示
現在我們起倆個視窗,一主一從(37017主機,37018從機),新開啟窗口乾掉主節點。。驗證從節點是否會變成主節點。發現從節點37018變成主節點,,當再次啟動節點37017節點,因優先界別高,37017會再次變為主節點。
8.新增衝裁節點
注:新建配置檔案mongo_37020.conf,並建立server4 資料夾,啟動37020節點
#仲裁節點 dbpath=/data/mongo/data/server4 bind_ip=0.0.0.0 port=37020 fork=true logpath=/data/mongo/logs/server37020.log replSet=wgCluster
配置方式
var cfg ={"_id":"wgCluster", "protocolVersion" : 1, "members":[ {"_id":1,"host":"152.136.193.58:37017","priority":10}, {"_id":2,"host":"152.136.193.58:37018","priority":0}, {"_id":3,"host":"152.136.193.58:37019","priority":5}, {"_id":4,"host":"152.136.193.58:37020","arbiterOnly":true} ] }; // 重新裝載配置,並重新生成叢集節點。 rs.reconfig(cfg) //重新檢視叢集狀態 rs.status()
動態新增
和上面的配置步驟相同 只是增加了 一個特殊的仲裁節點 注入節點 執行 rs.addArb("IP:埠"); rs.addArb("192.168.211.133:37020")
9複製整合員的配置引數