從ECS上的Codis叢集同步至雲資料庫Tair(相容Redis)執行個體

更新時間:
Copy as MD

雲資料庫Tair(相容Redis)是相容開源Redis協議標準、提供記憶體加硬碟混合儲存的資料庫服務,基於高可靠雙機熱備架構及可平滑擴充的叢集架構,可充分滿足高吞吐、低延遲及彈性變更配置的業務需求。通過Data Transmission Service,您可以將Codis叢集同步至雲資料庫Tair(相容Redis)執行個體。

前提條件

  • 已建立目標雲資料庫Tair(相容Redis)執行個體(4.0、5.06.0版本),詳情請參見建立Redis執行個體

  • 目標雲資料庫Tair(相容Redis)執行個體的空閑儲存空間需大於源Codis資料庫已使用的儲存空間。

  • Codis叢集的每個Master節點必須能夠執行psync命令。

  • Redis執行個體SlaveMaster之間的複製逾時時間參數repl-timeout,預設為60秒,建議使用config set repl-timeout 600命令設定為600秒。若來源資料庫資料量比較大,可以適當增大repl-timeout參數的值。

同步原理介紹

DTS通過同步Codis叢集中的每個Codis-Group來實現叢集的整體同步,您需要為每個Codis-Group建立一個對應的資料同步作業。

Codis同步原理

Codis叢集環境介紹

在本案例中,Codis叢集具備兩個Codis-Group,每個Codis-Group採用一主一備的架構,詳情請參見下圖。

Codis案例介紹

注意事項

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

  • 如果在來源資料庫的設定檔redis.conf中配置了bind參數,請將該參數的值設定為ECS的內網IP地址以保障DTS可以正常串連來源資料庫。

  • 為保障同步鏈路穩定性,建議將源叢集的設定檔redis.confrepl-backlog-size參數的值適當調大。

  • 為保障同步品質,DTS會在源叢集中插入一個key:DTS_REDIS_TIMESTAMP_HEARTBEAT,用於記錄更新時間點。

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

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

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

    說明

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

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

    說明

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

  • 目標雲資料庫Tair(相容Redis)執行個體支援的版本為4.0、5.06.0版本,如需跨版本同步(僅支援從低版本同步到高版本)請提前確認相容性。例如建立隨用隨付的Redis執行個體來測試,測試完成後可將該執行個體釋放或轉為訂用帳戶。

  • 若目標執行個體的架構類型為叢集版且某一個分區達到了記憶體上限,或目標執行個體的儲存空間不足時,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、PUBLISH

  • 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

說明
  • 不支援同步PUBLISH命令。

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

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

