橫向擴容場景:副本集橫向擴容,副本集與集群添加只讀節點。幾種場景下,數據庫服務都是不會停止的,現有的節點添加邏輯是將新節點加入集群,然后通過邏輯同步方式進行數據同步。
當原集群數據量很大的情況下,會存在數據同步時間過長的問題。通過提升硬件性能(如CPU核數、內存、高IO磁盤)與優化網絡當然可以提升數據同步效率,這個不在本文討論的范圍內。現僅考慮數據同步方案,梳理了下方幾個數據同步方案。
方案一
1.使用快照或者備份文件:
主節點上創建一個數據快照備份。
將快照備份文件復制到新加入的從節點上。
在從節點上恢復數據,并啟動 MongoDB 服務。在啟動 MongoDB 服務時,指定 --replSet 參數加入到副本集中。
2.增量數據邏輯同步:
從節點邏輯同步主節點的數據,追寫主節點新增的數據。
這個方案有以下的缺點:現在公有云上的存儲系統不支持快照功能,故采用此方式會借助于文檔數據庫現有的熱備份功能,通過createbackup命令將數據傳輸到新增的節點上,多節點時需并行執行,另外穩定性待進一步驗證。
方案二
借用linux的rsync工具將主節點的數據目錄同步至新增的從節點,rsync在復制文件時會比較源文件和目標文件的差異,然后只復制已經修改的部分。
rsync
rsync -avz --delete --bwlimit=<帶寬限制> <主節點用戶名>@<主節點IP地址>:/data/mongodb/ /data/mongodb/
該方案缺點:源端目標端機器都需要安裝rsync工具
同步效率待測試。
方案三
1.添加節點時先創建一個備份,然后將備份文件恢復至新增節點,有點本末倒置了。
2.使用最新的一個成功的自動備份,可能存在找不到備份文件,自動備份配置關閉的問題。手動備份則可能存在數據過久的問題。
缺點:曲折且本末倒置。
方案四
停止hidden節點,將hidden節點的數據直接scp至新增節點,然后重啟hidden節點與新增節點,并將新增節點加入副本集。
缺點:需要停止hidden節點,三節點副本集過程中再掛掉一個節點,會導致實例異常。不過重啟后亦會恢復正常狀態。