前言
個人了解,副本集一個主要作用就是當Master庫出現故障,其中的一個salve從庫會被選舉出來成為新的Master。架構圖如下:

其中,選舉者是不參與資料存儲的,它的作用隻是為了選舉出新的Master。當原Master恢複後,他也隻會以從庫salve身份加入到副本集中。
當然,我們也可以在恢複啟動它的時候手動配置priority參數,讓他成為Master。
Demo
下面通過具體的例子說明。
首先在mongo目錄下建立3個(一個作為master,一個作為從庫,一個作為選舉者,在實際項目中,這三個服務最後放在不同的伺服器上)配置檔案,檔案内容如下:
Master
#配置mongodb資料的存儲路徑
dbpath=D:\mongodb\data\rs1
#配置mongodb日志檔案
logpath=D:\mongodb\log\rs1.log
#配置端口,若不配置,預設27017端口
port=40001
#副本集名字,每個配置檔案中需保持一緻
replSet=rs_test
Salve
#配置mongodb資料的存儲路徑
dbpath=D:\mongodb\data\rs2
#配置mongodb日志檔案
logpath=D:\mongodb\log\rs2.log
#配置端口,若不配置,預設27017端口
port=40002
#副本集名字,每個配置檔案中需保持一緻
replSet=rs_test
選舉者配置檔案
#配置mongodb資料的存儲路徑
dbpath=D:\mongodb\data\rs3
#配置mongodb日志檔案
logpath=D:\mongodb\log\rs3.log
#配置端口,若不配置,預設27017端口
port=40003
#副本集名字,每個配置檔案中需保持一緻
replSet=rs_test
啟動三個mongodb執行個體
首先,在bin 目錄下打開三個shell視窗,分别啟動上面配置的三個mongodb,如下指令:
mongod -f d:\mongodb\rs1.conf
若是都啟動成功,我們将會在日志檔案中看到主要的資訊:
waiting for connections on port 40003
其次,連接配接配置在40001端口的mongodb執行個體:
mongo -port 40001
初始化40001 為master:
rs.initiate()
初始化成功,使用指令rs.status() 檢視副本集狀态,将會看到如下圖:
從圖中可以看到40001已經作為primary 啟動。
再次,執行指令 rs.add("127.0.0.1:40002") 添加從庫。
添加選舉者:rs.addArb("127.0.0.1:40003")
再次執行 rs.status() 檢視副本集的狀态,将會看到如下圖:
驗證 選舉
關閉40001 服務端視窗(故障停機),在40002視窗執行 rs.status(),将會看到如下圖:
最後,再次啟用40001 服務端,在bin 下 執行 mongod -f d:\mongodb\rs1.conf
然後 再次檢視狀态 rs.status() ,可以看到40001已經重新加入到副本集并且是作為從庫加入的,如下圖:
關于mongodb 副本集就介紹到這裡,希望對大家有幫助。文中如有不對的地方,歡迎指出。
謝謝。