如果遷移的源數(shù)據(jù)庫類型為MongoDB,如自建MongoDB、云數(shù)據(jù)庫MongoDB,您需要在配置具體的遷移任務前,參考本文的注意事項及限制,以保障數(shù)據(jù)遷移任務的正常運行。
源庫為MongoDB的遷移方案概覽
根據(jù)如下遷移方案,查看遷移任務的注意事項及限制:
MongoDB(單節(jié)點架構)遷移至MongoDB(所有架構)
類型 | 說明 |
源庫限制 | 帶寬要求:源庫所屬的服務器需具備足夠出口帶寬,否則將影響數(shù)據(jù)遷移速率。 待遷移的集合需具備主鍵或唯一約束,且字段具有唯一性,否則可能會導致目標數(shù)據(jù)庫中出現(xiàn)重復數(shù)據(jù)。 如遷移對象為集合級別,且需進行編輯(如集合的名稱映射),則單次遷移任務僅支持遷移至多1000張集合。當超出數(shù)量限制,任務提交后會顯示請求報錯,此時建議您拆分待遷移的集合,分批配置多個任務,或者配置整庫的遷移任務。 源庫待遷移的單條數(shù)據(jù)不能超過16 MB,否則會導致任務失敗。 源庫的操作限制: 在結構遷移和全量遷移階段,請勿執(zhí)行庫或集合的結構變更(包含數(shù)組類型數(shù)據(jù)的更新),否則會導致數(shù)據(jù)遷移任務失敗或源庫與目標庫的數(shù)據(jù)不一致。 由于該遷移任務不支持增量數(shù)據(jù)遷移,為保障數(shù)據(jù)一致性,全量數(shù)據(jù)遷移期間請勿在源MongoDB數(shù)據(jù)庫中寫入新的數(shù)據(jù)。
暫不支持遷移包含TTL(Time To Live)索引的集合。若待遷移的數(shù)據(jù)庫中包含TTL索引,則可能會導致數(shù)據(jù)不一致。
|
其他限制 | 目標端實例為分片集群架構時: 需清除孤立文檔,否則將影響遷移性能。若在遷移過程遇到_id 沖突的文檔,則可能導致數(shù)據(jù)不一致或任務失敗。 在任務開始前,需要為源端待遷移的數(shù)據(jù)添加與目標端對應的分片鍵。若您無法為源端添加分片鍵,源MongoDB數(shù)據(jù)庫的遷移操作,請參見MongoDB(無分片鍵)遷移至MongoDB(分片集群架構)。 在任務開始后,待遷移的數(shù)據(jù)在使用INSERT命令時必須包含分片鍵,使用UPDATE命令時不支持更改分片鍵。
不支持增量遷移。 若目標集合存在唯一索引或目標集合的capped 屬性為true 時,則在增量遷移階段該集合不支持并發(fā)回放(只支持單線程寫入),從而可能會導致任務延遲增高。 不支持遷移admin和local庫中的數(shù)據(jù)。 不保留事務信息,即源庫中的事務遷移到目標庫時會轉變?yōu)閱螚l的記錄。 建議源和目標庫的MongoDB的數(shù)據(jù)庫版本保持一致,或者從低版本遷移到高版本以保障兼容性。如為高版本遷移至低版本,可能存在數(shù)據(jù)庫兼容性問題。 執(zhí)行數(shù)據(jù)遷移前需評估源庫和目標庫的性能,同時建議業(yè)務低峰期執(zhí)行數(shù)據(jù)遷移。否則全量數(shù)據(jù)遷移時DTS占用源和目標庫一定讀寫資源,可能會導致數(shù)據(jù)庫的負載上升。 由于全量數(shù)據(jù)遷移會并發(fā)執(zhí)行INSERT操作,導致目標數(shù)據(jù)庫的集合產(chǎn)生碎片,因此全量遷移完成后目標數(shù)據(jù)庫的集合存儲空間會比源實例的集合存儲空間大。 請確認DTS對數(shù)據(jù)類型為FLOAT或DOUBLE的列的遷移精度是否符合業(yè)務預期。DTS會通過ROUND(COLUMN,PRECISION) 來讀取這兩類列的值。如果沒有明確定義其精度,DTS對FLOAT的遷移精度為38位,對DOUBLE的遷移精度為308位。 DTS會嘗試恢復七天之內(nèi)遷移失敗任務。因此業(yè)務切換至目標實例前,請務必結束或釋放該任務,或者將DTS訪問目標實例賬號的寫權限用revoke 命令回收掉。避免該任務被自動恢復后,源端數(shù)據(jù)覆蓋目標實例的數(shù)據(jù)。 由于DTS寫入數(shù)據(jù)的邏輯為并發(fā)寫入,所以會導致目標端占用的存儲空間比源端大5%~10%。 目標端MongoDB的count數(shù)量需要使用db.$table_name.aggregate([{ $count:"myCount"}]) 語法查詢。 請確保目標端MongoDB沒有與源端相同的主鍵(默認為_id),否則會導致數(shù)據(jù)丟失。若目標端有與源端相同的主鍵,請在不影響業(yè)務的前提條件下清空目標端的相關數(shù)據(jù)(刪掉目標端中與源端相同_id的文檔)。 若實例運行失敗,DTS技術支持人員將在8小時內(nèi)嘗試恢復該實例。在恢復失敗實例的過程中,可能會對該實例進行重啟、調(diào)整參數(shù)等操作。
說明 在調(diào)整參數(shù)時,僅會修改實例的參數(shù),不會對數(shù)據(jù)庫中的參數(shù)進行修改。可能修改的參數(shù),包括但不限于修改實例參數(shù)中的參數(shù)。
|
特殊情況 | 當源庫為自建MongoDB時,在遷移時,如果源庫進行主備切換,將會導致遷移任務失敗。 |
MongoDB(副本集架構)遷移至MongoDB(副本集架構、分片集群架構)
類型 | 說明 |
源庫限制 | 帶寬要求:源庫所屬的服務器需具備足夠出口帶寬,否則將影響數(shù)據(jù)遷移速率。 待遷移的集合需具備主鍵或唯一約束,且字段具有唯一性,否則可能會導致目標數(shù)據(jù)庫中出現(xiàn)重復數(shù)據(jù)。 如遷移對象為集合級別,且需進行編輯(如集合的名稱映射),則單次遷移任務僅支持遷移至多1000張集合。當超出數(shù)量限制,任務提交后會顯示請求報錯,此時建議您拆分待遷移的集合,分批配置多個任務,或者配置整庫的遷移任務。 源庫待遷移的單條數(shù)據(jù)不能超過16 MB,否則會導致任務失敗。 源庫為Azure Cosmos DB for MongoDB或彈性集群的Amazon DocumentDB時,僅支持全量遷移。 如需進行增量遷移: 源庫需開啟Oplog日志,并確保Oplog日志至少保留7天以上;或者開啟變更流(Change Streams),并確保DTS能夠通過Change Streams訂閱到源庫最近7天內(nèi)的數(shù)據(jù)變更。否則可能會因無法獲取源庫的數(shù)據(jù)變更而導致任務失敗,極端情況下甚至可能會導致數(shù)據(jù)不一致或丟失。由此導致的問題,不在DTS的SLA保障范圍內(nèi)。
重要 建議通過Oplog日志獲取源庫的數(shù)據(jù)變更。 僅4.0及以上版本的MongoDB支持通過Change Streams獲取數(shù)據(jù)變更。 源庫為Amazon DocumentDB(非彈性集群)時,需要手動開啟Change Streams,并在配置任務時將遷移方式選擇為ChangeStream,將架構類型選擇為分片集群架構。
源庫的操作限制: 在結構遷移和全量遷移階段,請勿執(zhí)行庫或集合的結構變更(包含數(shù)組類型數(shù)據(jù)的更新),否則會導致數(shù)據(jù)遷移任務失敗或源庫與目標庫的數(shù)據(jù)不一致。 如僅執(zhí)行全量數(shù)據(jù)遷移,請勿向源實例中寫入新的數(shù)據(jù),否則會導致源庫與目標庫的數(shù)據(jù)不一致。為實時保持數(shù)據(jù)一致性,建議選擇結構遷移、全量數(shù)據(jù)遷移和增量數(shù)據(jù)遷移。
暫不支持遷移包含TTL(Time To Live)索引的集合。若待遷移的數(shù)據(jù)庫中包含TTL索引,則可能會導致數(shù)據(jù)不一致。
|
其他限制 | 目標端實例為分片集群架構時: 需清除孤立文檔,否則將影響遷移性能。若在遷移過程遇到_id 沖突的文檔,則可能導致數(shù)據(jù)不一致或任務失敗。 在任務開始前,需要為源端待遷移的數(shù)據(jù)添加與目標端對應的分片鍵。若您無法為源端添加分片鍵,源MongoDB數(shù)據(jù)庫的遷移操作,請參見MongoDB(無分片鍵)遷移至MongoDB(分片集群架構)。 在任務開始后,待遷移的數(shù)據(jù)在使用INSERT命令時必須包含分片鍵,使用UPDATE命令時不支持更改分片鍵。
建議源和目標庫的MongoDB的數(shù)據(jù)庫版本保持一致,或者從低版本遷移到高版本以保障兼容性。如為高版本遷移至低版本,可能存在數(shù)據(jù)庫兼容性問題。 不支持遷移admin和local庫中的數(shù)據(jù)。 若目標集合存在唯一索引或目標集合的capped 屬性為true 時,則在增量遷移階段該集合不支持并發(fā)回放(只支持單線程寫入),從而可能會導致任務延遲增高。 不保留事務信息,即源庫中的事務遷移到目標庫時會轉變?yōu)閱螚l的記錄。 執(zhí)行數(shù)據(jù)遷移前需評估源庫和目標庫的性能,同時建議業(yè)務低峰期執(zhí)行數(shù)據(jù)遷移。否則全量數(shù)據(jù)遷移時DTS占用源和目標庫一定讀寫資源,可能會導致數(shù)據(jù)庫的負載上升。 由于全量數(shù)據(jù)遷移會并發(fā)執(zhí)行INSERT操作,導致目標數(shù)據(jù)庫的集合產(chǎn)生碎片,因此全量遷移完成后目標數(shù)據(jù)庫的集合存儲空間會比源實例的集合存儲空間大。 請確認DTS對數(shù)據(jù)類型為FLOAT或DOUBLE的列的遷移精度是否符合業(yè)務預期。DTS會通過ROUND(COLUMN,PRECISION) 來讀取這兩類列的值。如果沒有明確定義其精度,DTS對FLOAT的遷移精度為38位,對DOUBLE的遷移精度為308位。 DTS會嘗試恢復七天之內(nèi)遷移失敗任務。因此業(yè)務切換至目標實例前,請務必結束或釋放該任務,或者將DTS訪問目標實例賬號的寫權限用revoke 命令回收掉。避免該任務被自動恢復后,源端數(shù)據(jù)覆蓋目標實例的數(shù)據(jù)。 由于DTS寫入數(shù)據(jù)的邏輯為并發(fā)寫入,所以會導致目標端占用的存儲空間比源端大5%~10%。 目標端MongoDB的count數(shù)量需要使用db.$table_name.aggregate([{ $count:"myCount"}]) 語法查詢。 請確保目標端MongoDB沒有與源端相同的主鍵(默認為_id),否則會導致數(shù)據(jù)丟失。若目標端有與源端相同的主鍵,請在不影響業(yè)務的前提條件下清空目標端的相關數(shù)據(jù)(刪掉目標端中與源端相同_id的文檔)。 若實例運行失敗,DTS技術支持人員將在8小時內(nèi)嘗試恢復該實例。在恢復失敗實例的過程中,可能會對該實例進行重啟、調(diào)整參數(shù)等操作。
說明 在調(diào)整參數(shù)時,僅會修改實例的參數(shù),不會對數(shù)據(jù)庫中的參數(shù)進行修改。可能修改的參數(shù),包括但不限于修改實例參數(shù)中的參數(shù)。
|
特殊情況 | 當源庫為自建MongoDB時:
說明 如果遷移對象選擇為整庫,您還可以創(chuàng)建心跳表,心跳表每秒定期更新或者寫入數(shù)據(jù)。 |
MongoDB(分片集群架構)間的遷移
類型 | 說明 |
源庫限制 | 帶寬要求:源庫所屬的服務器需具備足夠出口帶寬,否則將影響數(shù)據(jù)遷移速率。 待遷移的集合需具備主鍵或唯一約束,且字段具有唯一性,否則可能會導致目標數(shù)據(jù)庫中出現(xiàn)重復數(shù)據(jù)。 待遷移集合中的_id字段需具有唯一性,否則可能會導致數(shù)據(jù)不一致。 如遷移對象為集合級別,且需進行編輯(如集合的名稱映射),則單次遷移任務僅支持遷移至多1000張集合。當超出數(shù)量限制,任務提交后會顯示請求報錯,此時建議您拆分待遷移的集合,分批配置多個任務,或者配置整庫的遷移任務。 源庫待遷移的單條數(shù)據(jù)不能超過16 MB,否則會導致任務失敗。 DTS在執(zhí)行全量數(shù)據(jù)遷移時將占用源庫和目標庫一定的資源,可能會導致數(shù)據(jù)庫服務器負載上升。如果數(shù)據(jù)庫業(yè)務量較大或服務器規(guī)格較低,可能會加重數(shù)據(jù)庫壓力,甚至導致數(shù)據(jù)庫服務不可用。建議您在執(zhí)行數(shù)據(jù)遷移前謹慎評估,在業(yè)務低峰期執(zhí)行數(shù)據(jù)遷移。 MongoDB實例支持的版本與存儲引擎請參見版本及存儲引擎,如需跨版本或跨引擎遷移,請?zhí)崆按_認兼容性。 源庫為Azure Cosmos DB for MongoDB或彈性集群的Amazon DocumentDB時,僅支持全量遷移。 如需進行增量遷移: 源庫需開啟Oplog日志,并確保Oplog日志至少保留7天以上;或者開啟變更流(Change Streams),并確保DTS能夠通過Change Streams訂閱到源庫最近7天內(nèi)的數(shù)據(jù)變更。否則可能會因無法獲取源庫的數(shù)據(jù)變更而導致任務失敗,極端情況下甚至可能會導致數(shù)據(jù)不一致或丟失。由此導致的問題,不在DTS的SLA保障范圍內(nèi)。
重要 建議通過Oplog日志獲取源庫的數(shù)據(jù)變更。 僅4.0及以上版本的MongoDB支持通過Change Streams獲取數(shù)據(jù)變更。 源庫為Amazon DocumentDB(非彈性集群)時,需要手動開啟Change Streams,并在配置任務時將遷移方式選擇為ChangeStream,將架構類型選擇為分片集群架構。
若遷移對象為集合級別,且需進行編輯(如集合的名稱映射),則單次遷移任務僅支持遷移最多1000張集合。當超出數(shù)量限制,任務提交后會顯示請求報錯,此時建議您拆分待遷移的集合,分批配置多個任務,或者配置整庫的遷移任務。 不支持數(shù)據(jù)庫admin和local作為源和目標庫。 源自建MongoDB分片集群實例的Mongos節(jié)點的數(shù)量不能超過10個。 暫不支持遷移包含TTL(Time To Live)索引的集合。若待遷移的數(shù)據(jù)庫中包含TTL索引,則可能會導致數(shù)據(jù)不一致。 請確保源和目標MongoDB分片集群實例中沒有孤立文檔,否則可能會導致數(shù)據(jù)不一致甚至任務失敗。更多信息,請參見孤立文檔和如何清理MongoDB(分片集群架構)的孤立文檔。 源庫的操作限制: 在結構遷移和全量遷移階段,請勿執(zhí)行庫或集合的結構變更(包含數(shù)組類型數(shù)據(jù)的更新),否則會導致數(shù)據(jù)遷移任務失敗或源庫與目標庫的數(shù)據(jù)不一致。 如僅執(zhí)行全量數(shù)據(jù)遷移,請勿向源實例中寫入新的數(shù)據(jù),否則會導致源庫與目標庫的數(shù)據(jù)不一致。為實時保持數(shù)據(jù)一致性,建議選擇結構遷移、全量數(shù)據(jù)遷移和增量數(shù)據(jù)遷移。
|
其他限制 | 若您先購買DTS任務再進行配置,則需要在購買DTS任務時填寫其正確的Shard數(shù)量。 在任務開始前,需要為源端待遷移的數(shù)據(jù)添加與目標端對應的分片鍵;在任務開始后,待遷移的數(shù)據(jù)在使用INSERT命令時必須包含分片鍵,使用UPDATE命令時不支持更改分片鍵。 全量遷移期間必須關閉源MongoDB數(shù)據(jù)庫的均衡器(Balancer),直至每個子任務都運行到增量階段,否則可能會造成數(shù)據(jù)不一致。關于均衡器的操作,請參見管理MongoDB均衡器Balancer。 請確保目標端MongoDB沒有與源端相同的主鍵(默認為_id),否則會導致數(shù)據(jù)丟失。若目標端有與源端相同的主鍵,請在不影響業(yè)務的前提條件下清空目標端的相關數(shù)據(jù)(刪掉目標端中與源端相同_id的文檔)。 不保留事務信息,即源庫中的事務遷移到目標庫時會轉變?yōu)閱螚l的記錄。 在DTS遷移期間,不支持MongoDB分片集群進行分片的擴縮容,否則會導致DTS任務失敗。 目標端MongoDB的count數(shù)量需要使用db.$table_name.aggregate([{ $count:"myCount"}]) 語法查詢。 由于DTS寫入數(shù)據(jù)的邏輯為并發(fā)寫入,所以會導致目標端占用的存儲空間比源端大5%~10%。 若目標集合存在唯一索引或目標集合的capped 屬性為true 時,則在增量遷移階段該集合不支持并發(fā)回放(只支持單線程寫入),從而可能會導致任務延遲增高。 執(zhí)行數(shù)據(jù)遷移前需評估源庫和目標庫的性能,同時建議業(yè)務低峰期執(zhí)行數(shù)據(jù)遷移。否則全量數(shù)據(jù)遷移時DTS占用源和目標庫一定讀寫資源,可能會導致數(shù)據(jù)庫的負載上升。 由于全量數(shù)據(jù)遷移會并發(fā)執(zhí)行INSERT操作,導致目標數(shù)據(jù)庫的表產(chǎn)生碎片,因此全量遷移完成后目標數(shù)據(jù)庫的表存儲空間會比源數(shù)據(jù)庫的表存儲空間大。 DTS會嘗試恢復七天之內(nèi)遷移失敗任務。因此業(yè)務切換至目標實例前,請務必結束或釋放該任務,或者使用revoke 命令回收DTS訪問目標實例賬號的寫權限。避免該任務被自動恢復后,源端數(shù)據(jù)覆蓋目標實例的數(shù)據(jù)。 若實例運行失敗,DTS技術支持人員將在8小時內(nèi)嘗試恢復該實例。在恢復失敗實例的過程中,可能會對該實例進行重啟、調(diào)整參數(shù)等操作。
說明 在調(diào)整參數(shù)時,僅會修改實例的參數(shù),不會對數(shù)據(jù)庫中的參數(shù)進行修改。可能修改的參數(shù),包括但不限于修改實例參數(shù)中的參數(shù)。
|