1. 程式人生 > >MongoDB配置復制集

MongoDB配置復制集

() 客戶端 bcd 中斷 cfg 其他 db2 state 狀態

簡介

MongoDB復制是將數據同步在多個服務器的過程。

復制集提供了數據的冗余備份,並在多個服務器上存儲數據副本,提高了數據的可用性, 並可以保證數據的安全性。

復制集還允許從硬件故障和服務中斷中恢復數據。

復制集的優勢

  • 保障數據的安全性
  • 數據高可用性 (24*7)
  • 災難恢復
  • 無需停機維護(如備份,重建索引,壓縮)
  • 分布式讀取數據

MongoDB復制原理

  1. mongodb的復制至少需要兩個節點。其中一個是主節點,負責處理客戶端請求,其余的都是從節點,負責復制主節點上的數據。

  2. mongodb各個節點常見的搭配方式為:一主一從、一主多從。

  3. 主節點記錄在其上的所有操作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配置復制集