簡介
從v1.5版本開始,MongoShake新增了全量遷移功能,該功能可以讓使用者更快地對資料量較大的MongoDB資料庫做資料複制。MongoShake不再需要源資料庫保留全部的oplog,隻要依賴目前的oplog就能做資料同步複制。MongoShake全量遷移功能會在遷移前記錄源資料庫的oplog位點,然後将源資料庫的資料全部複制到目的庫,複制原理跟MongoDB源生的節點間資料同步是一樣的,它會并發将每個db每個表的資料先全量同步到目的庫,最好再從之前記錄的oplog位點同步剩餘的oplog資料,達到資料的同步。
功能介紹
MongoShake全量遷移支援跨region的資料同步,支援各種MongoDB資料庫形态的資料遷移,包括ReplicaSet到ReplicaSet,ReplicaSet到Sharding,Sharding到ReplicaSet,Sharding到Sharding。MongoShake不僅對資料做了同步,而且對索引以及Sharding的分片也做了同步,使得資料庫的同步遷移變得很容易。
并行複制
為了減少全量遷移的時間,MongoShake會對多表并發進行遷移。為了減少大表遷移的時間,MongoShake也會對文檔進行并發遷移。為了提升文檔遷移的效率,MongoShake會對多個文檔打個batch,進行批量遷移。在MongoShake遷移配置檔案中,有以下參數:
replayer.collection_parallel = 6
replayer.document_parallel = 10
replayer.document_batch_size = 1000
其中replayer.collection_parallel控制遷移的表并發個數,replayer.document_parallel控制每個表中文檔的并發個數,replayer.document_batch_size控制每個batch中的文檔個數
安全性
為了避免使用者錯填遷移的執行個體,在遷移前MongoShake會檢查目的執行個體是否存在待遷移的表,如果存在預設則會報錯,退出遷移。使用者如果想對已經同步的目的執行個體重新做全量遷移,又不想手動删除已存在的表,也可以把以下參數設定為true
replayer.collection_drop = false
分片同步
MongoShake對于Sharding到Sharding的遷移,還會同步源Sharding的分片資訊,包括sharding key和unique資訊,但不會同步background資訊,這是因為目的庫做前台建立索引時,速度會快些。
同步模式
MongoShake支援三種遷移模式all/document/oplog,可以分别進行全量同步document,增量同步oplog,以及全量+增量遷移all。如果設定的模式是all,它會自動識别全量遷移是否已經執行過,如果執行過,它會跳過全量遷移,直接進行增量遷移。判斷的邏輯依據checkpoint表裡的位點的資料是否在源庫的oplog中存在,如果已存在說明增量遷移所依賴的資料都在源庫上,可以繼續做增量遷移。
sync_mode = all