在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首頁。
操作步驟
- 登入可以串連ApsaraDB for Redis執行個體(目的端Redis)的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;
。說明 SQL3資料庫中儲存了表key和表field:- 表key中儲存的是不一致的key。
- 表field中儲存的是hash、set、zset、list類型資料中不一致資料的詳情。
- 執行