本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

執行個體間的單向資料同步

更新時間:2025-01-02 19:13

Data Transmission Service支援Tair (Redis OSS-compatible)資料庫的單向同步,適用於異地多活、資料異地容災等多種應用情境。本文以Tair (Redis OSS-compatible)執行個體間的單向資料同步為例,介紹資料同步作業的配置流程。

功能概述

  • 全量遷移

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

  • 增量同步處理

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

前提條件

已建立Tair (Redis OSS-compatible)執行個體,且該執行個體規格需大於源執行個體已使用的記憶體。更多資訊請參見建立執行個體

說明

建議目標資料庫總記憶體比源庫的記憶體佔用大10%以上。若因為目標資料庫記憶體不足,可能會導致資料不一致、任務失敗等問題,您需要清空目標資料庫並重新設定任務。

注意事項

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

操作步驟

  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,更多資訊請參見資料同步鏈路規格說明

    • 閱讀並勾選服務條款。

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

後續步驟

若後續不希望再進行資料同步,您可以在控制台手動結束或釋放該任務。

常見問題

  • 為什麼測試連接失敗?

    請排查以下幾方面:

    • 帳號密碼錯誤,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資料逐出策略介紹

  • 源庫中為什麼會有DTS_REDIS_TIMESTAMP_HEARTBEAT

    為保障遷移、同步品質,DTS會在源庫中插入一個首碼為DTS_REDIS_TIMESTAMP_HEARTBEAT的Key用於記錄更新時間點,若源庫為叢集架構,DTS會在各個shard上均插入該Key。DTS在執行任務過程中會過濾該Key,該Key會在任務結束時自動到期。

  • 為什麼會報錯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無法確保該類型指令碼能夠執行成功。

  • 本頁導讀 (1, M)
  • 功能概述
  • 前提條件
  • 注意事項
  • 操作步驟
  • 後續步驟
  • 常見問題
文檔反饋