當您需要將一個云數據庫 Tair(兼容 Redis)實例的數據遷移到另一個云數據庫 Tair(兼容 Redis)實例中,若您未創建新實例,推薦您通過備份集克隆、數據閃回功能將數據克隆至新實例,若您已創建新實例,建議您通過數據傳輸服務DTS(Data Transmission Service,簡稱DTS)實現Redis實例(自建Redis和云數據庫 Tair(兼容 Redis))間的單向數據遷移。DTS支持全量數據遷移和增量數據遷移,可以實現在不停服的情況下,平滑地完成數據庫的遷移。本文將簡單對比三種數據遷移方式,并詳細介紹通過DTS遷移Redis數據的詳細步驟。
云數據庫 Tair(兼容 Redis)實例間數據遷移的方式對比
對比項\數據遷移方式 | DTS | ||
適用場景 | 遷移數據到一個已有的云數據庫Tair(兼容Redis)實例。 | 根據現有實例的備份數據,克隆一個新實例。 | 根據現有實例的備份數據,克隆一個新實例。 |
云數據庫Tair(兼容Redis)實例數據遷移費用 |
更多計費詳情,請參見計費項。 |
|
|
遷移粒度 | 庫粒度。 | 實例粒度:恢復實例中指定備份集中的所有數據。 |
|
是否支持增量遷移 | 支持。 | 不支持。 | 不支持。 |
支持。 | 不支持。 | 不支持。 | |
跨地域遷移 | 支持。 | 不支持。 | 不支持。 |
不同數據庫版本間的數據遷移 | 支持1。 | 不支持。 | 不支持。 |
不同架構的數據遷移 | 支持2。 | 部分支持2。 | 部分支持2。 |
1使用DTS遷移時,建議源庫和目標庫的數據庫版本一致,避免發生兼容性問題。
2如需將標準架構實例的數據遷移到集群架構或讀寫分離架構,請先了解集群架構和讀寫分離架構命令限制。請參見集群架構與讀寫分離架構實例的命令限制。
DTS功能概述
全量遷移
DTS將源庫的存量數據全部遷移到目標庫中,全量遷移不收費。
增量遷移
在全量遷移的基礎上,DTS將源庫的增量更新實時地同步到目標庫中。增量遷移會根據使用時長產生費用(與遷移的數據量無關),更多信息請參見計費項。
前提條件
已創建目標云數據庫 Tair(兼容 Redis)實例,且該實例規格需大于原實例已使用的內存。更多信息請參見創建實例。
建議目標數據庫總內存比源庫的內存占用大10%以上。若因為目標數據庫內存不足,可能會導致數據不一致、任務失敗等問題,您需要清空目標數據庫并重新配置任務。
注意事項
遷移期間,請勿對源庫和目標庫進行擴縮容、變配規格、變更連接地址等操作,否則會導致任務失敗,您需重新配置任務。同時,執行遷移操作會占用源庫和目標庫資源,建議您在業務低峰期執行。
操作步驟
進入遷移任務的列表頁面。
登錄DMS數據管理服務。
在頂部菜單欄中,單擊集成與開發。
在左側導航欄,選擇 。
單擊創建任務。
配置源庫及目標庫信息,并單擊頁面下方的測試連接以進行下一步。
類別
配置
說明
無
任務名稱
DTS會自動生成一個任務名稱,建議配置具有業務意義的名稱(無唯一性要求),便于后續識別。
源庫信息
選擇DMS數據庫實例
若您已將源庫錄入至DMS中,可在此選擇,選擇后無需填寫下方的源庫信息。若未錄入,請忽略該選項。
數據庫類型
選擇Tair/Redis。
接入方式
根據源庫的部署位置進行選擇,本示例選擇云實例。
實例地區
選擇實例所屬的地域。
是否跨阿里云賬號
本示例為同一阿里云賬號間的遷移,選擇不跨賬號。
實例ID
選擇源庫的實例ID。
認證方式
請根據實際情況選擇密碼登錄或免密登錄,本示例選擇密碼登錄。
說明若實例沒有開啟專有網絡免密訪問功能,請選擇密碼登錄。
數據庫密碼
填入連接源實例的賬號密碼。
說明非必填項,若沒有設置密碼可以不填。
數據庫密碼格式為<user>:<password>。例如,實例自定義的用戶名為admin,密碼為Rp829dlwa,則此處填入的數據庫密碼為admin:Rp829dlwa。
目標庫信息
選擇DMS數據庫實例
若您已將目標庫錄入至DMS中,可在此選擇,選擇后無需填寫下方的目標庫信息。若未錄入,請忽略該選項。
數據庫類型
將默認選擇Tair/Redis。
接入方式
選擇云實例。
實例地區
選擇目標實例的所屬地域。
實例ID
選擇目標實例ID。
認證方式
請根據實際情況選擇密碼登錄或免密登錄,本示例選擇密碼登錄。
說明若實例沒有開啟專有網絡免密訪問功能,請選擇密碼登錄。
數據庫密碼
填入連接目標數據庫的密碼。
說明數據庫密碼格式為<user>:<password>。例如,Redis實例自定義的用戶名為admin,密碼為Rp829dlwa,則此處填入的數據庫密碼為admin:Rp829dlwa。
配置任務對象,并單擊頁面下方的下一步高級配置。
配置
說明
遷移類型
根據實際情況選擇遷移類型。
全量遷移 + 增量遷移(默認):使用Redis原生同步邏輯,以內存快照方式將數據寫入到目標端,實現源庫不停機的遷移。
若對源庫沒有SYNC或PSYNC權限,請選擇全量遷移。
全量遷移:使用SCAN命令遍歷整個源端,將遍歷到的數據寫入到目標端。為保障數據一致性,請勿在遷移期間對源實例寫入新的數據。
目標已存在表的處理模式
預檢查并報錯攔截(默認):檢查目標庫中是否存在數據(Key)。
若存在,則在預檢查階段提示錯誤,且不會啟動遷移任務;若不存在,則通過。
忽略報錯并繼續執行:跳過目標庫對象數據存在性檢查項,若目標庫中已存在名稱相同的Key,則會被覆蓋。
源庫對象與已選擇對象
在源庫對象框中勾選待遷移對象,然后單擊將其移動至已選擇對象框。若您需要移除已選擇的對象,可以在已選擇對象框中單擊目標對象,然后單擊將其移動至源庫對象。
說明遷移對象的選擇粒度為庫(DB 0 ~ DB 255)。
進行高級配置,并單擊頁面下方的下一步數據校驗。
通常情況下,該配置項保持默認即可,更多信息請參見附錄:高級設置說明。
進行校驗配置,并單擊頁面下方的下一步保存任務并預檢查。
通常情況下,該配置項保持默認即可,更多信息請參見在DTS同步或遷移實例中配置數據校驗。
進行預檢查,完成后單擊下一步購買。
若預檢查產生警告或失敗項,請逐條確認。您可以單擊查看詳情,根據提示進行修復;您也可以單擊點擊確認告警詳情,忽略檢查項,但可能會產生數據不一致等問題,給業務帶來風險,更多信息請參見預檢查問題。完成上述操作后,請重新進行預檢查。
在購買頁配置信息,并單擊購買并啟動。
(可選)選擇DTS遷移鏈路所屬的資源組配置,默認為default resource group。
(可選)選擇DTS遷移鏈路的規格,規格越高,遷移速率越大,費用也越高,默認為large,更多信息請參見數據遷移鏈路規格說明。
閱讀并勾選服務條款。
購買后,遷移任務正式開始,您可在數據遷移界面查看具體進度。
后續步驟
若您使用了增量遷移,請您在完成遷移后,在控制臺手動結束或釋放該任務。
您可以進行數據校驗,更多信息請參見校驗遷移后的Redis數據。
相關文檔
如果您希望將云數據庫Tair(兼容Redis)實例的全量數據克隆至一個新的云數據庫Tair(兼容Redis)實例,可以考慮通過備份恢復的方式實現。通過備份恢復將數據克隆到新實例與通過DTS遷移數據的區別,請參見云數據庫 Tair(兼容 Redis)實例間數據遷移的方式對比。
詳細操作,請參見從備份集恢復至新實例和通過數據閃回按時間點恢復數據。
常見問題
為什么測試連接失敗?
請排查以下幾方面:
賬號密碼錯誤,Redis的密碼格式為
user:password
,更多信息請參見實例的登錄方式。若源庫為IDC自建數據庫或其他云數據庫,可能存在網絡防火墻,請您手動添加對應地區DTS服務的IP地址,以允許來自DTS服務器的訪問,更多信息請參見添加DTS服務器的IP地址段。
為什么會運行失?。?/p>
遷移期間,若對源庫和目標庫進行擴縮容、變配規格、變更連接地址等操作,會導致任務失敗,您需重新配置任務。
若目標實例內存空間不足,或目標實例為集群架構且某分片達到了內存上限,DTS任務會因內存溢出(Out of Memory)而失敗。
若目標實例已開啟透明數據加密TDE功能,則暫不支持通過DTS遷移數據。
為什么數據量不一致?
若源庫中的某些Key使用了過期(Expire)策略,由于可能存在Key已過期但未被及時刪除的情況,所以目標庫中的Key數量可能會比源庫少。
對于List列表,由于DTS在調用PSYNC或SYNC傳輸數據時,不會對目標端已有的數據執行FLUSH操作,所以可能出現重復的數據。
若在執行全量遷移過程中網絡中斷,DTS可能會執行多次全量遷移(會自動覆蓋同名Key),若在此時對源庫執行刪除操作,則該命令不會被同步到目標庫??赡軙斐赡繕藥齑笥谠磶斓那闆r。
Q:為什么無法選擇云數據庫Tair(兼容Redis) 2.8版本實例?
A:DTS不支持云數據庫Tair(兼容Redis) 2.8版本實例。
為什么會檢查Redis逐出策略是否為noeviction?
由于云數據庫 Tair(兼容 Redis)的默認數據逐出策略(maxmemory-policy)為volatile-lru,若目標數據庫內存不足,觸發數據逐出會導致目標庫與源庫數據不一致的情況,但不會影響任務的正常運行。為避免該情況發生,建議將目標庫的數據逐出策略設置為noeviction,當目標庫內存不足時,數據會寫入失敗,同時任務也會失敗,但目標庫不會因為數據逐出而丟失數據。關于數據逐出策略詳情,請參見Redis數據逐出策略介紹。
源庫中為什么會有DTS_REDIS_TIMESTAMP_HEARTBEAT?
為保障遷移、同步質量,DTS會在源庫中插入一個前綴為DTS_REDIS_TIMESTAMP_HEARTBEAT的Key用于記錄更新時間點,若源庫為集群架構,DTS會在各個shard上均插入該Key。DTS在執行任務過程中會過濾該Key,該Key會在任務結束時自動過期。
增量遷移支持哪些命令?
支持如下命令:
APPEND
BITOP、BLPOP、BRPOP、BRPOPLPUSH
DECR、DECRBY、DEL
EVAL、EVALSHA、EXEC、EXPIRE、EXPIREAT
FLUSHALL、FLUSHDB
GEOADD、GETSET
HDEL、HINCRBY、HINCRBYFLOAT、HMSET、HSET、HSETNX
INCR、INCRBY、INCRBYFLOAT
LINSERT、LPOP、LPUSH、LPUSHX、LREM、LSET、LTRIM
MOVE、MSET、MSETNX、MULTI
PERSIST、PEXPIRE、PEXPIREAT、PFADD、PFMERGE、PSETEX、PUBLISH
RENAME、RENAMENX、RESTORE、RPOP、RPOPLPUSH、RPUSH、RPUSHX
SADD、SDIFFSTORE、SELECT、SET、SETBIT、SETEX、SETNX、SETRANGE、SINTERSTORE、SMOVE、SPOP、SREM、SUNIONSTORE
ZADD、ZINCRBY、ZINTERSTORE、ZREM、ZREMRANGEBYLEX、ZUNIONSTORE、ZREMRANGEBYRANK、ZREMRANGEBYSCORE
XADD、XCLAIM、XDEL、XAUTOCLAIM、XGROUP CREATECONSUMER、XTRIM
對于通過EVAL或EVALSHA調用的Lua腳本,由于目標端在執行腳本時不會明確返回執行結果,DTS無法確認該類型腳本是否執行成功。