操作步驟

  1. 建立遷移任務。

    1. 登入Data Transmission Service控制台

    2. 在左側功能表列中,選擇資料同步

    3. 在頂部導覽列中,地區選擇之前建立的 ECS 執行個體所在的地區。

    4. 在頁面中,單擊創建任務

  2. 配置源庫及目標庫資訊。

    類別

    配置

    說明

    任務

    任務名稱

    Data Transmission Service的同步任務名稱。

    源庫資訊

    資料庫類型

    NoSQL 數據庫頁簽下選擇 Tair/Redis

    接入方式

    選擇 ECS 自建資料庫。

    執行個體地區

    選擇之前建立的 ECS 執行個體所在的地區。

    是否跨阿里雲帳號

    Data Transmission Service 支援對不同阿里雲帳號下的執行個體配置資料同步任務,實現跨阿里雲帳號的資料同步,本方案選擇不跨帳號。

    ECS 執行個體 ID

    選擇Codis-GroupMaster節點所屬的ECS執行個體ID。

    說明

    DTS通過同步Codis叢集中的每個Codis-Group來實現整體的資料同步,此處先填入第一個Codis-GroupMaster節點所屬的ECS執行個體ID;稍後配置第二個資料同步作業時,此處填入第二個Codis-GroupMaster節點所屬的ECS執行個體ID;以此類推,直至為所有Codis-Group配置同步作業。

    執行個體模式

    單機版。

    說明

    由於Codis叢集架構的特殊性,無法直接同步處理Codis叢集,DTS通過同步Codis叢集中的每個Codis-Group來實現整體的資料同步,所以此處需選擇為單機版

    連接埠

    資料庫連接埠。

    認證方式

    密碼登入。

    資料庫密碼

    填入該Master節點的資料庫密碼。

    說明

    非必填項,如果沒有設定密碼可以不填。

    串連方式

    串連方式,支援非加密串連、SSL 安全連線,本方案選擇非加密串連。

    目標庫資訊

    資料庫類型

    會自動勾選為 Tair/Redis。

    接入方式

    選擇雲執行個體。

    執行個體地區

    選擇之前建立的雲執行個體所在的地區。

    是否跨阿里雲帳號

    Data Transmission Service 支援對不同阿里雲帳號下的執行個體配置資料同步任務,實現跨阿里雲帳號的資料同步,本方案選擇不跨帳號。

    執行個體類型

    選擇執行個體類型。

    執行個體 ID

    選擇目標雲資料庫Tair(相容Redis)執行個體ID。

    認證方式

    密碼登入。

    資料庫密碼

    配置之前在雲執行個體中設定的資料庫密碼。

    說明

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

    串連方式

    串連方式,支援非加密串連、SSL 安全連線,本方案選擇非加密串連。

  3. 單擊測試連接以進行下一步

  4. DTS 伺服器訪問授權彈框中,單擊測試連接

  5. 配置任務對象。

    1. 對象配置:

      1. 同步類型勾選全量同步+增量同步處理

      2. 目標已存在表的處理模式,選擇預檢查並報錯攔截

      3. 源庫對象框中選擇要遷移的資料庫,勾選全選,再單擊向右小箭頭.png將其移動至已選擇對象框,然後單擊下一步進階配置

    2. 進階配置:預設配置項不作修改,單擊下一步資料校正

    3. 資料校正方式:勾選全量校正,然後單擊下一步儲存任務並預檢查

  6. 對象配置:

    1. 同步類型勾選全量同步+增量同步處理

    2. 目標已存在表的處理模式,選擇預檢查並報錯攔截

    3. 源庫對象框中選擇要遷移的資料庫,勾選全選,再單擊向右小箭頭.png將其移動至已選擇對象框,然後單擊下一步進階配置

  7. 預檢查通過率達到 100% 後,單擊下一步購買

  8. 後付費頁簽中,選擇資料移轉執行個體的鏈路規格(本案例以 micro 規格為例),勾選《資料轉送(隨用隨付)服務條款》,單擊購買並啟動

  9. 遷移任務正式開始。

    單擊遷移任務 ID 進入任務詳情頁,在詳情頁中點擊左側導覽列中的任務管理可以查看具體進度。當您看到如下介面,表示存量資料已遷移完成,增量資料會即時同步。此時您可以進入下一步,驗證雲資料 Tair 裡的資料。

    image

    說明

    DTS 同步任務支援跨地區資料同步遷移,本方案按照架構所示以相同地區同 VPC 內資料同步為例為您介紹構建資料一致性,更多資料同步資訊請參考同步方案概覽

  10. 重複第1步到第9步的操作,為剩餘的Codis-Group建立資料同步作業。

執行結果

本案例的Codis叢集具備兩個Codis-Group,因此需要建立兩個資料同步作業。如下圖所示,這兩個資料同步作業完成同步初始化後,已經都處於同步中狀態。

完成Codis叢集同步配置

本案例同步的資料庫為DB0DB1,通過DMS登入Redis執行個體後與源Codis叢集進行對比,Key總數與源Codis叢集一致。

圖 1. 雲資料庫Tair(相容Redis)執行個體

圖 2. Codis叢集