全部產品
Search
文件中心

Tair (Redis® OSS-Compatible):Tair執行個體間的雙向同步

更新時間:Jan 03, 2025

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

功能概述

雙向同步功能需要您依次配置兩條同步鏈路,分別為正向資料同步任務、反向資料同步任務。在正向資料同步任務中會執行全量遷移增量同步處理,但反向資料同步任務僅執行增量資料同步。

  • 全量遷移:DTS將源庫的存量資料全部遷移到目標庫中,全量遷移不收費。

  • 增量同步處理:在全量遷移的基礎上,DTS將源庫的累加式更新即時地同步到目標庫中。增量遷移會根據使用時間長度產生費用(與遷移的資料量無關),更多資訊請參見計費項目

警告

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

前提條件

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

說明
  • Tair(企業版)磁碟型不支援雙向同步。

  • Tair持久記憶體型為來源資料庫時,請手動開啟appendonly參數。

注意事項

  • 遷移期間,請勿對源庫和目標庫進行擴縮容、變更配置規格、變更串連地址等操作,否則會導致任務失敗,您需重新設定任務。同時,執行遷移操作會佔用源庫和目標庫資源,建議您在業務低峰期執行。

  • 如雙向同步任務的源執行個體或目標執行個體位于海外地區,則僅支援同地區的雙向同步,不支援跨地區的雙向同步。例如,支援日本地區間的雙向同步,不支援日本地區與法蘭克福地區間的雙向同步。

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

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

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

操作步驟

  1. 進入資料同步任務的列表頁面。

    1. 登入Data Management服務

    2. 在頂部功能表列中,單擊整合與開發

    3. 在左側導覽列,選擇資料轉送(DTS) > 資料同步

  2. 單擊建立任務

  3. 配置源庫及目標庫資訊,並單擊頁面下方的測試連接以進行下一步

    類別

    配置

    說明

    任務名稱

    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。

  4. 配置任務對象,並單擊頁面下方的下一步進階配置

    配置

    說明

    同步類型

    請按需選擇是否開啟全量同步,但固定選中增量同步處理

    同步拓撲

    選擇雙向同步

    目標已存在表的處理模式

    • 預檢查並報錯攔截(預設):檢查目標庫中是否存在資料(Key)。

      若存在,則在預檢查階段提示錯誤,且不會啟動遷移任務;若不存在,則通過。

    • 忽略報錯並繼續執行:跳過目標庫對象資料存在性檢查項,若目標庫中已存在名稱相同的Key,則會被覆蓋。

    源庫對象已選擇對象

    源庫對象框中勾選待同步的對象,然後單擊image.png將其移動至已選擇對象框。若您需要移除已選擇的對象,可以在已選擇對象框中單擊目標對象,然後單擊image.png將其移動至源庫對象

    說明

    遷移對象的選擇粒度為庫(DB 0 ~ DB 255)。

  5. 進行進階配置,並單擊頁面下方的下一步資料校正

    通常情況下,該配置項保持預設即可,更多資訊請參見附錄:進階設定說明

  6. 進行校正配置,並單擊頁面下方的下一步儲存任務並預檢查

    通常情況下,該配置項保持預設即可,更多資訊請參見在DTS同步或遷移執行個體中配置資料校正

  7. 進行預檢查,完成後單擊下一步購買

    若預檢查產生警告失敗項,請逐條確認。您可以單擊查看詳情,根據提示進行修複;您也可以單擊點擊確認警示詳情,忽略檢查項,但可能會產生資料不一致等問題,給業務帶來風險,更多資訊請參見預檢查問題。完成上述操作後,請重新進行預檢查。

  8. 購買頁配置資訊,並單擊購買並啟動

    • (可選)選擇DTS遷移鏈路所屬的資源群組配置,預設為default resource group

    • (可選)選擇DTS遷移鏈路的規格,規格越高,遷移速率越大,費用也越高,預設為large,更多資訊請參見資料同步鏈路規格說明

    • 閱讀並勾選服務條款。

    購買後,遷移任務正式開始,您可以在資料移轉介面查看具體進度。

  9. 等待正向同步任務的運行狀態運行中,單擊下方反向任務的配置任務

  10. 參考上述步驟,配置反向任務。

    預檢查通過率顯示為100%時,表示配置完成,此時您可以單擊返回列表

  11. 在資料同步列表中,當正向、反向同步任務的運行狀態均處於運行中時,表示雙向資料同步配置成功。

常見問題

  • 為什麼測試連接失敗?

    請排查以下幾方面:

    • 帳號密碼錯誤,Redis的密碼格式為user:password,更多資訊請參見執行個體的登入方式

    • 若源庫為IDC自建資料庫或其他雲資料庫,可能存在網路防火牆,請您手動添加對應地區DTS服務的IP地址,以允許來自DTS伺服器的訪問,更多資訊請參見添加DTS伺服器的IP位址區段

  • 為什麼會運行失敗?

    • 遷移期間,若對源庫和目標庫進行擴縮容、變更配置規格、變更串連地址等操作,會導致任務失敗,您需重新設定任務。

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

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

  • 為什麼資料量不一致?

    • 若源庫中的某些Key使用了到期(Expire)策略,由於可能存在Key已到期但未被及時刪除的情況,所以目標庫中的Key數量可能會比源庫少。

    • 對於List列表,由於DTS在調用PSYNCSYNC傳輸資料時,不會對目標端已有的資料執行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無法確保該類型指令碼能夠執行成功。