Tair (Redis OSS-compatible) の移行が完了したら、redis-full-check ツールを使用してデータ整合性を検証できます。
前提条件
データ移行が完了していること。
Linux を実行する ECS インスタンスが作成されていること。 詳細については、「ECS インスタンスの作成」をご参照ください。
ECS インスタンスがソースおよび宛先の Redis インスタンスにアクセスできること。
説明ECS インスタンスと Redis インスタンスが同じ VPC およびゾーンにある場合、ECS インスタンスのプライベート IP アドレスを Redis インスタンスのホワイトリストに追加します。 詳細については、「IP ホワイトリストの設定」をご参照ください。
ECS インスタンスと Redis インスタンスが同じ VPC またはゾーンにない場合、Redis インスタンスのパブリックエンドポイントを使用して接続します。 詳細については、「パブリックエンドポイントを使用したインスタンスへの接続」をご参照ください。
シナリオ
データ移行中に例外が発生した場合、ソースインスタンスと宛先インスタンス間でデータが不整合になる可能性があります。 redis-full-check ツールを使用して、不整合なデータを見つけることができます。 このツールは、データアライメントのための信頼できる基盤を提供します。
redis-full-check は、Alibaba Cloud が Redis 向けに開発したデータ検証ツールです。 ソースインスタンスと宛先インスタンスからデータを抽出し、比較します。 このツールは、複数の比較ラウンドを実行し、結果を SQLite3 データベースに記録して、完全なデータセットを検証します。
redis-full-check ツールの詳細については、「Git の redis-full-check ホームページ」をご参照ください。
手順
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 "<Source endpoint 1:Port;Source endpoint 2:Port;...>" -p <Source password> -t <Destination endpoint:Port> -a <Destination password> --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 (デフォルト): シングルノード版または Standard Edition
1: 直接接続モードのクラスター版
2: プロキシモードのクラスター版
--sourcedbtype=1--sourcedbfilterlist
ソース Redis インスタンスで検証する DB。
説明このオプションは、オープンソースの Redis クラスターでは必須ではありません。
他のクラスタータイプの場合、このオプションを指定しないと、すべての DB が検証されます。
複数の DB はセミコロン (;) で区切ります。
--sourcedbfilterlist=0;1;2--targetdbtype
宛先データベースのタイプ。
0 (デフォルト): シングルノード版または Standard Edition
1: 直接接続モードのクラスター版
2: プロキシモードのクラスター版
--targetdbtype=0--targetdbfilterlist
宛先 Redis インスタンスで検証する DB。
説明このオプションは、オープンソースの Redis クラスターでは必須ではありません。
他のクラスタータイプの場合、このオプションを指定しないと、すべての DB が検証されます。
複数の DB はセミコロン (;) で区切ります。
--targetdbfilterlist=0;1;2-d
不整合なデータのリストを格納するファイルの名前。 デフォルト名は result.db です。
xxx.db--comparetimes
検証ラウンドの数。 デフォルト値は 3 です。 最小値は 1 です。 最大値はありませんが、推奨される最大値は 5 です。
--comparetimes=1
-m
検証モード。
1: 完全なデータを検証します。
2 (デフォルト): 値の長さのみを検証します。
3: キーが存在するかどうかのみをチェックします。
4: 完全なデータを検証しますが、大きなキーは無視します。
-m=1
--qps
スロットリングのしきい値。 デフォルト値は 15000 です。
説明最小値は 1 です。
最大値はサーバーのパフォーマンスによって異なります。
--qps=10
--filterlist
比較するキーのリスト。 キーは縦棒 (|) で区切ります。
説明abc*: abc で始まるすべてのキーに一致します。
abc: キー abc にのみ一致します。
--filterlist=abc*|efg|m*
説明コマンドを実行すると、検証結果がコマンドラインに表示されます。 次の出力は、2 つのキーが不整合であることを示しています。 不整合なキーの数が 0 の場合、データは整合しています。
all finish successfully, totally 2 keys or fields conflict不整合なキーを格納する SQLite3 データベースを確認します。
sqlite3 result.db.3コマンドを実行します。説明デフォルトでは、不整合なデータのリストは result.db.3 ファイルに保存されます。
SELECT * FROM key;コマンドを実行します。図 1. 不整合なデータのリストの表示
説明SQLite3 データベースには `key` テーブルと `field` テーブルが含まれています。
`key` テーブルには、不整合なキーが格納されます。
`field` テーブルには、hash、set、zset、および list データ型の不整合に関する詳細が格納されます。