在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首頁。
操作步驟
登入可以訪問Tair (Redis OSS-compatible)的ECS執行個體,相關操作請參見串連ECS執行個體。
在ECS中下載redis-full-check。
說明建議您下載最新發行的版本。
解壓redis-full-check.tar.gz。
tar -xvf redis-full-check.tar.gz執行如下命令進行資料校正:
./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。若未設定使用者名稱,可僅輸入密碼,若未設定密碼也可以不填。SourcePwd233或testaccount: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。若未使用使用者名稱,可僅輸入密碼,若未設定密碼也可以不填。TargetPwd233或testaccount: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查看儲存異常key的SQLite3資料庫。
執行
sqlite3 result.db.3。說明異常資料列表預設儲存在result.db.3中。
執行
SELECT * FROM key;。圖 1. 查看異常資料列表
說明SQL3資料庫中儲存了表key和表field:
表key中儲存的是不一致的key。
表field中儲存的是hash、set、zset、list類型資料中不一致資料的詳情。