Data Transmission Service支援Tair(企業版)執行個體間的雙向同步,適用於異地多活、資料容災等多種應用情境,本文介紹資料同步作業的配置流程。
功能概述
雙向同步功能需要您依次配置兩條同步鏈路,分別為正向資料同步任務、反向資料同步任務。在正向資料同步任務中會執行全量遷移和增量同步處理,但反向資料同步任務僅執行增量資料同步。
全量遷移:DTS將源庫的存量資料全部遷移到目標庫中,全量遷移不收費。
增量同步處理:在全量遷移的基礎上,DTS將源庫的累加式更新即時地同步到目標庫中。增量遷移會根據使用時間長度產生費用(與遷移的資料量無關),更多資訊請參見計費項目。
雙向資料同步任務運行期間,請勿在兩端資料庫同時對同一個Key執行修改或寫入操作,否則可能會導致資料不一致。
前提條件
源和目標執行個體為Tair(企業版)執行個體。
Tair(企業版)磁碟型不支援雙向同步。
當Tair持久記憶體型為來源資料庫時,請手動開啟appendonly參數。
注意事項
遷移期間,請勿對源庫和目標庫進行擴縮容、變更配置規格、變更串連地址等操作,否則會導致任務失敗,您需重新設定任務。同時,執行遷移操作會佔用源庫和目標庫資源,建議您在業務低峰期執行。
如雙向同步任務的源執行個體或目標執行個體位于海外地區,則僅支援同地區的雙向同步,不支援跨地區的雙向同步。例如,支援日本地區間的雙向同步,不支援日本地區與法蘭克福地區間的雙向同步。
雙向同步執行個體包含正向和反向同步任務,在配置或重設雙向同步執行個體時,若其中一個任務的目標對象是另一個任務待同步的對象:
僅允許其中一個任務同步全量和增量資料,另一個任務僅支援同步增量資料。
當前任務的來源資料僅支援同步到當前任務的目標端,同步過來的資料不會作為另一個任務的來源資料繼續同步。
操作步驟
進入資料同步任務的列表頁面。
在頂部功能表列中,單擊整合與開發。
在左側導覽列,選擇 。
單擊建立任務。
配置源庫及目標庫資訊,並單擊頁面下方的測試連接以進行下一步。
類別
配置
說明
無
任務名稱
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無法確保該類型指令碼能夠執行成功。