前言
一般生産環境下,我們總是會遇到副本集遷移節點到新機器上的問題,或者擴容出一個新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() ---可以檢視到新節點與複制集的資料狀态
檢視新節點的狀态
此時新節點正在同步資料,進而使其與複制集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
- 必須是另外的節點,不能是自己