1. 程式人生 > >MongoDB實戰-如何在Windows環境下建立副本集

MongoDB實戰-如何在Windows環境下建立副本集

本篇主要講解副本集的建立過程,採用的副本集結構為1個主節點,一個從節點一個仲裁節點。廢話不多說,建立步驟如下:

1. 目錄結構拷貝

    首先進入MongoDB的安裝目錄,如C:\Programme Files\MongoDB\Server。將該目錄下的資料夾拷貝出三份複製,分別命名為master,slave和arbiter;

    然後拷貝出三份資料和日誌文件的目錄,資料路徑如L:\MongoDb\matserdb,L:\MongoDb\slavedb,L:\MongoDb\arbiterdb;日誌路徑為L:\MongoDb\matserlog,

L:\MongoDb\slavelog,L:\MongoDb\arbiterlog.

    前期工作準備完畢,下面正式開始啟動對應的主從mongod例項

2. mongod例項的啟動

主節點Mongod例項啟動,埠號27111


從節點Mongod例項啟動,埠號27112


仲裁節點Mongod例項啟動,埠號27113


啟動成功與否,請查詢每個例項對應的日誌檔案顯示。顯示連線到對應埠表示啟動成功。三個節點的歸屬副本集名字為mySet,所有mongod例項的日誌記錄方式為增加。

使用到的mongod的啟動引數設定如下表:

引數 引數含義
port Mongodb的監聽埠
dbpath 資料檔案儲存路徑
logpath 系統日誌存放路徑
replSet 副本集名稱,我用的是mySet,其他的節點
必須使用這個名字做副本集名稱
logappend 日誌的寫入模式是追加,不是預設的覆蓋模式
還有一些其它的引數設定,可以參考官網的文件。比如授權auth等。


3. 將三個Mongod例項連線在一起

成功啟動了三個Mongod的例項後,下面的工作就是如何將這三個例項組成一個副本集。新開啟一個cmd視窗,執行mongd 命令,跟上其中一個埠號27111,mongo資料庫啟動成功後,設定對應的副本集配置,配置程式碼如下:

congfig_set={"_id":"mySet",members:[{_id:0,host:"127.0.0.1:27111"},{_id:1,host:"127.0.0.1:27112"},{_id:2,host:"127.0.0.1:27113"}]}
然後通過下面的指令啟動樣本集
rs.initiate(config_set)
執行結果如下:


顯示OK,表示副本集建立成功

4.查詢副本集狀態

  使用rs.status指令查詢副本集中各例項的狀態,執行結果如下:



可以看到副本集中的各成員狀態:

health:1   //1表明狀態是正常,0表明異常

state:1     // 1表明是primary,2表明是slave,即做備份的機器

5. 停止其中一個節點無論主節點還是從節點

假設我們停止了其中第一個從節點,即埠號為27112的節點後,再次檢視副本集狀態



發現第二個節點的health為0,表示節點停止了。同樣,若我們暫停的是第一個主節點,其中一個從節點會自動切換為主節點。

6. 將第兩個個從節點設定為仲裁節點

也就是將127.0.0.1:27112,127.0.0.1:27113設定為仲裁節點,首先刪除原始的第二個從節點:

rs.remove("127.0.0.1:27112")
rs.remove("127.0.0.1:27113")
然後重新設定副本集的設定引數:
config_set={"_id":"mySet",members:[{_id:0,host:"127.0.0.1:27111"},{_id:2,host:"127.0.0.1:27112"},{_id:3,host:"127.0.0.1:27113",aibiterOnly:true}]}
然後執行
rs.reconfig(config_set)
這時,才是將第二個從節點設定為了仲裁節點,再次執行rs.status()結果如下:



看出從節點2的stateStr為ARBITER。至此,一主一叢一仲裁節點的副本集才建立完畢。