全部產品
Search
文件中心

Tair (Redis® OSS-Compatible):校正遷移後的Redis資料

更新時間:Feb 28, 2024

在Redis遷移完成後,您可以通過redis-full-check工具檢查資料的一致性。

前提條件

  • 已完成Redis遷移。
  • 已建立用於運行redis-full-check的ECS執行個體,且ECS執行個體的系統為Linux,建立方法請參見建立ECS執行個體
  • ECS執行個體可以訪問遷移源端和目的端Redis執行個體。
    說明
    • 如果ECS執行個體與Redis執行個體在同一可用性區域的VPC中,可以在Redis白名單中添加ECS內網IP,添加白名單請參見設定白名單
    • 如果ECS執行個體與Redis執行個體不在同一可用性區域的VPC中,可以通過外網地址訪問,詳情請參見如何通過公網串連Redis執行個體

使用情境

如果Redis遷移的過程出現異常,源端與目的端Redis的資料將會不一致。使用redis-full-check進行校正能夠找出異常資料,為資料對齊提供可靠依據。

redis-full-check是阿里雲自研的Redis資料校正工具,能夠提取源端和目的端的資料進行多輪差異化比較,並將比較結果記錄在一個SQLite3資料庫中,從而達到全量資料校正的目的。

說明 如需瞭解更多redis-full-check相關資訊,請參見redis-full-check Github首頁

操作步驟

  1. 登入可以串連ApsaraDB for Redis執行個體(目的端Redis)的ECS,相關操作請參見串連ECS執行個體
  2. 在ECS中下載redis-full-check
    說明 建議您下載最新發行的版本。
  3. 解壓redis-full-check.tar.gz
    tar -xvf redis-full-check.tar.gz
  4. 執行如下命令進行資料校正:
    ./redis-full-check -s "<Redis叢集地址1串連地址:Redis叢集地址1連接埠號碼;Redis叢集地址2串連地址:Redis叢集地址2連接埠號碼;Redis叢集地址3串連地址:Redis叢集地址3連接埠號碼>" -p <Redis叢集密碼> -t <Redis串連地址:Redis連接埠號碼> -a <Redis密碼> --m=1 --sourcedbfilterlist=0;2 --targetdbfilterlist=0;2
    命令樣本如下:
    ./redis-full-check -s "10.xx.xx.1:6379" -p SourcePwd233 -t "r-bp1zc********.redis.rds.aliyuncs.com:6379" -a testaccount:Test1234 --m=1 --sourcedbfilterlist=0;2 --targetdbfilterlist=0;2

    常用選項說明請見下表,如需瞭解更多選項及說明,請參見RedisFullCheck 配置說明

    表 1. redis-full-check常用選項說明
    選項說明樣本值
    -s源端Redis的串連地址和連接埠。
    說明
    • 如果源Redis為叢集版,每個叢集地址間需要以半形分號(;)分割不同的串連地址。
    • 叢集地址前後需要添加半形雙引號(")。
    • 該選項必填。
    r-bp1xxxxxxxxxxxxx.redis.rds.aliyuncs.com:6379
    "10.xx.xx.1:7000;10.xx.xx.1:7001;10.xx.xx.2:7002;10.xx.xx.2:7003"
    -p源端Redis的帳號、密碼,格式為<username>:<password>,例如testaccount:Test1234。若未設定使用者名稱,可僅輸入密碼,若未設定密碼也可以不填。SourcePwd233testaccount:Test1234
    -t目的端Redis的串連地址和連接埠。
    說明
    • 如果目的Redis為叢集版,每個叢集地址間需要以半形分號(;)分割不同的串連地址。
    • 叢集地址前後需要添加半形雙引號(")。
    • 該選項必填。
    r-bp1xxxxxxxxxxxxx.redis.rds.aliyuncs.com:6379
    "10.xx.xx.1:7000;10.xx.xx.1:7001;10.xx.xx.2:7002;10.xx.xx.2:7003"
    -a目的端Redis的帳號、密碼,格式為<username>:<password>,例如testaccount:Test1234。若未使用使用者名稱,可僅輸入密碼,若未設定密碼也可以不填。TargetPwd233testaccount:Test1234
    --sourcedbtype源庫的類別:
    • 0(預設):單節點版、標準版
    • 1:叢集版直連模式
    • 2:叢集版代理模式
    --sourcedbtype=1
    --sourcedbfilterlist源端Redis指定需要校正的DB。
    說明
    • 開源叢集版Redis無需填寫該選項。
    • 非開源叢集版Redis不指定該選項表示校正所有DB。
    • 多個DB之間使用半形分號(;)串連。
    --sourcedbfilterlist=0;1;2
    --targetdbtype目的庫的類別:
    • 0(預設):單節點版、標準版
    • 1:叢集版直連模式
    • 2:叢集版代理模式
    --targetdbtype=0
    --targetdbfilterlist目的端Redis指定需要校正的DB。
    說明
    • 開源叢集版Redis無需填寫該選項。
    • 非開源叢集版Redis不指定該選項表示校正所有DB。
    • 多個DB之間使用半形分號(;)串連。
    --targetdbfilterlist=0;1;2
    -d異常資料列表儲存的檔案名稱,預設為result.db。xxx.db
    --comparetimes校正次數,預設為3,最小值為1,無最大值,建議不超過5次。 --comparetimes=1
    -m校正模式。
    • 1:全量校正。
    • 2(預設):僅校正value的長度。
    • 3:僅校正key是否存在。
    • 4:全量對比的情況下,忽略大key的比較。
    -m=1
    --qps限速閾值,預設為15000。
    說明
    • 最小值為1。
    • 最大值取決於伺服器效能。
    --qps=10
    --filterlist需要比較的key列表,以豎線(|)分割。
    說明
    • abc*:表示匹配所有abc開頭的key。
    • abc:表示僅匹配abc這個key。
    --filterlist=abc*|efg|m*
    說明 執行完成後命令列輸出校對結論,下方樣本表示有2個不一致的key。如果此處為0,則兩端資料一致。
    all finish successfully, totally 2 keys or fields conflict
  5. 查看儲存異常key的SQLite3資料庫。
    1. 執行sqlite3 result.db.3
      說明 異常資料列表預設儲存在result.db.3中。
    2. 執行SELECT * FROM key;
      圖 1. 查看異常資料列表
      說明 SQL3資料庫中儲存了表key和表field:
      • 表key中儲存的是不一致的key。
      • 表field中儲存的是hash、set、zset、list類型資料中不一致資料的詳情。