全部產品
Search
文件中心

Data Transmission Service:Redis企業版執行個體間的雙向同步

更新時間:Nov 20, 2024

Data Transmission Service支援Redis企業版執行個體間的雙向同步,適用於異地多活、資料容災等多種應用情境,本文介紹資料同步作業的配置流程。

前提條件

源和目標執行個體為Tair(企業版)執行個體(5.0版本)。

說明
  • 雲資料庫Tair(相容Redis)企業版(容量儲存型)不支援作為來源資料庫,只能作為目標資料庫。

  • 雲資料庫Tair(相容Redis)為企業版(持久記憶體型)為來源資料庫時,需要使用者開啟appendonly參數。

  • 架構類型不限制,即支援叢集版標準版讀寫分離版

注意事項

  • 雙向資料同步時,正向資料同步作業會執行全量資料初始化和增量資料同步,反向資料同步作業僅執行增量資料同步。

    警告

    雙向資料同步作業運行期間,請勿在兩端資料庫同時對同一個key執行修改或寫入操作,否則可能會導致資料不一致。

  • DTS在執行全量資料初始化時將佔用源庫和目標庫一定的資源,可能會導致資料庫伺服器負載上升。如果資料庫業務量較大或伺服器規格較低,可能會加重資料庫壓力,甚至導致資料庫服務不可用。建議您在執行資料移轉前謹慎評估,在業務低峰期執行資料同步。

  • 請勿在源執行個體中執行FLUSHDBFLUSHALL命令,否則將導致源和目標的資料不一致。

  • 若目標資料庫記憶體不足,觸發資料逐出時,由於雲資料庫 Tair(相容 Redis)的預設資料逐出策略(maxmemory-policy)為volatile-lru,會導致目標庫與源庫資料不一致的情況,但不會影響任務的正常運行。

    為避免該情況發生,建議將目標庫的資料逐出原則設定為noeviction,當目標庫記憶體不足時,資料會寫入失敗,同時任務也會失敗,但目標庫不會因為資料逐出而遺失資料。

    說明

    關於資料逐出策略詳情,請參見Redis資料逐出策略介紹

  • 如果源庫中的某些Key使用了到期(expire)策略,由於可能存在Key已到期但未被及時刪除的情況,所以在目標庫中查看到的Key數量(例如通過info命令查看)會比源庫的Key數量少。

    說明

    源和目標庫中,未設定到期策略或未到期的Key數量是一致的。

  • 如果目標Redis執行個體沒有開通直連訪問,DTS將採用代理轉寄模式將資料寫入目標執行個體。

    說明

    關於直連訪問的開通方法,請參見開通直連訪問

  • 同步期間,如源和目標Redis執行個體發生擴縮容(如增加或者減少分區)、規格變更配置(如擴大記憶體)、則您需重新設定任務。且為保障資料一致性,在重新設定任務前,建議先清空已同步至源和目標Redis的資料。

  • 同步期間,如源和目標Redis執行個體的串連地址變化(如遷移可用性區域、傳統網路切換專用網路),則您需要重新設定任務。

  • 源庫單機版Redis同步到目標庫叢集版Redis的操作限制:由於叢集cluster只允許單個命令操作單個slot,若在源庫執行多Key操作時,Key不在同一個slot或涉及多個slot,則會出現以下報錯:

    CROSSSLOT Keys in request don't hash to the same slot

    建議在DTS同步過程中僅執行單Key操作,以免導致鏈路中斷。

  • 若目標執行個體的架構類型為叢集版且某一個分區達到了記憶體上限,或目標執行個體的儲存空間不足時,DTS任務會因記憶體溢出(Out of Memory)而失敗。

  • 若源或目標執行個體已開啟透明資料加密TDE功能,則暫不支援通過DTS同步資料。

  • 雙向同步執行個體包含正向和反向同步任務,在配置或重設雙向同步執行個體時,若其中一個任務的目標對象是另一個任務待同步的對象:

    • 僅允許其中一個任務同步全量和增量資料,另一個任務僅支援同步增量資料。

    • 當前任務的來源資料僅支援同步到當前任務的目標端,同步過來的資料不會作為另一個任務的來源資料繼續同步。

費用說明

