作者 | 吳守陽
審校 | 重樓
速覽
1、主要特點
2、使用場景
3、限制
4、注意事項
5、連接方式
6、使用方法
7、參數(shù)詳解
8、總結(jié)
MongoSync 是引入 MongoDB 6.0 的一個新的遷移工具,用于在不同 MongoDB 部署之間進(jìn)行數(shù)據(jù)遷移。它取代了之前的 mongoexport 和mongoimport,以及mongodump 和mongorestore 的部分功能,提供了更為高效和安全的數(shù)據(jù)遷移體驗。
1、主要特點
- 實時數(shù)據(jù)遷移:MongoSync 支持實時數(shù)據(jù)遷移,可以在源和目標(biāo)數(shù)據(jù)庫之間同步數(shù)據(jù)更改,確保數(shù)據(jù)的一致性和實時性。
- 增量遷移:它能夠進(jìn)行增量數(shù)據(jù)遷移,這意味著在初次遷移完成后,只遷移自上次遷移以來的更改,減少了數(shù)據(jù)傳輸量和遷移時間。
- 斷點續(xù)傳:MongoSync 具備斷點續(xù)傳功能。如果遷移過程中出現(xiàn)中斷,可以從中斷的地方繼續(xù)遷移,避免了完全重新開始的需要。
- 數(shù)據(jù)驗證:在遷移過程中,MongoSync 會進(jìn)行數(shù)據(jù)驗證,確保遷移后的數(shù)據(jù)與源數(shù)據(jù)一致。
- 多線程和并發(fā)處理:MongoSync 支持多線程和并發(fā)處理,可以利用多核CPU并行處理數(shù)據(jù),提高遷移效率。
- 安全性和加密:在數(shù)據(jù)遷移過程中,MongoSync 可以使用加密通道,保護(hù)數(shù)據(jù)在傳輸過程中的安全。
2、使用場景
- 數(shù)據(jù)中心遷移:當(dāng)需要將數(shù)據(jù)從一個數(shù)據(jù)中心遷移到另一個數(shù)據(jù)中心時。
- 云遷移:將本地部署的 MongoDB 數(shù)據(jù)遷移到云服務(wù)提供商(如 MongoDB Atlas)。
- 數(shù)據(jù)庫升級:在進(jìn)行版本升級或架構(gòu)調(diào)整時,將數(shù)據(jù)從舊部署遷移到新部署。
- 數(shù)據(jù)備份和恢復(fù):作為數(shù)據(jù)備份策略的一部分,定期將數(shù)據(jù)遷移到備用數(shù)據(jù)庫。
3、限制
- 目標(biāo)集群必須為空。
- MongoSync 不驗證集群或環(huán)境是否正確配置。
- 在 MongoSync 運行期間,其他客戶端不應(yīng)向目標(biāo)集群寫入數(shù)據(jù)。
- 如果禁用了寫入阻塞,用戶在開始提交過程前必須阻止對源集群的寫入。
- 不復(fù)制 system.* 類型的集合。
- 不支持字段名以美元符號 ($) 開頭的文檔。
- 不支持 MongoDB 無服務(wù)器(Serverless)集群。
- 不支持 MongoDB 共享層(Shared Tier)。
- 不支持可查詢加密(Queryable Encryption)。
- 無法同步在相同字段上同時定義了唯一索引和非唯一索引的集合。
- 在嘗試使用 MongoDB Atlas 集群前,應(yīng)禁用“所有查詢都需要索引”選項(M10+)。
- MongoSync 不同步用戶或角色。
- MongoSync 不復(fù)制在源集群上進(jìn)行的 applyOps 操作至目標(biāo)集群。
- MongoSync 必須使用主讀取偏好從源集群讀取數(shù)據(jù)。
- MongoSync 不支持同步 Atlas Search 索引。
- MongoSync 僅支持使用 WiredTiger 存儲引擎的集群。
MongoDB 社區(qū)版
MongoDB 不測試社區(qū)版的集群間同步,并且在大多數(shù)情況下,不為社區(qū)部署提供集群間同步的支持。若想在 MongoDB 社區(qū)版中使用集群間同步,需聯(lián)系 MongoDB 銷售代表討論需求和定制化選項。
不支持的集合類型
- 時間序列集合不受支持。
- 設(shè)置了 expireAfterSeconds 的聚類集合不受支持。
分片集群
- MongoSync 不支持從分片集群到復(fù)制集的同步。
- 從復(fù)制集到分片集群的同步有以下限制:
- 在同步過程中,MongoSync 允許用戶重命名 sharding.shardingEntriesStart 命令選項中包含的集合。
- 在同步過程中使用 sharding.createSupportingIndexes 選項創(chuàng)建支持分片鍵的索引后,不能在源集群上創(chuàng)建這些索引。
- 在一個集合內(nèi),_id 字段在集群所有分片上必須是唯一的。
- 同步期間不能使用 movePrimary 命令重新分配主分片。
- 區(qū)域配置不會被復(fù)制,MongoSync 只復(fù)制數(shù)據(jù),不繼承區(qū)域。
- 同步過程中不能添加或移除分片。
- MongoSync 僅同步所有分片上存在的索引。
- MongoSync 僅同步所有分片上具有一致索引規(guī)范的索引。
- 必須在整個遷移期間停止源和目標(biāo)分片集群的平衡器。
- 同步過程中不得在源或目標(biāo)集群上運行 moveChunk 或 moveRange 命令。
- 同步期間不能細(xì)化分片鍵或使用 reshardCollection 修改分片鍵。
反向同步
- 若舊源集群上的唯一索引部分分布在分片上,反向同步可能會導(dǎo)致失敗,確保反向前所有分片上有唯一索引。
- 源和目標(biāo)集群的分片數(shù)量必須相同,不同拓?fù)浠蛑饕姹镜募簾o法反向同步。
多個集群
- MongoSync 不支持將多個源集群同步到單一目標(biāo)集群。
- 一個集群不能同時作為 MongoSync 的源集群和目標(biāo)集群。
過濾同步
- 過濾不支持反向同步。
- 開始前目標(biāo)集群中不應(yīng)包含用戶數(shù)據(jù)。
- 開始前目標(biāo)集群中不應(yīng)包含系統(tǒng)數(shù)據(jù)庫。
- 不能修改正在使用的過濾器,要創(chuàng)建新過濾器,參考替換現(xiàn)有過濾器。
- 只能在特定情況下重命名集合。
- 如果過濾器包含視圖但不包含基礎(chǔ)集合,只有視圖元數(shù)據(jù)會被同步到目標(biāo)集群。
- 過濾器中不能指定系統(tǒng)集合或系統(tǒng)數(shù)據(jù)庫。
- 使用 $out 聚合階段或 mapReduce 命令(設(shè)置為創(chuàng)建或替換集合)時,必須配置過濾器以使用整個數(shù)據(jù)庫,不能限制過濾器到數(shù)據(jù)庫內(nèi)的集合。
限制集合
- 自1.3.0版本起,集群間同步支持限制集合,但有一些限制。
- convertToCapped 和 cloneCollectionAsCapped 不受支持。
- 源集群上的限制集合在同步期間正常工作。
- 目標(biāo)集群上的限制集合在同步期間會有臨時變化,沒有文檔數(shù)量的最大限制,最大集合大小為1PB,MongoSync 在提交時恢復(fù)原始的最大文檔數(shù)量和最大文檔大小。
4、注意事項
當(dāng)源集群或目標(biāo)集群為分片集群時,停止 balancer,并且不要在整個生命周期內(nèi)運行 moveChunk 或 moveRange 命令 遷移。要停止均衡器,請運行 balancerStop 命令并等待命令完成。
5、連接方式
SRV 連接方案的形式為:
mongodb+srv://[username:password@][host.domain.TLD][:port][/defaultauthdb][?options]
標(biāo)準(zhǔn) URI 連接方案的格式為:
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
在使用MongoSync 進(jìn)行集群間同步時,正確的連接字符串是至關(guān)重要的。無論是使用 SRV 還是標(biāo)準(zhǔn) URI 方案,你都需要確保提供足夠的信息來準(zhǔn)確地連接到源和目標(biāo)集群。對于復(fù)制集,直接指定 mongod 實例;而對于分片集群,則應(yīng)指定mongos 實例。通過遵循這些指南,你可以確保MongoSync 正確地初始化并執(zhí)行數(shù)據(jù)同步。
6、使用方法
MongoSync 集群到集群:
shard01遷移
mongosync \
--cluster0 "mongodb://clusterAdmin:superSecret@clusterOne01.fancyCorp.com:27500,clusterOne02.fancyCorp.com:27500,clusterOne03.fancyCorp.com:27500" \
--cluster1 "mongodb://clusterAdmin:superSecret@clusterTwo01.fancyCorp.com:27500,clusterTwo02.fancyCorp.com:27500,clusterTwo03.fancyCorp.com:27500" \
--id shard01 --port 27181
shard02遷移
mongosync \
--cluster0 "mongodb://clusterAdmin:superSecret@clusterOne01.fancyCorp.com:27500,clusterOne02.fancyCorp.com:27500,clusterOne03.fancyCorp.com:27500" \
--cluster1 "mongodb://clusterAdmin:superSecret@clusterTwo01.fancyCorp.com:27500,clusterTwo02.fancyCorp.com:27500,clusterTwo03.fancyCorp.com:27500" \
--id shard02 --port 27182
shard03遷移
mongosync \
--cluster0 "mongodb://clusterAdmin:superSecret@clusterOne01.fancyCorp.com:27500,clusterOne02.fancyCorp.com:27500,clusterOne03.fancyCorp.com:27500" \
--cluster1 "mongodb://clusterAdmin:superSecret@clusterTwo01.fancyCorp.com:27500,clusterTwo02.fancyCorp.com:27500,clusterTwo03.fancyCorp.com:27500" \
--id shard03 --port 27183
檢查進(jìn)度
curl mongosync01Host:27181/api/v1/progress -XGET
暫停實例MongoSync
curl mongosync01Host:27181/api/v1/pause -XPOST --data '{}'
恢復(fù)同步
curl mongosync01Host:27181/api/v1/resume -XPOST --data '{}'
mongosync01Host為創(chuàng)建mongosync的實例地址
7、參數(shù)詳解
--cluster0 value
用于指定第一個集群的URI,該集群可以作為數(shù)據(jù)源或目標(biāo)。
--cluster1 value
用于指定第二個集群的URI,同樣可以作為數(shù)據(jù)源或目標(biāo)。
--verbosity value
設(shè)置日志的詳細(xì)程度級別,可選值包括:TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC(默認(rèn)值為 DEBUG)。
--logPath DIRECTORY
指定日志輸出的目錄路徑。
--port value
設(shè)置HTTP API服務(wù)器的端口號(默認(rèn)值為 27182)。
--id value
當(dāng)使用多個 mongosync 實例時,該標(biāo)志應(yīng)設(shè)置為 mongosync 將負(fù)責(zé)追蹤的源分片ID。如果僅使用單個 mongosync 實例,則不應(yīng)設(shè)置此標(biāo)志。
--config value
指定配置文件的路徑。
--version, -v
打印 mongosync 的版本信息。
--disableTelemetry
如果設(shè)置,將禁用遙測跟蹤(默認(rèn)值為 false)。
--loadLevel value
控制內(nèi)部并行度參數(shù)的數(shù)字,范圍從 1(最小并行度)到 4(最大并行度)(默認(rèn)值為 3)。
總結(jié)
MongoSync 是 MongoDB 6.0 提供的一種強大且靈活的數(shù)據(jù)遷移工具,它簡化了數(shù)據(jù)遷移的過程,提高了遷移的效率和安全性,是進(jìn)行數(shù)據(jù)庫遷移項目的理想選擇。如果你正計劃進(jìn)行數(shù)據(jù)遷移,MongoSync 值得考慮。不過,在使用之前,建議先在測試環(huán)境中試驗,以熟悉其操作流程并評估其性能影響。
作者介紹
吳守陽,51CTO社區(qū)編輯,擁有8年DBA工作經(jīng)驗,熟練管理MySQL、Redis、MongoDB等開源數(shù)據(jù)庫。精通性能優(yōu)化、備份恢復(fù)和高可用性架構(gòu)設(shè)計。善于故障排除和自動化運維,保障系統(tǒng)穩(wěn)定可靠。具備良好的團(tuán)隊合作和溝通能力,致力于為企業(yè)提供高效可靠的數(shù)據(jù)庫解決方案。