天天看點

303、副本集如何擴容

前言

一般生産環境下,我們總是會遇到副本集遷移節點到新機器上的問題,或者擴容出一個新secondary節點的需求,是以這裡把我的筆記放在這裡供參考,如果有不妥之處請指出,謝謝;

1.添加Secondary節點

有時候需要在已有的Replica set架構中添加節點

注:

Replica Set有最大選舉節點數限制:7個,超過7個如果還想再添加則隻能作為

non-voting member

1.1 建立檔案目錄

如果是在一台新機器上,則按照複制集節點中的目錄建立即可,注意權限配置

1.2、copy配置檔案mongodb.cnf

複制過來後,根據上步的檔案目錄進行相應的修改,若與原目錄一緻則可以不用修改,注意端口若有需要的話也記得一并修改

1.3、複制資料源

其實這一步有兩種方法選擇:

方法1: 使用内部自動複制機制

在資料量不大的情況下,可以使用此方法快捷友善

先在新機器上啟動mongod程序

/usr/local/mongodb/bin/mongod -f /data1/conf/mongod.conf
           

然後直接在Pirmary節點上添加新節點即可

之後就等待所有資料同步完畢,新節點狀态從STARTUP2變為;Secondary

注:

我通過測試發現這種同步方式真的非常非常慢,并且還消耗資源,因為這種方式是同步未壓縮的源資料,而3.1的方法是複制經過壓縮的資料檔案;

方法2:直接複制從庫的資料檔案

如果資料量巨大,并且考慮擔心影響主庫性能等問題,可以使用如下第二種方法

即複制secondary目錄下所有檔案,此種方法簡單快捷,并且不會占用太多的帶寬

步驟:

(注:此時新機器上不啟動mongod程序)

使用如下指令當機一個secondary節點,防止寫入新資料導緻資料檔案不一緻,

db.fsyncLock()  ---注意執行完此指令後視窗不要關閉,等待copy完成後使用
           

注:此時可以通過db.currentOp()在最後看到fsyncLock:true标簽狀态

将此時被當機的secondary節點

--dbPath

參數對應目錄下的所有檔案全部拷貝到新機器上去;

待copy完成後,解鎖目前secondary節點

db.fsyncUnlock()--解鎖
           

啟動新節點程序

/usr/local/mongodb/bin/mongod -f /data1/conf/mongod.conf
           

此時在Primary節點上添加此新節點

檢視複制狀态:

>db.printSlaveReplicationInfo()          ---可以檢視到新節點與複制集的資料狀态
           

檢視新節點的狀态

303、副本集如何擴容

此時新節點正在同步資料,進而使其與複制集Primary節點的資料狀态一緻,如果需要更新同步的資料很少量的話,則會很快變為

“Secondary”

而新節點的shell提示符也會随之而改變:

rs1:STARTUP2>
rs1: SECONDARY>
           
補充
4.修改同步源:

當然我們也可以手動修改資料同步節點(預設Primary上同步),可通過如下指令修改同步源

>rs.syncFrom("myHost:27017")            ---myHost可以是符合條件的Secondary節點
           

注:

  • 3.4版本以後,如果初始化同步正在進行中執行此指令,将會終止初始化同步程序,以新目标節點重新開始資料同步;
  • 3.4以前版本,初始化過程不終止,完成後将再修改同步源

    myHost符合條件:

    • 必須要有資料,不能是arbiter節點,或處于startup2,recovering狀态;
    • 有權通路
    • 同一個叢集配置中的節點
    • members[n].buildIndexes = true
    • 必須是另外的節點,不能是自己