同步類型鏈路配置費用
庫表結構同步和全量資料同步不收費。
增量資料同步收費,詳情請參見計費概述

支援的同步命令

  • 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、RPOP、RPOPLPUSH、RPUSH、RPUSHX

  • SADD、SDIFFSTORE、SELECT、SET、SETBIT、SETEX、SETNX、SETRANGE、SINTERSTORE、SMOVE、SPOP、SREM、SUNIONSTORE

  • UNLINK、ZADD、ZINCRBY、ZINTERSTORE、ZREM、ZREMRANGEBYLEX、ZUNIONSTORE、ZREMRANGEBYRANK、ZREMRANGEBYSCORE

  • SWAPDB(當源或目標執行個體的架構為叢集版時不支援)

重要
  • 不支援同步PUBLISH命令。

  • 對於通過EVAL或者EVALSHA調用Lua指令碼,在增量資料同步時,由於目標端在執行指令碼時不會明確返回執行結果,DTS無法確保該類型指令碼能夠執行成功。

  • 對於List,由於DTS在調用sync或psync進行重傳時,不會對目標端已有的資料進行清空,可能導致出現重複資料。

資料庫帳號的許可權要求

資料庫

許可權及授權方式

源Redis執行個體

讀寫權限,關於授權方式,請參見建立與管理帳號

目標Redis執行個體

