若您希望遷移部署在本地、ECS或其他云上的Redis數據庫至云數據庫 Tair(兼容 Redis),且不影響業務正常運行,您可以使用數據傳輸服務DTS。DTS可以在不中斷數據庫服務的同時,將數據全量或者增量遷移至云數據庫 Tair(兼容 Redis)。該方案相比使用AOF方式遷移,具有更高的性能和安全性。
功能概述
全量遷移
DTS將源庫的存量數據全部遷移到目標庫中,全量遷移不收費。
增量遷移
在全量遷移的基礎上,DTS將源庫的增量更新實時地同步到目標庫中。若需執行增量遷移,請確保可在源庫中正常執行
PSYNC
或SYNC
命令,否則只能進行全量遷移。增量遷移會根據使用時長產生費用(與遷移的數據量無關),更多信息請參見計費項。說明為保障正常執行增量遷移,建議您關閉源庫復制輸出緩沖區的限制,設置方法:連接源庫,執行
CONFIG SET client-output-buffer-limit 'slave 0 0 0'
。
前提條件
已創建云數據庫 Tair(兼容 Redis)實例,且該實例規格需大于自建Redis已使用的內存。更多信息請參見創建實例。
建議目標數據庫總內存比源庫的內存占用大10%以上。若因為目標數據庫內存不足,可能會導致數據不一致、任務失敗等問題,您需要清空目標數據庫并重新配置任務。
注意事項
遷移期間,請勿對源庫和目標庫進行擴縮容、變配規格、變更連接地址等操作,否則會導致任務失敗,您需重新配置任務。同時,執行遷移操作會占用源庫和目標庫資源,建議您在業務低峰期執行。
操作步驟
進入遷移任務的列表頁面。
登錄DMS數據管理服務。
在頂部菜單欄中,單擊集成與開發。
在左側導航欄,選擇 。
單擊創建任務。
配置源庫及目標庫信息,并單擊頁面下方的測試連接以進行下一步。
類別
配置
說明
無
任務名稱
DTS會自動生成一個任務名稱,建議配置具有業務意義的名稱(無唯一性要求),便于后續識別。
源庫信息
選擇DMS數據庫實例
若您已將源庫錄入至DMS中,可在此選擇,選擇后無需填寫下方的源庫信息。若未錄入,請忽略該選項。
數據庫類型
選擇Tair/Redis。
接入方式
根據源庫的部署位置進行選擇,若實例在本地IDC或其他云,請選擇公網IP。
本示例選擇ECS自建數據庫。
實例地區
選擇ECS實例所屬的地域,若實例在本地IDC或其他云,請選擇就近源庫的地域。
是否跨阿里云賬號
本示例為同一阿里云賬號間的遷移,選擇不跨賬號。
ECS實例ID
選擇源庫所在的ECS實例ID。
說明若源庫為集群架構時,選擇任意節點的Master所在的ECS實例ID。
實例模式
根據源庫的架構選擇:
單機版:標準架構(主從)。
集群版:集群架構。若源庫為集群架構時,在端口參數中填入任一Master節點的端口號。
端口
填入源Redis數據庫的端口,默認為6379。
認證方式
請根據實際情況選擇密碼登錄或免密登錄。
說明若自建Redis數據庫沒有設置密碼,您可以選擇免密登錄。
數據庫密碼
填入用于連接源Redis數據庫的密碼。
說明非必填項,若沒有設置密碼可以不填。
若使用自定義賬號,該賬號需要具有讀權限,賬號、密碼的格式為<user>:<password>。例如,Redis實例自定義的賬號為admin,密碼為Rp829dlwa,則此處填入的數據庫密碼為admin:Rp829dlwa。
連接方式
請根據實際情況選擇非加密連接或SSL安全連接。
說明若自建Redis(接入方式不是云實例)且選擇了SSL安全連接,您還需要上傳CA 證書并填寫CA 密鑰。
目標庫信息
選擇DMS數據庫實例
若您已將目標庫錄入至DMS中,可在此選擇,選擇后無需填寫下方的目標庫信息。若未錄入,請忽略該選項。
數據庫類型
將默認選擇Tair/Redis。
接入方式
選擇云實例。
實例地區
選擇目標實例的所屬地域。
實例ID
選擇目標實例ID。
認證方式
請根據實際情況選擇密碼登錄或免密登錄,本示例選擇密碼登錄。
說明若云數據庫Tair(兼容Redis)實例沒有開啟專有網絡免密訪問功能,請選擇密碼登錄。
數據庫密碼
填入連接目標數據庫的密碼。
說明若使用自定義賬號,該賬號需要具有寫權限,賬號、密碼格式為<user>:<password>。例如,Redis實例自定義的賬號為admin,密碼為Rp829dlwa,則此處填入的數據庫密碼為admin:Rp829dlwa。
連接方式
請根據實際情況選擇非加密連接或SSL安全連接。
配置任務對象,并單擊頁面下方的下一步高級配置。
配置
說明
遷移類型
根據實際情況選擇遷移類型。
全量遷移 + 增量遷移(默認):使用Redis原生同步邏輯,以內存快照方式將數據寫入到目標端,實現源庫不停機的遷移。
若對源庫沒有SYNC或PSYNC權限,請選擇全量遷移。
全量遷移:使用SCAN命令遍歷整個源端,將遍歷到的數據寫入到目標端。為保障數據一致性,請勿在遷移期間對源實例寫入新的數據。
目標已存在表的處理模式
預檢查并報錯攔截(默認):檢查目標庫中是否存在數據(Key)。
若存在,則在預檢查階段提示錯誤,且不會啟動遷移任務;若不存在,則通過。
忽略報錯并繼續執行:跳過目標庫對象數據存在性檢查項,若目標庫中已存在名稱相同的Key,則會被覆蓋。
源庫對象與已選擇對象
在源庫對象框中勾選待遷移對象,然后單擊將其移動至已選擇對象框。若您需要移除已選擇的對象,可以在已選擇對象框中單擊目標對象,然后單擊將其移動至源庫對象。
說明遷移對象的選擇粒度為庫(DB 0 ~ DB 255)。
進行高級配置,并單擊頁面下方的下一步數據校驗。
通常情況下,該配置項保持默認即可,更多信息請參見附錄:高級設置說明。
進行校驗配置,并單擊頁面下方的下一步保存任務并預檢查。
通常情況下,該配置項保持默認即可,更多信息請參見在DTS同步或遷移實例中配置數據校驗。
進行預檢查,完成后單擊下一步購買。
若預檢查產生警告或失敗項,請逐條確認。您可以單擊查看詳情,根據提示進行修復;您也可以單擊點擊確認告警詳情,忽略檢查項,但可能會產生數據不一致等問題,給業務帶來風險,更多信息請參見預檢查問題。完成上述操作后,請重新進行預檢查。
在購買頁配置信息,并單擊購買并啟動。
(可選)選擇DTS遷移鏈路所屬的資源組配置,默認為default resource group。
(可選)選擇DTS遷移鏈路的規格,規格越高,遷移速率越大,費用也越高,默認為large,更多信息請參見數據遷移鏈路規格說明。
閱讀并勾選服務條款。
購買后,遷移任務正式開始,您可在數據遷移界面查看具體進度。
后續步驟
若您使用了增量遷移,請您在完成遷移后,在控制臺手動結束或釋放該任務。
您可以進行數據校驗,更多信息請參見校驗遷移后的Redis數據。
相關文檔
若您的數據庫無需在線遷移,您可以通過輕量級工具redis-cli,導入AOF文件進行數據遷移,更多信息請參見使用AOF文件進行遷移。
常見問題
為什么測試連接失敗?
請排查以下幾方面:
賬號密碼錯誤,Redis的密碼格式為
user:password
,更多信息請參見實例的登錄方式。若源庫為IDC自建數據庫或其他云數據庫,可能存在網絡防火墻,請您手動添加對應地區DTS服務的IP地址,以允許來自DTS服務器的訪問,更多信息請參見添加DTS服務器的IP地址段。
為什么會運行失敗?
遷移期間,若對源庫和目標庫進行擴縮容、變配規格、變更連接地址等操作,會導致任務失敗,您需重新配置任務。
若目標實例內存空間不足,或目標實例為集群架構且某分片達到了內存上限,DTS任務會因內存溢出(Out of Memory)而失敗。
若目標實例已開啟透明數據加密TDE功能,則暫不支持通過DTS遷移數據。
為什么數據量不一致?
若源庫中的某些Key使用了過期(Expire)策略,由于可能存在Key已過期但未被及時刪除的情況,所以目標庫中的Key數量可能會比源庫少。
對于List列表,由于DTS在調用PSYNC或SYNC傳輸數據時,不會對目標端已有的數據執行FLUSH操作,所以可能出現重復的數據。
若在執行全量遷移過程中網絡中斷,DTS可能會執行多次全量遷移(會自動覆蓋同名Key),若在此時對源庫執行刪除操作,則該命令不會被同步到目標庫。可能會造成目標庫大于源庫的情況。
為什么會檢查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無法確認該類型腳本是否執行成功。
附錄:高級設置說明
配置 | 說明 |
源庫、目標庫無法連接后的重試時間 | 在遷移任務連接失敗時,DTS持續地進行重試,默認重試時間為720分鐘,取值范圍為10~1440分鐘。若DTS在重試時間內恢復連接,遷移任務將自動恢復。否則,遷移任務將失敗。建議您根據業務需求自定義重試時間,建議設置30分鐘以上。 重試期間,DTS將正常計費。 |
源庫、目標庫出現其他問題后的重試時間 | 在遷移期間,若源庫或目標庫出現非連接性的其他問題,DTS會報錯并持續地進行重試,默認重試時間為10分鐘,取值范圍為10~1440分鐘。若DTS在重試時間內成功執行相關操作,遷移任務將自動恢復。否則,遷移任務將會失敗。建議設置10分鐘以上。 |
是否限制增量遷移速率 | 增量數據寫入時,可能會導致目標端的負載上升。您可以根據實際情況,選擇是否對增量遷移進行限速設置(設置每秒增量遷移的行數和數據量),以緩解目標端的壓力。默認為否。 |
環境標簽 | 您可以根據實際情況,選擇用于標識實例的環境標簽。 |
延長目標庫key的過期時間 | 在目標庫中,對已設置過期時間的Key,延長過期時間,默認為1800s。若遷移時Key已過期,則不會被遷移至目標庫。 |
使用Slave節點 | 當源自建Redis的實例模式為集群版時,您可以選擇是否從Slave節點讀取數據,默認為否,即從Master讀取數據。 |
配置ETL功能 | 選擇是否配置ETL功能。關于ETL的更多信息,請參見什么是ETL。
|
監控報警 | 是否設置告警,當同步失敗或延遲超過閾值后,將通知告警聯系人。
|