本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
數據傳輸服務DTS(Data Transmission Service)支持Tair(企業版)實例間的雙向同步,適用于異地多活、數據容災等多種應用場景,本文介紹數據同步作業的配置流程。
本文通過控制臺來完成配置,您也可以通過調用OpenAPI來完成配置,詳情請參見調用OpenAPI配置Redis企業版實例間單向或雙向數據同步。
功能概述
雙向同步功能需要您依次配置兩條同步鏈路,分別為正向數據同步任務、反向數據同步任務。在正向數據同步任務中會執行全量遷移和增量同步,但反向數據同步任務僅執行增量數據同步。
全量遷移:DTS將源庫的存量數據全部遷移到目標庫中,全量遷移不收費。
增量同步:在全量遷移的基礎上,DTS將源庫的增量更新實時地同步到目標庫中。增量遷移會根據使用時長產生費用(與遷移的數據量無關),更多信息請參見計費項。
雙向數據同步任務運行期間,請勿在兩端數據庫同時對同一個Key執行修改或寫入操作,否則可能會導致數據不一致。
前提條件
源和目標實例為Tair(企業版)實例。
Tair(企業版)磁盤型不支持雙向同步。
當Tair持久內存型為源數據庫時,請手動開啟appendonly參數。
注意事項
遷移期間,請勿對源庫和目標庫進行擴縮容、變配規格、變更連接地址等操作,否則會導致任務失敗,您需重新配置任務。同時,執行遷移操作會占用源庫和目標庫資源,建議您在業務低峰期執行。
如雙向同步任務的源實例或目標實例位于海外地域,則僅支持同地域的雙向同步,不支持跨地域的雙向同步。例如,支持日本地域間的雙向同步,不支持日本地域與法蘭克福地域間的雙向同步。
雙向同步實例包含正向和反向同步任務,在配置或重置雙向同步實例時,若其中一個任務的目標對象是另一個任務待同步的對象:
僅允許其中一個任務同步全量和增量數據,另一個任務僅支持同步增量數據。
當前任務的源數據僅支持同步到當前任務的目標端,同步過來的數據不會作為另一個任務的源數據繼續同步。
操作步驟
進入數據同步任務的列表頁面。
登錄DMS數據管理服務。
在頂部菜單欄中,單擊集成與開發。
在左側導航欄,選擇 。
單擊創建任務。
配置源庫及目標庫信息,并單擊頁面下方的測試連接以進行下一步。
類別
配置
說明
無
任務名稱
DTS會自動生成一個任務名稱,建議配置具有業務意義的名稱(無唯一性要求),便于后續識別。
源庫信息
選擇DMS數據庫實例
若您已將源庫錄入至DMS中,可在此選擇,選擇后無需填寫下方的源庫信息。若未錄入,請忽略該選項。
數據庫類型
選擇Tair/Redis。
接入方式
選擇云實例。
實例地區
選擇實例所屬的地域。
是否跨阿里云賬號
本示例為同一阿里云賬號間的遷移,選擇不跨賬號。
實例ID
選擇源實例ID。
認證方式
請根據實際情況選擇密碼登錄或免密登錄,本示例選擇密碼登錄。
說明若實例沒有開啟專有網絡免密訪問功能,請選擇密碼登錄。
數據庫密碼
填入用于連接源實例的賬號密碼。
說明非必填項,若沒有設置密碼可以不填。
若使用自定義賬號,該賬號需要具有讀權限,賬號、密碼的格式為<user>:<password>。例如,實例自定義的賬號為admin,密碼為Rp829dlwa,則此處填入的數據庫密碼為admin:Rp829dlwa。
目標庫信息
選擇DMS數據庫實例
若您已將目標庫錄入至DMS中,可在此選擇,選擇后無需填寫下方的目標庫信息。若未錄入,請忽略該選項。
數據庫類型
將默認選擇Tair/Redis。
接入方式
選擇云實例。
實例地區
選擇目標實例的所屬地域。
實例ID
選擇目標實例ID。
認證方式
請根據實際情況選擇密碼登錄或免密登錄,本示例選擇密碼登錄。
說明若實例沒有開啟專有網絡免密訪問功能,請選擇密碼登錄。
數據庫密碼
填入連接目標數據庫的密碼。
說明若使用自定義賬號,該賬號需要具有寫權限,賬號、密碼格式為<user>:<password>。例如,實例自定義的賬號為admin,密碼為Rp829dlwa,則此處填入的數據庫密碼為admin:Rp829dlwa。
配置任務對象,并單擊頁面下方的下一步高級配置。
配置
說明
同步類型
請按需選擇是否開啟全量同步,但固定選中增量同步。
同步拓撲
選擇雙向同步。
目標已存在表的處理模式
預檢查并報錯攔截(默認):檢查目標庫中是否存在數據(Key)。
若存在,則在預檢查階段提示錯誤,且不會啟動遷移任務;若不存在,則通過。
忽略報錯并繼續執行:跳過目標庫對象數據存在性檢查項,若目標庫中已存在名稱相同的Key,則會被覆蓋。
源庫對象與已選擇對象
在源庫對象框中勾選待同步的對象,然后單擊將其移動至已選擇對象框。若您需要移除已選擇的對象,可以在已選擇對象框中單擊目標對象,然后單擊將其移動至源庫對象。
說明遷移對象的選擇粒度為庫(DB 0 ~ DB 255)。
進行高級配置,并單擊頁面下方的下一步數據校驗。
通常情況下,該配置項保持默認即可,更多信息請參見附錄:高級設置說明。
進行校驗配置,并單擊頁面下方的下一步保存任務并預檢查。
通常情況下,該配置項保持默認即可,更多信息請參見在DTS同步或遷移實例中配置數據校驗。
進行預檢查,完成后單擊下一步購買。
若預檢查產生警告或失敗項,請逐條確認。您可以單擊查看詳情,根據提示進行修復;您也可以單擊點擊確認告警詳情,忽略檢查項,但可能會產生數據不一致等問題,給業務帶來風險,更多信息請參見預檢查問題。完成上述操作后,請重新進行預檢查。
在購買頁配置信息,并單擊購買并啟動。
(可選)選擇DTS遷移鏈路所屬的資源組配置,默認為default resource group。
(可選)選擇DTS遷移鏈路的規格,規格越高,遷移速率越大,費用也越高,默認為large,更多信息請參見數據同步鏈路規格說明。
閱讀并勾選服務條款。
購買后,遷移任務正式開始,您可以在數據遷移界面查看具體進度。
等待正向同步任務的運行狀態為運行中,單擊下方反向任務的配置任務。
參考上述步驟,配置反向任務。
當預檢查通過率顯示為100%時,表示配置完成,此時您可以單擊返回列表。
在數據同步列表中,當正向、反向同步任務的運行狀態均處于運行中時,表示雙向數據同步配置成功。
常見問題
為什么測試連接失敗?
請排查以下幾方面:
賬號密碼錯誤,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數據逐出策略介紹。
為什么會報錯
CROSSSLOT Keys in request don't hash to the same slot
?若目標為集群架構實例,Redis存在限制:不支持在單個命令中執行跨Slot的操作。建議在DTS同步過程中僅執行單Key操作,以免導致鏈路中斷。
支持同步哪些命令?
支持如下命令:
APPEND
BITOP、BLPOP、BRPOP、BRPOPLPUSH
DECR、DECRBY、DEL
EVAL、EVALSHA、EXEC、EXPIRE、EXPIREAT
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
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
SWAPDB、UNLINK(僅當源端Redis實例的版本為4.0時支持)
XADD、XCLAIM、XDEL、XAUTOCLAIM、XGROUP CREATECONSUMER、XTRIM
不支持同步PUBLISH命令。
對于通過EVAL或者EVALSHA調用Lua腳本,在增量數據同步時,由于目標端在執行腳本時不會明確返回執行結果,DTS無法確保該類型腳本能夠執行成功。