Redisデータの移行後、redis-full-checkツールを使用して、ソースインスタンスとターゲットインスタンス間でデータが一致しているかどうかを確認できます。
前提条件
Redis データが移行済みであること。
redis-full-checkツールを実行するために、Elastic Compute Service (ECS) Linuxインスタンスが作成されます。 詳細は、「ECS インスタンスの作成」をご参照ください。
ECS インスタンスが同期元と同期先の Redis インスタンスにアクセスできること。
説明ECSインスタンスとソースまたはターゲットRedisインスタンスが同じ仮想プライベートクラウド (VPC) にある場合、ECSインスタンスの内部IPアドレスをRedisインスタンスのホワイトリストに追加する必要があります。 詳細については、「IP ホワイトリストの設定」をご参照ください。
ECSインスタンスとソースまたはターゲットRedisインスタンスが同じVPCにない場合、ECSインスタンスはパブリックエンドポイントを介してRedisインスタンスにアクセスできます。 詳細については、「パブリックエンドポイントを使用したApsaraDB For Redisインスタンスへの接続」をご参照ください。
シナリオ
Redis データの移行中に例外が発生した場合、同期元と同期先の Redis インスタンス間のデータの整合性が失われます。 redis-full-checkツールを使用して異常なデータを見つけることができます。
redis-full-checkは、Alibaba Cloudが社内で開発したRedisデータ検証ツールです。 ソースインスタンスとターゲットインスタンスからデータを抽出し、抽出されたデータの比較を複数回実行して、比較結果をSQLite3データベースに記録できます。 このツールを使用して、全データを検証できます。
redis-full-check ツールの詳細については、「redis-full-check on GitHub」をご参照ください。
手順
ECS インスタンスにログインします。 詳細については、「インスタンスへの接続」をご参照ください。
ECS インスタンスにredis-full-checkツールをダウンロードします。
説明最新バージョンのredis-full-checkをダウンロードすることを推奨します。
次のコマンドを実行して、redis-full-check.tar.gz パッケージを解凍します。
tar -xvf redis-full-check.tar.gz
以下のコマンドを実行してデータを検証します。
./redis-full-check -s "<Endpoint 1 of the source Redis instance:Port number of endpoint 1;Endpoint 2 of the source Redis instance:Port number of endpoint 2;Endpoint 3 of the source Redis instance:Port number of endpoint 3;>" -p <Password of the source Redis instance> -t <Endpoint of the destination Redis instance:Port number> -a <Password of the destination Redis instance> --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
下表に、redis-full-check ツールの共通パラメーターを示します。 詳細については、「Configure redis-full-check」をご参照ください。
表 1. redis-full-checkの一般的なパラメーター
パラメーター
説明
例
-s
同期元の Redis インスタンスのエンドポイントとポートです。
説明同期元の Redis インスタンスがクラスターの場合、クラスターエンドポイントをセミコロン (;) で区切ります。
クラスターのエンドポイントを二重引用符 (") で囲みます。
This parameter is required.
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 インスタンスがクラスターの場合、クラスターのエンドポイントをセミコロン (;) で区切ります。
クラスターのエンドポイントを二重引用符 (") で囲みます。
This parameter is required.
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
同期元の Redis インスタンスのタイプです。 デフォルト値:0 有効な値:
0: スタンドアロンまたは標準
1: クラスター (直接接続モード)
2: cluster (プロキシモード)
-- sourceedbtype=1
--sourcedbfilterlist
データを検証する同期元の Redis インスタンスのデータベースです。
説明このパラメーターは、オープンソースのRedisクラスターには必要ありません。
このパラメーターを設定しない場合、すべてのデータベースのデータが検証されます。
複数のデータベースは、セミコロン (;) で区切ります。
-- sourceedbfilterlist=0;1;2
--targetdbtype
同期先の Redis インスタンスのタイプです。 有効な値:
0: スタンドアロンまたは標準
1: クラスター (直接接続モード)
2: cluster (プロキシモード)
-- targetdbtype=0
--targetdbfilterlist
データを検証する同期先の Redis インスタンスのデータベースです。
説明このパラメーターは、オープンソースのRedisクラスターには必要ありません。
このパラメーターを設定しない場合、すべてのデータベースのデータが検証されます。
複数のデータベースは、セミコロン (;) で区切ります。
-- targetdbfilterlist=0;1;2
-d
整合性のないキーを保存するためのファイルの名前です。 デフォルト値:result.db
xxx.db
--comparetimes
検証の数。 デフォルト値:3 最小値:1 このパラメーターは、5 を超えない値に設定することを推奨します。
--comparetimes=1
-m
検証モードです。 デフォルト値:2 有効な値:
1:全データを検証します。
2:値の長さのみを検証します。
3:キーが存在するかどうかのみをチェックします。
4: 大きなキーを除く完全なデータを検証します。
-m=1
--qps
1 秒あたりのクエリ数 (QPS) です。 デフォルト値: 15000
説明最小値:1
最大値:サーバーのパフォーマンスに依存
--qps=10
--filterlist
検証するキーです。 複数のキーは縦棒 (|) で区切ります。
説明abc *:abc で始まるすべてのキーを照合します。
abc:abc キーを照合します。
--filterlist=abc*|efg|m*
説明検証が完了すると、比較結果がCLIに表示されます。 次の結果は、ソースとターゲットのRedisインスタンス間で2つのキーが一致しないことを示しています。 整合性のないキーの数が 0 の場合、データは同期元と同期先の Redis インスタンス間で一貫しています。
all finish successfully, totally 2 keys or fields conflict
整合性のないキーが格納されているSQLite3データベースを確認します。
sqlite3 result.db.3
コマンドを実行します。説明整合性のないキーは、デフォルトで result.db.3 に保存されます。
SELECT * FROM key;
ステートメントを実行します。説明SQLite3データベースには、キーテーブルとフィールドテーブルが含まれます。
不一致キーはキーテーブルに格納されます。
ハッシュ、set、zset、およびlist型の不一致データの詳細は、フィールドテーブルに格納されます。