使用技巧(需要人為配合)
如果您使用的是全量遷移模式(離線遷移),確保源和目標數據庫無業務寫入,保證遷移前后數據一致。
如果您使用的是全量+增量遷移模式(在線遷移),支持在源數據庫有業務數據寫入的情況下進行遷移,推薦提前2-3天啟動任務,并配合如下使用技巧和對應場景的操作要求,以確保順利遷移。
全量遷移
基于以下原因,建議您結合定時啟動功能,選擇業務低峰期開始運行遷移任務,相對靜態的數據,遷移時復雜度將會降低。
全量遷移會對源數據庫有一定的訪問壓力。
遷移無主鍵表時,為了確保數據一致性,會存在3s以內的單表級鎖定。
正在遷移的數據被其他事務長時間鎖死,可能導致讀數據超時。
數據對比
建議您結合數據對比的“稍后啟動”功能,選擇業務低峰期進行數據對比,以便得到更為具有參考性的對比結果。由于同步具有輕微的時差,在數據持續操作過程中進行對比任務,可能會出現少量數據不一致對比結果,從而失去參考意義。
操作要求
針對一些無法預知或人為因素及環境突變導致遷移失敗的情況,數據庫復制服務提供以下常見的操作限制,供您在遷移過程中參考。
類型名稱
操作限制(需要人為配合)
注意事項
環境要求均不允許在遷移過程中修改,直至遷移結束。
相互關聯的數據對象要確保同時遷移,避免遷移因關聯對象缺失,導致遷移失敗。常見的關聯關系:視圖引用集合、視圖引用視圖等。
副本集:MongoDB數據庫的副本集實例狀態必須正常,要存在主節點。
單節點:目前不支持源數據庫為非本云單節點實例的遷移。
源數據庫為非集群實例時,增量遷移階段支持如下操作:
支持數據庫(database)新建、刪除。
支持文檔(document)新增、刪除、更新。
支持集合(collection)新建、刪除。
支持索引(index)新建、刪除。
支持視圖(view)新建,刪除。
支持convertToCapped、collMod、renameCollection命令。
源庫是集群實例時,集群到集群的全量+增量遷移,全量階段和增量階段,不允許對遷移對象做刪除操作,否則會導致任務失敗。
源庫實例類型選擇集群(MongoDB 4.0+)模式時,表示源數據庫為集群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均不支持。
對于在源數據庫已經存在TTL索引的集合,或者在增量遷移期間在源庫數據創建了TTL索引的集合,由于源數據庫和目標庫數據庫時區,時鐘的不一致,不能保證遷移完成之后數據的一致性。
如果源數據庫的MongoDB服務不是單獨部署的,而是和其他的服務部署在同一臺機器,則必須要給源數據庫的wiredTiger引擎加上cacheSizeGB的參數配置,建議值設為最小空閑內存的一半。
專屬計算集群暫不支持DDS實例,無法創建遷移任務。
選擇集合遷移時,增量遷移過程中不建議對集合進行重命名操作。
如果源數據庫是副本集,則建議填寫所有的主節點和備節點信息,以防主備切換影響遷移任務。如果填寫的是主備多個節點的信息,注意所有的節點信息必須屬于同一個副本集實例。
如果源數據庫是集群,則建議填寫多個mongos信息,以防單個mongos節點故障影響遷移任務。如果填寫的是多個mongos信息,注意所有的mongos信息必須屬于同一個集群。如果是集群的增量遷移任務,建議shard信息填寫所有的主節點和備節點,以防主備切換影響遷移任務,并且注意所填寫的主備信息必須屬于同一個shard。確保填寫的所有shard節點信息必須隸屬于同一個集群。
非全部遷移場景下,為防止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操作,比如刪除數據庫、集合、索引、文檔、視圖等,這樣可能會引起任務遷移失敗。
在整個遷移過程中,不支持源數據庫主備切換導致數據回滾的情況。
選擇集合遷移時,增量遷移過程中不建議對集合進行重命名操作。
為了提高遷移的速度,在開始遷移之前,建議在源數據庫刪掉不需要的索引,只保留必須的索引。在遷移過程中不建議對源庫創建索引,如果必須要創建索引,請使用后臺的方式創建索引。
環境要求
實時遷移對環境有一些特定的要求,請確保環境配置滿足以下條件。該類型的要求系統會自動檢查,并給出處理建議。
類型名稱
使用限制(DRS自動檢查)
數據庫權限設置
源數據庫最小權限要求:
全量遷移權限要求:
副本集:連接源數據庫的用戶權限需要對admin數據庫有readAnyDatabase權限。
集群:連接源數據庫的用戶權限需要對admin數據庫有readAnyDatabase權限,對config數據庫有read權限。
單節點:連接源數據庫的用戶權限需要對admin數據庫有readAnyDatabase權限。
如果需要遷移源數據庫用戶和角色信息,連接源數據庫的用戶權限需要對admin數據庫的系統表system.users,system.roles有讀權限。
全量+增量遷移權限要求:
副本集:連接源數據庫的用戶權限需要對admin數據庫有readAnyDatabase權限,對local數據庫有read權限。
單節點:連接源數據庫的用戶權限需要對admin數據庫有readAnyDatabase權限,對local數據庫有read權限。
集群:連接源數據庫mongos節點的用戶權限需要對admin數據庫有readAnyDatabase權限,對config數據庫有read權限, 連接源數據庫分片節點的用戶權限需要對admin數據庫有readAnyDatabase權限,對local數據庫有read權限。
如果需要遷移源數據庫用戶和角色信息,連接源數據庫的用戶權限需要對admin數據庫的系統表system.users,system.roles有讀權限。
目標數據庫最小權限要求:連接目標數據庫的用戶權限需要對admin數據庫有readAnyDatabase權限,對目標數據庫有readWrite權限。
遷移對象約束
副本集:目前只支持集合(包括驗證器,是否是固定集合),索引和視圖的遷移。
集群:目前只支持集合(包括驗證器,是否是固定集合),分片鍵,索引和視圖的遷移。
單節點:目前只支持集合(包括驗證器,是否是固定集合),索引和視圖的遷移。
只支持遷移用戶數據和源數據庫的賬號信息,不支持遷移系統庫和系統集合,如果業務數據在系統庫下,則需要先將業務數據移動到用戶數據庫下,可以使用renameCollection命令進行移出。
不支持_id字段沒有索引的集合。
源數據庫要求
不支持源數據庫的庫名、集合名或視圖名中包含如下字符:'<>.。
如果遷移任務是源數據集群的增量,則源數據必須關閉Balancer。
源數據庫不能是GaussDB(for ? Mongo)實例。
目標數據庫要求
目標數據庫實例的運行狀態必須正常。
目標數據庫實例必須有足夠的磁盤空間。
多個源數據庫遷移到同一個目標數據庫時,所選的待遷移數據庫的庫名不能重復。
集群到集群的全量遷移,如果源數據庫的集群沒有開啟分片,則需要保證目標數據庫主shard節點的磁盤空間大于源數據庫數據大小。
目前不支持從高版本數據庫到低版本數據庫的遷移。