操作步驟

  1. 購買資料同步作業,詳情請參見購買流程

    重要

    購買時選擇源執行個體為Redis、目標執行個體為Redis,並選擇同步拓撲為雙向同步

  2. 登入資料轉送控制台

    說明

    若資料轉送控制台自動跳轉至Data Management控制台,您可以在右下角的jiqiren中單擊返回舊版,返回至舊版資料轉送控制台。

  3. 在左側導覽列,單擊資料同步

  4. 同步作業列表頁面頂部,選擇同步的目標執行個體所屬地區。

  5. 配置正向同步作業。

    1. 定位至已購買的資料同步執行個體,單擊該執行個體下第一個同步作業操作列的配置同步鏈路

      重要

      一個雙向資料同步執行個體會包含兩個同步作業,需要分別進行配置。在配置反向同步作業時,定位至第二個同步作業,單擊操作列的配置同步鏈路

      雙向同步任務

    2. 配置同步作業的源執行個體及目標執行個體資訊。

      配置源和目標執行個體資訊

      類別

      配置

      說明

      同步作業名稱

      DTS會自動產生一個同步作業名稱,建議配置具有業務意義的名稱(無唯一性要求),便於後續識別。

      源執行個體資訊

      執行個體類型

      選擇Redis執行個體

      執行個體地區

      購買資料同步執行個體時選擇的源執行個體地區,不可變更。

      執行個體ID

      選擇源Redis執行個體ID。

      重要

      稍後配置反向同步作業時,此處需選擇為正向同步作業裡的目標Redis執行個體ID。

      資料庫密碼

      填入Redis執行個體的資料庫帳號密碼。帳號許可權,請參見資料庫帳號的許可權要求

      重要

      資料庫密碼格式為<user>:<password>。例如,Redis執行個體自訂的使用者名稱為admin,密碼為Rp829dlwa,則此處填入的資料庫密碼為admin:Rp829dlwa。

      目標執行個體資訊

      執行個體類型

      選擇Redis執行個體

      執行個體地區

      購買資料同步執行個體時選擇的目標執行個體地區,不可變更。

      執行個體ID

      選擇目標Redis執行個體ID。

      重要

      稍後配置反向同步作業時,此處需選擇為正向同步作業裡的源Redis執行個體ID。

      資料庫密碼

      填入Redis執行個體的資料庫帳號密碼。 帳號許可權,請參見資料庫帳號的許可權要求

      重要

      資料庫密碼格式為<user>:<password>。例如,Redis執行個體自訂的使用者名稱為admin,密碼為Rp829dlwa,則此處填入的資料庫密碼為admin:Rp829dlwa。

    3. 單擊頁面右下角的授權白名單並進入下一步

      說明
      • 如果源或目標資料庫是阿里雲資料庫執行個體(例如RDS MySQLApsaraDB for MongoDB等)或ECS上的自建資料庫,DTS會自動將對應地區DTS服務的IP地址添加到阿里雲資料庫執行個體的白名單或ECS的安全規則中,您無需手動添加,請參見DTS伺服器的IP位址區段

      • DTS任務完成或釋放後,建議您手動刪除添加的DTS伺服器IP位址區段。

    4. 配置同步策略和同步對象。

      Redis雙向同步選擇對象

      類別

      配置

      說明

      同步策略

      衝突修複策略

      Overwrite(遇到衝突,直接覆蓋目標執行個體中的衝突記錄)

      當資料同步期間遇到Key相同但值不同時,Key的值更新時間晚的資料會覆蓋衝突的記錄。

      目標已存在表的處理模式

      • 預檢查並報錯攔截:檢查目標庫是否為空白。如果待同步的目標庫為空白,則通過該檢查專案;如果不為空白,則在預檢查階段提示錯誤,資料同步作業不會被啟動。

      • 忽略報錯並繼續執行:跳過目標庫是否為空白的檢查項。

        警告

        選擇為忽略報錯並繼續執行後,如果在同步初始化期間遇到目標庫中的Key與源庫中的Key相同,會將源庫的資料覆蓋寫入目標庫中,請謹慎選擇。

      選擇同步對象

      • 源庫對象框中單擊待同步的資料庫,然後單擊向右箭頭將其移動到已選擇對象框。

      • 同步對象的選擇粒度為庫,暫不支援Key粒度的選擇。

      映射名稱更改

      不支援更改映射名稱。

      源表DMS_ONLINE_DDL過程中是否複製暫存資料表到目標庫

      如源庫使用Data Management(Data Management)執行Online DDL變更,您可以選擇是否同步Online DDL變更產生的暫存資料表資料。

      • :同步Online DDL變更產生的暫存資料表資料。

        說明

        Online DDL變更產生的暫存資料表資料過大,可能會導致同步任務延遲。

      • :不同步Online DDL變更產生的暫存資料表資料,只同步源庫的原始DDL資料。

        說明

        該方案會導致目標庫鎖表。

      源、目標庫無法串連重試時間

      當源、目標庫無法串連時,DTS預設重試720分鐘(即12小時),您也可以自訂重試時間。如果DTS在設定的時間內重新串連上源、目標庫,同步任務將自動回復。否則,同步任務將失敗。

      說明

      由於串連重試期間,DTS將收取任務運行費用,建議您根據業務需要自訂重試時間,或者在源和目標庫執行個體釋放後儘快釋放DTS執行個體。

    5. 上述配置完成後,單擊頁面右下角的下一步

    6. 配置同步初始化的選項。

      Redis雙向同步初始化配置

      當前固定為包含全量資料+增量資料,DTS會將源Redis執行個體中同步對象的存量資料初始化至目標Redis執行個體,並同步增量資料。

      重要
      • 在配置反向同步作業時,如果同步對象已經初始化至目標執行個體,則直接同步處理增量資料。

      • 如果跳出版本相關的報錯提示,請您按照提示將源Redis執行個體升級至指定版本。關於升級版本方式,請參見升級大版本升級小版本與代理版本

    7. 上述配置完成後,單擊頁面右下角的預檢查並啟動

      說明
      • 在同步作業正式啟動之前,會先進行預檢查。只有預檢查通過後,才能成功啟動同步作業。

      • 如果預檢查失敗,單擊具體檢查項後的提示,查看失敗詳情。

        • 您可以根據提示修複後重新進行預檢查。

        • 如無需修複警示檢測項,您也可以選擇確認屏蔽忽略警示項並重新進行預檢查,跳過警示檢測項重新進行預檢查。

    8. 預檢查對話方塊中顯示預檢查通過後,關閉預檢查對話方塊,正向同步作業將正式開始。

  6. 等待正向同步作業完成初始化,直至處於同步中狀態。

    您可以在資料同步頁面,查看資料同步作業的狀態。

  7. 配置反向同步作業。

    1. 定位至第二個同步作業,單擊配置同步鏈路

      Redis配置反向同步作業

    2. 重複步驟5中的配置步驟,完成反向同步作業的配置。

執行結果

等待一段時間後,兩個同步作業的鏈路狀態均會處於同步中Redis雙向同步配置完成