源庫為Redis的遷移方案概覽
根據如下遷移方案,查看遷移任務的注意事項及限制:Redis間遷移
Redis間遷移
類型 | 說明 |
源庫限制 | 頻寬要求:源庫所屬的伺服器需具備足夠的出口頻寬,否則將影響資料移轉速率。 源庫不支援雲資料庫Tair(相容Redis) 2.8版本。 源庫的操作限制:如僅執行全量資料移轉(配置任務時,遷移類型僅選中全量遷移),請勿向源執行個體中寫入新的資料,否則會導致源和目標資料不一致。為即時保持資料一致性,建議選擇全量資料移轉和增量資料移轉。 源庫單機版Redis遷移到目標庫叢集版Redis的操作限制:由於叢集cluster只允許單個命令操作單個slot,若在源庫執行多Key操作時,Key不在同一個slot或涉及多個slot,則會出現報錯 CROSSSLOT Keys in request don't hash to the same slot
建議在DTS遷移過程中僅執行單Key操作,以免導致鏈路中斷。 為保障遷移品質,DTS會在源庫中插入一個首碼為DTS_REDIS_TIMESTAMP_HEARTBEAT的Key用於記錄更新時間點,如果源庫為叢集架構,DTS會在各個shard上均插入該Key。遷移過程中會過濾該Key,遷移任務結束,該Key就會到期。 如果源庫為唯讀執行個體或者DTS帳號沒有寫(SETEX)許可權,上報的延遲可能不準確。 基於Redis的複製積壓緩衝(replication backlog)機制,為保障遷移鏈路穩定性,建議將設定檔redis.conf中repl-backlog-size參數的值適當調大。 若源端為儲存介質是持久記憶體的Tair(企業版)執行個體,則需確保appendonly的參數值為yes。更多資訊,請參見操作步驟。 若源端為Tair(企業版)全球多活的子執行個體,由於該執行個體(功能)自身的限制,DTS僅支援遷移所選擇子執行個體的資料,不支援遷移其他子執行個體的資料。
|
其他限制 | 來源資料庫和目標資料庫不支援雲資料庫Tair(相容Redis)企業版執行個體容量儲存型。 遷移期間,如源Redis或目標Redis發生擴縮容(如增加或者減少分區)、執行個體變更配置(如擴大記憶體,變更規格、配置,可用性區域遷移等)或變更串連地址與連接埠號碼等操作時,會導致DTS無法擷取連續的日誌資料和正確的串連資訊,從而導致遷移任務中斷。如果您遇到此類情況,為保障資料一致性,建議重新設定任務前,先清空已同步至目標Redis的資料。 當源或目標執行個體為自建Redis(接入方式不是雲執行個體)時,若遷移期間該Redis的串連地址發生變化(例如發生執行個體遷移,包含主備切換等情境),則可能會導致遷移任務出現重試、延遲、失敗,甚至資料不一致的問題。請及時確認遷移任務的狀態,若DTS任務出現重試、延遲、失敗等異常情況,請重新設定遷移任務。 在目標Redis觸發執行個體遷移(包含主備切換等情境)後,可能會導致資料唯寫到了記憶體(資料沒有寫入到備庫),從而造成資料丟失。 如果目標資料庫記憶體不足,觸發資料逐出時,由於雲資料庫 Tair(相容 Redis)的預設資料逐出策略(maxmemory-policy)為volatile-lru,會導致目標庫與源庫資料不一致的情況,但不會影響任務的正常運行。 為避免該情況發生,建議將目標庫的資料逐出原則設定為noeviction,當目標庫記憶體不足時,資料會寫入失敗,同時任務也會失敗,但目標庫不會因為資料逐出而遺失資料。 對於通過EVAL或EVALSHA調用的Lua指令碼,在增量資料移轉時,由於目標端在執行指令碼時不會明確返回執行結果,所以DTS無法確認該類型指令碼是否執行成功。 對於List列表,由於DTS在調用psync或sync傳輸資料時,不會對目標端已有的資料執行Flush操作,所以可能出現重複的資料。 如果源庫中的某些Key使用了到期(expire)策略,由於可能存在Key已到期但未被及時刪除的情況,所以在目標庫中查看到的Key數量(例如通過info命令查看)會比源庫的Key數量少。
說明 源和目標庫中,未設定到期策略或未到期的Key數量是一致的。 建議源和目標庫的Redis版本保持一致,以保障相容性,同時支援低版本遷移至高版本。
說明 遷移任務如果是高版本遷移至低版本,可能會存在相容性風險。 當Redis執行個體的接入方式為公網IP時,執行個體模式不支援叢集版。 執行資料移轉前需評估源庫和目標庫的效能,同時建議業務低峰期執行資料移轉。否則全量資料移轉時DTS佔用源和目標庫一定讀寫資源,可能會導致資料庫的負載上升。 由於全量資料移轉會並發執行INSERT操作,導致目標資料庫的表產生片段,因此全量遷移完成後目標資料庫的表格儲存體空間會比源執行個體的表格儲存體空間大。 DTS會嘗試恢複七天之內遷移失敗任務。因此業務切換至目標執行個體前,請務必結束或釋放該任務,或者將DTS訪問目標執行個體帳號的寫入權限用revoke命令回收掉。避免該任務被自動回復後,源端資料覆蓋目標執行個體的資料。 若目標執行個體的架構類型為叢集版且某一個分區達到了記憶體上限,或目標執行個體的儲存空間不足時,DTS任務會因記憶體溢出(Out of Memory)而失敗。 若源或目標執行個體已開啟透明資料加密TDE功能,則暫不支援通過DTS遷移資料。 若在資料移轉過程中出現包括但不限於以下情況,可能會使全量資料重新遷移至目標端,從而導致資料不一致。 若雲資料庫Tair(相容Redis)執行個體已開啟TLS(Transport Layer Security)加密功能,則必須以SSL安全連線的方式接入到DTS(不支援TLSv1.3)。當前暫不支援已開啟SSL的雲資料庫Tair(相容Redis)執行個體,以雲執行個體的方式接入DTS。 若遷移執行個體同時包含全量任務和增量任務,則在該遷移執行個體重啟後,可能會導致DTS重新執行全量任務和增量任務。 重啟遷移執行個體可能導致部分命令重複執行,特別是在存在非等冪命令(例如INCRBY、LPUSH等)或觸發重新執行全量任務的情況下,可能會導致源庫與目標庫資料不一致。 -
若執行個體運行失敗,DTS技術支援人員將在8小時內嘗試恢複該執行個體。在恢複失敗執行個體的過程中,可能會對該執行個體進行重啟、調整參數等操作。
說明
在調整參數時,僅會修改DTS執行個體的參數,不會對資料庫中的參數進行修改。可能修改的參數,包括但不限於修改執行個體參數中的參數。
|
特殊情況 | 當源庫為自建Redis時: |