支持的源和目標數據庫
表 支持的數據庫
源數據庫 目標數據庫
本地自建Mongo數據庫
ECS自建Mongo數據庫
其他云上Mongo數據庫
DDS實例
DDS實例
前提條件
- 已登錄數據復制服務控制臺。
- 滿足實時遷移支持的數據庫類型和版本,詳情請參見實時遷移。
使用建議
-
數據庫遷移與環境多樣性和人為操作均有密切關系,為了確保遷移的平順,建議您在進行正式的數據庫遷移之前進行一次演練,可以幫助您提前發現問題并解決問題。
-
全量階段,確保源和目標數據庫無業務寫入,保證遷移前后數據一致。
-
基于以下原因,建議您在啟動任務時選擇“稍后啟動”功能,將啟動時間設置在業務低峰期,相對靜止的數據可以有效提升一次性遷移成功率,避免遷移對業務造成性能影響。
- 在網絡無瓶頸的情況下,全量遷移會對源數據庫增加約50MB/s的查詢壓力,以及占用2~4個CPU。
- 遷移無主鍵表時,為了確保數據一致性,會存在3s以內的單表級鎖定。
- 正在遷移的數據被其他事務長時間鎖死,可能導致讀數據超時。
- DRS并發讀取數據庫,會占用大約6-10個session連接數,需要考慮該連接數對業務的影響。
- 全量階段讀取表數據時,特別是大表的讀取,可能會阻塞業務上對大表的獨占鎖操作。
-
數據對比
建議您結合數據對比的“稍后啟動”功能,選擇業務低峰期進行數據對比,以便得到更為具有參考性的對比結果。由于同步具有輕微的時差,在數據持續操作過程中進行對比任務,可能會出現少量數據不一致對比結果,從而失去參考意義。
使用須知
在創建遷移任務前,請務必閱讀以下使用須知。
表 使用須知
類型名稱 使用和操作限制 數據庫權限設置 源數據庫最小權限要求:
?全量遷移權限要求:
副本集:連接源數據庫的用戶需要有admin庫的readAnyDatabase權限。
單節點:連接源數據庫的用戶需要有admin庫的readAnyDatabase權限。
集群:連接源數據庫的用戶需要有admin庫的readAnyDatabase權限,有config庫的read權限。
如果需要遷移源數據庫用戶和角色信息,連接源數據庫和目標庫數據庫的用戶需要有admin數據庫的系統表system.users、system.roles的read權限。
全量+增量遷移權限要求:
?副本集:連接源數據庫的用戶需要有admin庫的readAnyDatabase權限,有local庫的read權限。
?單節點:連接源數據庫的用戶需要有admin庫的readAnyDatabase權限,有local庫的read權限。
?集群:連接源數據庫mongos節點的用戶需要有admin庫的readAnyDatabase權限,有config庫的read權限,連接源數據庫分片節點的用戶需要有admin庫的readAnyDatabase權限,有local庫的read權限。
?如果需要遷移源數據庫用戶和角色信息,連接源數據庫和目標庫數據庫的用戶需要有admin數據庫的系統表system.users、system.roles的read權限。
目標數據庫最小權限要求:連接目標數據庫的用戶需要有admin庫的dbAdminAnyDatabase權限,有目標數據庫的readWrite權限。對于目標數據庫是集群的實例,遷移賬號還要有admin庫的clusterManager權限。遷移對象約束
副本集:目前只支持集合(包括驗證器,是否是固定集合),索引和視圖的遷移。
集群:目前只支持集合(包括驗證器,是否是固定集合),分片鍵,索引和視圖的遷移。
單節點:目前只支持集合(包括驗證器,是否是固定集合),索引和視圖的遷移。
只支持遷移用戶數據和源數據庫的賬號信息,不支持遷移系統庫(如local、admin、config等)和系統集合,如果業務數據在系統庫下,則需要先將業務數據移動到用戶數據庫下,可以使用renameCollection命令進行移出。
不支持視圖的創建語句中有正則表達式。
不支持_id字段沒有索引的集合。
不支持BinData()的第一個參數為2。
不支持范圍分片的情況下maxKey當主鍵。
源數據庫要求
?不支持源數據庫的庫名、集合名或視圖名中包含如下字符:'<>.。
如果遷移任務是源數據集群的增量,則源數據必須關閉Balancer。
源數據庫不能是GaussDB(for Mongo)實例。
目標數據庫要求
目標數據庫實例的運行狀態必須正常。
目標數據庫實例必須有足夠的磁盤空間。
多個源數據庫遷移到同一個目標數據庫時,所選的待遷移數據庫的庫名不能重復。
集群到集群的全量遷移,如果源數據庫的集群沒有開啟分片,則需要保證目標數據庫主shard節點的磁盤空間大于源數據庫數據大小。
目前不支持從高版本數據庫到低版本數據庫的遷移。
操作須知
相互關聯的數據對象要確保同時遷移,避免遷移因關聯對象缺失,導致遷移失敗。常見的關聯關系:視圖引用集合、視圖引用視圖等。
副本集:MongoDB數據庫的副本集實例狀態必須正常,要存在主節點。
單節點類型實例的增量遷移目前僅支持源庫為文檔數據庫單節點實例。
源數據庫為非集群實例時,增量遷移階段支持如下操作:
支持數據庫(database)新建、刪除。
支持文檔(document)新增、刪除、更新。
支持集合(collection)新建、刪除。
支持索引(index)新建、刪除。
支持視圖(view)新建,刪除。
支持convertToCapped、collMod、renameCollection命令。
源庫是集群實例時,集群到集群的全量+增量遷移,全量階段和增量階段,不允許對遷移對象做刪除操作,否則會導致任務失敗。
源庫實例類型選擇集群Change Streams(MongoDB 4.0+)模式時,DRS內部遷移使用MongoDB特性Change Streams。使用該模式應注意以下幾個方面:
Change Streams訂閱數據過程會消耗源數據庫一定量的CPU,內存資源,請提前做好源數據庫資源評估。
受MongoDB Change Streams自身性能影響,如果源庫的負載比較大,Change Streams會出現處理速度無法跟上Oplog產生速度,進而導致DRS同步出現時延。
Change Streams目前僅支持drop database,drop collection,rename的DDL,其他DDL均不支持。
不支持DBPointer和DBRef數據類型。
?增量階段單表最多支持10000條/秒左右的遷移速度。對于在源數據庫已經存在TTL索引的集合,或者在增量遷移期間在源庫數據創建了TTL索引的集合,由于源數據庫和目標庫數據庫時區,時鐘的不一致,不能保證遷移完成之后數據的一致性。
壓縮參數block_compressor的取值,根據源庫對應集合的stats().wiredTiger.creationString.block_compressor來決定,如果目標庫已經存在對應的空集合,則不遷移壓縮參數;特殊的,對于不支持的壓縮參數,按照目標庫實例的net.compression.compressors參數決定。當目標庫為DDS 4.2版本時,由于目標庫不支持壓縮參數的設置,DRS不遷移壓縮參數。
對于用戶和角色的遷移,DRS沖突策略為忽略,即遷移的用戶和角色與目標數據庫沖突時,將跳過沖突數據,繼續進行后續遷移。
如果源數據庫的MongoDB服務不是單獨部署的,而是和其他的服務部署在同一臺機器,則必須要給源數據庫的wiredTiger引擎加上cacheSizeGB的參數配置,建議值設為最小空閑內存的一半。
選擇集合遷移時,增量遷移過程中不建議對集合進行重命名操作。
如果源數據庫是副本集,則建議填寫所有的主節點和備節點信息,以防主備切換影響遷移任務。如果填寫的是主備多個節點的信息,注意所有的節點信息必須屬于同一個副本集實例。
如果源數據庫是集群,則建議填寫多個mongos信息,以防單個mongos節點故障影響遷移任務。如果填寫的是多個mongos信息,注意所有的mongos信息必須屬于同一個集群。
非全部遷移場景下,為防止drop database操作刪除目標庫已有的集合,drop database不會同步到目標庫。
源庫是MongoDB 3.6以下版本(不含3.6)時,執行drop database會導致源庫刪除集合但目標庫沒有刪除。
源庫是MongoDB 3.6及以上版本(含3.6)時,drop database 操作在oplog中會體現為drop database 和drop collection操作,所以目標庫也會刪除相應集合,不會出現問題。
為了保持數據一致性,在整個遷移過程中,不允許對正在遷移中的目標數據庫進行修改操作(包括但不限于DDL、DML操作),也不支持對源數據庫進行DDL操作。
遷移過程中,不允許修改、刪除連接源和目標數據庫的用戶的用戶名、密碼、權限,或修改源和目標數據庫的端口號
在任務啟動、任務全量遷移階段,不建議對源數據庫做刪除類型的DDL操作,比如刪除數據庫、集合、索引、文檔、視圖等,這樣可能會引起任務遷移失敗。
在整個遷移過程中,不支持源數據庫主備切換導致數據回滾的情況。
選擇集合遷移時,增量遷移過程中不建議對集合進行重命名操作。
不支持全量遷移和增量遷移階段insert、update源庫大于16MB的文檔。
任務增量階段,為保證遷移的性能,會集合級的進行并發回放。特殊地,以下情況只支持單線程寫入,不支持并發回放:
集合的索引中有unique key時;
集合屬性的capped為true時;
這種情況可能會導致任務時延增高。為了提高遷移的速度,在開始遷移之前,建議在源數據庫刪掉不需要的索引,只保留必須的索引。在遷移過程中不建議對源庫創建索引,如果必須要創建索引,請使用后臺的方式創建索引。
為了防止回環,不支持在相同的源和目標庫同時啟動入云和出云任務。
操作步驟
本章節將以MongoDB分片集群為示例,介紹在公網網絡場景下,通過數據復制服務配置分片集群MongoDB數據庫遷移至DDS集群任務的流程。
步驟 1 在“實時遷移管理”頁面,單擊“創建遷移任務”,進入創建遷移任務頁面。
步驟 2 在“遷移實例”頁面,填選任務名稱、描述、遷移實例信息,單擊“下一步”。
表 任務和描述
| 參數 | 描述 |
|---|---|
| 任務名稱 | 任務名稱在4-50位之間,必須以字母開頭,不區分大小寫,可以包含字母、數字、中劃線或下劃線,不能包含其他的特殊字符。 |
| 描述 | 描述不能超過256位,且不能包含! = < > & ' " \ 特殊字符。 |
表 遷移實例信息
參數 描述 數據流動方向 選擇入云。
入云指目標端數據庫為本云數據庫。源數據庫引擎 選擇MongoDB。 目標數據庫引擎 選擇DDS。 網絡類型 默認為公網網絡類型,可按照需求選擇VPC網絡、VPN網絡、專線網絡、公網網絡。
?VPC網絡:適合云上數據庫之間的遷移。
公網網絡:適合通過公網網絡把其他云下或其他平臺的數據庫遷移到目標數據庫,該類型要求目標數據庫綁定彈性公網IP(EIP)。
?VPN網絡:適合通過VPN網絡,實現其他云下自建數據庫與云上數據庫遷移、或云上跨Region的數據庫之間的遷移。
專線網絡:適合通過專線網絡,實現其他云下自建數據庫與云上數據庫遷移、或云上跨Region的數據庫之間的遷移。目標數據庫實例 用戶所創建的目標數據庫實例。 遷移實例所在子網 選擇遷移實例所在的子網。也可以單擊“查看子網”,跳轉至“網絡控制臺”查看實例所在子網幫助選擇。
默認值為當前所選數據庫實例所在子網,請選擇有可用IP地址的子網。為確保遷移實例創建成功,僅顯示已經開啟DHCP的子網。IP類型 選擇遷移實例的IP類型,目前支持選擇“IPv4”或“IPv4&IPv6雙棧”。只有所選擇的VPC及子網都開啟了IPv6雙棧功能,才能選擇IP類型為“IPv4&IPv6雙棧”。 遷移模式 全量:該模式為數據庫一次性遷移,適用于可中斷業務的數據庫遷移場景,全量遷移將非系統數據庫的全部數據庫對象和數據一次性遷移至目標端數據庫,包括:集合、視圖、索引等。 全量+增量:該模式為數據庫持續性遷移,適用于對業務中斷敏感的場景,通過全量遷移過程完成目標端數據庫的初始化后,增量遷移階段通過解析日志等技術,將源端和目標端數據庫保持數據持續一致。說明如果用戶只進行全量遷移時,建議停止對源數據庫的操作,否則遷移過程中源數據庫產生的新數據不會同步到目標數據庫。說明選擇“全量+增量”遷移模式,增量遷移可以在全量遷移完成的基礎上實現數據的持續同步,無需中斷業務,實現遷移過程中源業務和數據庫繼續對外提供訪問。源數據庫實例類型 遷移模式為“全量+增量”時,需要根據源數據庫的具體來源進行設置。
當源庫類型屬于集群時,該項需要設置為集群。
當源庫類型屬于副本集或者單節點時,該項需要設置為非集群。
增量數據獲取方式 當源端實例類型設置為“集群”時,增量同步時需要選擇數據獲取方式。
oplog:支持MongoDB 3.2及以上版本,DRS直接連接源數據庫實例的每一個Shard進行數據抽取。選擇此方式時,必須關閉源庫實例集合均衡器Balancer,可參考如何關閉集合均衡器Balancer,測試連接時需要填寫源數據庫每一個Shard的連接信息。
changeStream:支持MongoDB 4.0及以上版本,DRS連接源數據庫實例的mongos進行數據抽取,選擇此方式時,源數據庫實例必須開啟WiredTiger存儲引擎,推薦此選項。
源端分片個數 當源端實例類型設置為“集群”且增量數據獲取方式為“oplog”時,需要填寫源端數據庫分片個數。
源端數據庫分片個數默認最小值為2,最大值為32,你需要根據源庫實際的集群分片個數設置該值大小。標簽
可選配置,對遷移任務的標識。使用標簽可方便管理您的遷移任務。每個任務最多支持10個標簽配額。
任務創建成功后,您可以單擊任務名稱,在“標簽”頁簽下查看對應標簽。關于標簽的詳細操作,請參見 標簽管理。
步驟 3 在“源庫及目標庫”頁面,遷移實例創建成功后,填選源庫信息和目標庫信息,單擊“源庫和目標庫”處的“測試連接”,分別測試并確定與源庫和目標庫連通后,勾選協議,單擊“下一步”。
表 源庫信息
參數 描述 mongosIP地址或域名 源數據庫的IP地址或域名,格式為IP地址/域名:端口。其中源數據庫服務端口,可輸入范圍為1~65534間的整數。
該輸入框最多支持填寫3組源數據庫的IP地址或者域名信息,多個值需要使用英文逗號隔開。例如:192.168.0.1:8080,192.168.0.2:8080。同時需要確保所填寫的多個IP地址或域名屬于同一個分片集群。說明此處若填寫的是多組IP地址或者域名信息,在進行測試連接的過程中,只要存在一組IP地址或者域名可以連通,那么測試連接就提示成功。所以需要您保證填寫的IP地址或域名的正確性。賬號認證數據庫 填寫的數據庫賬號所屬的數據庫名稱。例如:DDS實例默認的賬號認證數據庫為admin。 mongos用戶名 源數據庫的用戶名。 mongos密碼 源數據庫的用戶名所對應的密碼。 SSL安全連接 通過該功能,用戶可以選擇是否開啟對遷移鏈路的加密。如果開啟該功能,需要用戶上傳SSL CA根證書。 說明??? 最大支持上傳500KB的證書文件。
??? 如果不使用SSL證書,請自行承擔數據安全風險。分片數據庫 根據源庫實際的集群分片個數,填寫對應的分片數據庫信息。
說明源數據庫的IP地址或域名、數據庫用戶名和密碼,會被系統加密暫存,直至刪除該遷移任務后自動清除。
表 目標庫信息
| 參數 | 描述 |
|---|---|
| 數據庫實例名稱 | 默認為創建遷移任務時選擇的數據庫實例,不可進行修改。 |
| 數據庫用戶名 | 目標數據庫對應的數據庫用戶名。 |
| 數據庫密碼 | 目標數據庫的登錄密碼。 |
說明目標數據庫的用戶名和密碼將在遷移過程中被加密暫存到數據庫和遷移實例主機上,待該任務刪除后會永久清除。
步驟 4 在“遷移設置”頁面,設置遷移對象,單擊“下一步”。
表 遷移對象
參數 描述 遷移用戶 常見的遷移用戶一般分為兩類:支持遷移的用戶和不支持遷移的用戶。您可以根據業務需求選擇“遷移”或者“不遷移”,其中,不支持遷移的賬號或者未選擇遷移的賬號將在目標數據庫中缺失,需要先確保業務不受影響。 遷移對象 您可以根據業務需求,選擇全部對象遷移、表級遷移或者庫級遷移。 如果有切換源數據庫的操作或源庫遷移對象變化的情況,請務必在選擇遷移對象前單擊右上角的
全部遷移:將源數據庫中的所有對象全部遷移至目標數據庫,對象遷移到目標數據庫實例后,對象名將會保持與源數據庫實例對象名一致且無法修改。
表級遷移:將選擇的表級對象遷移至目標數據庫。
庫級遷移:將選擇的庫級對象遷移至目標數據庫。
,以確保待選擇的對象為最新源數據庫對象。
說明??? 若選擇部分數據庫進行遷移時,由于存儲過程、視圖等對象可能與其他數據庫的表存在依賴關系,若所依賴的表未遷移,則會導致遷移失敗。建議您在遷移之前進行確認,或選擇全部數據庫進行遷移。
??? 選擇對象的時候,對象名稱的前后空格不顯示,中間如有多個空格只顯示一個空格。
??? 選擇對象的時候支持搜索,以便您快速選擇需要的數據庫對象。
步驟 5 在“預檢查”頁面,進行遷移任務預校驗,校驗是否可進行遷移。
- 查看檢查結果,如有不通過的檢查項,需要修復不通過項后,單擊“重新校驗”按鈕重新進行遷移任務預校驗。
- 預檢查完成后,且預檢查通過率為100%時,單擊“下一步”。
所有檢查項結果均通過時,若存在請確認項,需要閱讀并確認詳情后才可以繼續執行下一步操作。
步驟 6 在“任務確認”頁面,設置遷移任務的啟動時間,并確認遷移任務信息無誤后,單擊“啟動任務”,提交遷移任務。
表 任務啟動設置
參數 描述 啟動時間 遷移任務的啟動時間可以根據業務需求,設置為“立即啟動”或“稍后啟動”,優選“稍后啟動”。 說明預計遷移任務啟動后,會對源數據庫和目標數據庫的性能產生影響,建議您將任務啟動時間設定在業務低峰期,同時預留2-3天校對數據。
步驟 7 遷移任務提交后,您可在“實時遷移管理”頁面,查看并管理自己的任務。
- 您可查看任務提交后的狀態,狀態請參見任務狀態說明。
- 在任務列表的右上角,單擊
刷新列表,可查看到最新的任務狀態。