標籤:free name kill 添加節點 status move shutdown host exit
簡介
MongoDB複製是將資料同步在多個伺服器的過程。
複製集提供了資料的冗餘備份,並在多個伺服器上儲存資料副本,提高了資料的可用性, 並可以保證資料的安全性。
複製集還允許從硬體故障和服務中斷中恢複資料。
複製集的優勢
- 保障資料的安全性
- 資料高可用性 (24*7)
- 災難恢複
- 無需停機維護(如備份,重建索引,壓縮)
- 分布式讀取資料
MongoDB複製原理
mongodb的複製至少需要兩個節點。其中一個是主節點,負責處理用戶端請求,其餘的都是從節點,負責複製主節點上的資料。
mongodb各個節點常見的搭配方式為:一主一從、一主多從。
- 主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點擷取這些操作,然後對自己的資料副本執行這些操作,從而保證從節點的資料與主節點一致。
MongoDB複製結構圖如下所示:
以上結構圖中,用戶端從主節點讀取資料,在用戶端寫入資料到主節點時, 主節點與從節點進行資料互動保障資料的一致性。
複本集特徵:
- N 個節點的叢集
- 任何節點可作為主節點
- 所有寫入操作都在主節點上
- 自動容錯移轉
- 自動回復
一、部署MongoDB複製集1. 建立多執行個體設定檔,並開啟服務。(1)建立資料檔案和記錄檔儲存路徑
[[email protected] ~]# mkdir -p /data/mongodb/mongodb{2,3,4} //建立資料目錄[[email protected]localhost ~]# mkdir -p /data/logs/mongodb [[email protected] ~]# touch /data/logs/mongodb/mongodb{2,3,4}.log //建立記錄檔[[email protected] ~]# chmod -R 777 /data/logs/mongodb/*.log //賦予許可權
(2)編輯4個MongoDB執行個體的設定檔
先編輯Mongodb執行個體1的設定檔,配置replication選項,並複製3份。
vim /etc/mongod.conf replication: replSetName: kgcrs //配置replSetName參數為kgcrs
重新啟動Mongodb執行個體1
[[email protected] ~]# mongod -f /etc/mongod.conf --shutdown killing process with pid: 1074[[email protected] ~]# mongod -f /etc/mongod.conf about to fork child process, waiting until server is ready for connections.forked process: 17130child process started successfully, parent exiting
複製3份,並修改設定檔中的port參數配置,dbpath參數配置,logpath參數配置。
cp -p /etc/mongod.conf /etc/mongod2.conf cp -p /etc/mongod.conf /etc/mongod3.conf cp -p /etc/mongod.conf /etc/mongod4.conf
修改mongod2.conf 的設定檔參數。
vim /etc/mongod2.conf path: /data/logs/mongodb/mongodb2.log //記錄檔儲存路徑 dbPath: /data/mongodb/mongodb2 //資料檔案路徑 port: 27018 //監聽連接埠
修改mongod3.conf 的設定檔參數。
vim /etc/mongod3.conf path: /data/logs/mongodb/mongodb3.log //記錄檔儲存路徑 dbPath: /data/mongodb/mongodb3 //資料檔案路徑 port: 27019 //監聽連接埠
修改mongod4.conf 的設定檔參數。
vim /etc/mongod4.conf path: /data/logs/mongodb/mongodb4.log //記錄檔儲存路徑 dbPath: /data/mongodb/mongodb4 //資料檔案路徑 port: 27020 //監聽連接埠
(3)啟動多執行個體服務
mongod -f /etc/mongod2.confmongod -f /etc/mongod3.confmongod -f /etc/mongod4.conf
可以看到四個執行個體全部啟動。
2.配置3個節點的複製集
[[email protected] ~]# mongo //進入MongoDB27017執行個體MongoDB shell version v3.6.6connecting to: mongodb://127.0.0.1:27017MongoDB server version: 3.6.6
(1)先通過rs.status()命令查看複製集的狀態資訊,提示複製集還未配置。
(2)定義cfg初始化參數。
初始化配置時保證從節點沒有資料,不然資料會丟失。
> cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.113.176:27017"},{"_id":1,"host":"192.168.113.176:27018"},{"_id":2,"host":"192.168.113.176:27019"}]}
(3)通過rs.initiate(cfg)命令啟動複製集。
> rs.initiate(cfg)
(4)查看複製集狀態。
啟動複製集後,再次通過rs.status()命令查看複製集的完整狀態資訊。
其中,health為1代表健康,0代表宕機。state為1代表主節點,為2代表從節點。
二、增加和刪除節點
配置啟動複製集後,可以通過rs.add()和rs.remove()命令方便的添加或刪除節點。
#添加節點kgcrs:PRIMARY> rs.add("192.168.113.176:27020") kgcrs:PRIMARY> rs.status() //查看節點是否添加成功
#刪除節點kgcrs:PRIMARY> rs.remove("192.168.113.176:27020")kgcrs:PRIMARY> rs.status()
可以看到27020的節點沒有了。
三、MongoDB複製集切換
MongoDB複製集可以實現群集的高可用,當其中的主節點出現故障時會自動切換到其他節點。管理員也可以手動進行複製集的主從切換。
1.類比故障自動轉移
通過kill命令可以停止複製集的當前主節點,然後查看主節點會自動切換到其他節點上。
(1)先查看MongoDB的進程,停止當前的主節點27017
[[email protected] ~]# ps aux | grep mongodroot 17130 1.0 6.2 1582772 62064 ? Sl 09:33 1:06 mongod -f /etc/mongod.confroot 17830 0.8 5.7 1462576 57628 ? Sl 09:58 0:45 mongod -f /etc/mongod2.confroot 17880 0.8 5.8 1522504 58324 ? Sl 09:58 0:45 mongod -f /etc/mongod3.confroot 17927 0.7 5.3 1441856 53356 ? Sl 09:58 0:37 mongod -f /etc/mongod4.confroot 20678 0.0 0.0 112676 984 pts/1 S+ 11:23 0:00 grep --color=auto mongod[[email protected] ~]# kill -9 17130
(2)查看主節點切換
[[email protected] ~]# mongo -port 27018kgcrs:SECONDARY> rs.status()
2.手動也可以進行主從切換(1)先進入主節點27019,暫停選舉
[[email protected] ~]# mongo -port 27019kgcrs:PRIMARY> rs.freeze(30) //暫停30s不參與選舉kgcrs:PRIMARY> rs.stepDown(60,30) //交出主節點位置,維持從節點狀態不少於60秒,等待30秒使主節點和從節點日誌同步
(2)查看主節點切換
kgcrs:SECONDARY> rs.status()
MongoDB配置複製集