MongoDB復制是將數(shù)據(jù)同步在多個服務(wù)器的過程。
復制提供了數(shù)據(jù)的冗余備份,并在多個服務(wù)器上存儲數(shù)據(jù)副本,提高了數(shù)據(jù)的可用性, 并可以保證數(shù)據(jù)的安全性。
復制還允許您從硬件故障和服務(wù)中斷中恢復數(shù)據(jù)。
MongoDB復制原理
mongodb的復制至少需要兩個節(jié)點。其中一個是主節(jié)點,負責處理客戶端請求,其余的都是從節(jié)點,負責復制主節(jié)點上的數(shù)據(jù)。
mongodb各個節(jié)點常見的搭配方式為:一主一從、一主多從。
主節(jié)點記錄在其上的所有操作oplog,從節(jié)點定期輪詢主節(jié)點獲取這些操作,然后對自己的數(shù)據(jù)副本執(zhí)行
這些操作,從而保證從節(jié)點的數(shù)據(jù)與主節(jié)點一致。
MongoDB復制結(jié)構(gòu)圖如下所示:

以上結(jié)構(gòu)圖總,客戶端總主節(jié)點讀取數(shù)據(jù),在客戶端寫入數(shù)據(jù)到主節(jié)點是, 主節(jié)點與從節(jié)點進行數(shù)據(jù)交互保障數(shù)據(jù)的一致性。
MongoDB 副本集可用分兩種:
Master-Slave 主從復制
實現(xiàn)數(shù)據(jù)同步只需要在某一臺服務(wù)器啟動時加上"-master"參數(shù),以指明此服務(wù)器的角色是primary;另一臺服務(wù)器加上"-slave"和"-source"參數(shù),以指明此服務(wù)器的角色是slave。
主從復制的優(yōu)點如下:
- 從服務(wù)器可以執(zhí)行查詢工作,降低主服務(wù)器訪問壓力。
- 在從服務(wù)器執(zhí)行備份,避免備份期間鎖定主服務(wù)器的數(shù)據(jù)。
- 當主服務(wù)器出現(xiàn)故障時,可以快速切換到從服務(wù)器,減少當機時間。
注意:MongoDB 的最新版本已不再推薦此方案。主從復制雖然可以承受一定的負載壓力,但這種方式仍然是一個單點,如果主庫掛了,數(shù)據(jù)寫入就成了風險。
Replica Sets復制集
MongoDB 在 1.6 版本對開發(fā)了新功能replica set,這比之前的replication 功能要強大一 些,增加了故障自動切換和自動修復成員節(jié)點,各個DB 之間數(shù)據(jù)完全一致,大大降低了維 護成功。auto shard 已經(jīng)明確說明不支持replication paris,建議使用replica set,replica set 故障切換完全自動。
Replica Sets的結(jié)構(gòu)類似一個集群,完全可以把它當成一個集群,因為它確實與集群實現(xiàn)的作用是一樣的:如果其中一個節(jié)點出現(xiàn)故障,其他節(jié)點馬上會將業(yè)務(wù)接管過來而無須停機操作。