全部產品
Search
文件中心

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

更新時間:Sep 12, 2025

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

前提條件

  • 已完成資料移轉。

  • 已建立ECS執行個體,且ECS執行個體的系統為Linux,建立方法請參見建立ECS執行個體

  • ECS執行個體可以訪問遷移源端和目的端Redis執行個體。

    說明
    • 如果ECS執行個體與Redis執行個體在同一可用性區域的VPC中,可以在Redis白名單中添加ECS內網IP,添加白名單請參見設定IP白名單

    • 如果ECS執行個體與Redis執行個體不在同一可用性區域的VPC中,可以通過外網地址訪問,詳情請參見使用公網地址串連執行個體

使用情境

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

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

說明

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

操作步驟

  1. 登入可以訪問Tair (Redis OSS-compatible)的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類型資料中不一致資料的詳情。