MongoDB配置復制集
阿新 • • 發佈:2018-07-17
() 客戶端 bcd 中斷 cfg 其他 db2 state 狀態 簡介
MongoDB復制是將數據同步在多個服務器的過程。
復制集提供了數據的冗余備份,並在多個服務器上存儲數據副本,提高了數據的可用性, 並可以保證數據的安全性。
復制集還允許從硬件故障和服務中斷中恢復數據。
復制集的優勢
- 保障數據的安全性
- 數據高可用性 (24*7)
- 災難恢復
- 無需停機維護(如備份,重建索引,壓縮)
- 分布式讀取數據
MongoDB復制原理
-
mongodb的復制至少需要兩個節點。其中一個是主節點,負責處理客戶端請求,其余的都是從節點,負責復制主節點上的數據。
-
mongodb各個節點常見的搭配方式為:一主一從、一主多從。
- 主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點獲取這些操作,然後對自己的數據副本執行這些操作,從而保證從節點的數據與主節點一致。
MongoDB復制結構圖如下所示:
以上結構圖中,客戶端從主節點讀取數據,在客戶端寫入數據到主節點時, 主節點與從節點進行數據交互保障數據的一致性。
副本集特征:
- N 個節點的集群
- 任何節點可作為主節點
- 所有寫入操作都在主節點上
- 自動故障轉移
-
自動恢復
一、部署MongoDB復制集
1. 創建多實例配置文件,並開啟服務。
(1)創建數據文件和日誌文件存儲路徑
[root@localhost ~]# mkdir -p /data/mongodb/mongodb{2,3,4} //創建數據目錄 [root@localhost ~]# mkdir -p /data/logs/mongodb [root@localhost ~]# touch /data/logs/mongodb/mongodb{2,3,4}.log //創建日誌文件 [root@localhost ~]# 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
[root@localhost ~]# mongod -f /etc/mongod.conf --shutdown killing process with pid: 1074 [root@localhost ~]# mongod -f /etc/mongod.conf about to fork child process, waiting until server is ready for connections. forked process: 17130 child 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.conf
mongod -f /etc/mongod3.conf
mongod -f /etc/mongod4.conf
可以看到四個實例全部啟動。
2.配置3個節點的復制集
[root@localhost ~]# mongo //進入MongoDB27017實例
MongoDB shell version v3.6.6
connecting to: mongodb://127.0.0.1:27017
MongoDB 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
[root@localhost ~]# ps aux | grep mongod
root 17130 1.0 6.2 1582772 62064 ? Sl 09:33 1:06 mongod -f /etc/mongod.conf
root 17830 0.8 5.7 1462576 57628 ? Sl 09:58 0:45 mongod -f /etc/mongod2.conf
root 17880 0.8 5.8 1522504 58324 ? Sl 09:58 0:45 mongod -f /etc/mongod3.conf
root 17927 0.7 5.3 1441856 53356 ? Sl 09:58 0:37 mongod -f /etc/mongod4.conf
root 20678 0.0 0.0 112676 984 pts/1 S+ 11:23 0:00 grep --color=auto mongod
[root@localhost ~]# kill -9 17130
(2)查看主節點切換
[root@localhost ~]# mongo -port 27018
kgcrs:SECONDARY> rs.status()
2.手動也可以進行主從切換
(1)先進入主節點27019,暫停選舉
[root@localhost ~]# mongo -port 27019
kgcrs:PRIMARY> rs.freeze(30) //暫停30s不參與選舉
kgcrs:PRIMARY> rs.stepDown(60,30) //交出主節點位置,維持從節點狀態不少於60秒,等待30秒使主節點和從節點日誌同步
(2)查看主節點切換
kgcrs:SECONDARY> rs.status()
MongoDB配置復制集