Tair (Redis OSS-compatible) インスタンスへのデータ移行が完了したら、redis-full-check ツールを使用してデータの一貫性を検証できます。
前提条件
-
データ移行が完了していること。
-
Linux オペレーティングシステムを実行する Elastic Compute Service (ECS) インスタンスが作成されていること。詳細については、「ECSインスタンスの作成」をご参照ください。
-
ECS インスタンスが、ソースとターゲット両方の Redis インスタンスにアクセスできること。
説明-
ECS インスタンスと Redis インスタンスが同じ VPC および同じアベイラビリティーゾーンにある場合は、ECS インスタンスの内部 IP アドレスを Redis ホワイトリストに追加します。詳細については、「IPホワイトリストの設定」をご参照ください。
-
ECS インスタンスと Redis インスタンスが同じ VPC および同じアベイラビリティーゾーンにない場合は、パブリックエンドポイントを使用して Redis インスタンスに接続できます。詳細については、「パブリックエンドポイントを使用したTair (Redis OSS-compatible) インスタンスへの接続」をご参照ください。
-
ユースケース
データ移行中のエラーにより、ソースインスタンスとターゲットインスタンス間でデータの不整合が発生する可能性があります。redis-full-check を使用することで、これらの不一致を検出し、データを修正できます。
redis-full-check は、Alibaba Cloud が開発した Redis データ検証ツールです。このツールは、ソースとターゲットからデータを抽出し、複数回の比較を実行し、差異を SQLite3 データベースに記録します。
redis-full-check の詳細については、redis-full-check GitHub リポジトリをご参照ください。
操作手順
-
Tair (Redis OSS-compatible) インスタンスにアクセスできる 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すべてのパラメータについては、「redis-full-check設定ガイド」をご参照ください。
表 1. redis-full-check の一般的なパラメータ
パラメータ
説明
例
-s
ソース 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 インスタンスのエンドポイントとポート。
説明-
ターゲットがクラスターインスタンスの場合は、複数のエンドポイントをセミコロン (;) で区切ります。
-
エンドポイントは二重引用符 ("") で囲みます。
-
このパラメータは必須です。
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 インスタンスで検証するデータベース。
説明-
このパラメータは Redis OSS クラスターインスタンスでは不要です。
-
その他のクラスターインスタンスタイプでは、デフォルトではすべてのデータベースが検証されます。
-
複数のデータベースを指定するには、番号をセミコロン (;) で区切ります。
--sourcedbfilterlist=0;1;2--targetdbtype
ターゲットインスタンスのタイプ。有効な値:
-
0 (デフォルト):スタンドアロンまたはスタンダード
-
1:クラスター (ダイレクト接続モード)
-
2:クラスター (プロキシモード)
--targetdbtype=0--targetdbfilterlist
ターゲット Redis インスタンスで検証するデータベース。
説明-
このパラメータは Redis OSS クラスターインスタンスでは不要です。
-
その他のクラスターインスタンスタイプでは、デフォルトではすべてのデータベースが検証されます。
-
複数のデータベースを指定するには、番号をセミコロン (;) で区切ります。
--targetdbfilterlist=0;1;2-d
不整合データのリストの出力ファイル名。デフォルト:result.db.3。
xxx.db--comparetimes
検証の回数。デフォルト:3。最小値:1。5 以下の値を推奨します。
--comparetimes=1
-m
検証モード。有効な値:
-
1:フル検証。
-
2 (デフォルト):値の長さのみを検証。
-
3:キーの存在のみを検証。
-
4:フル検証を実行するが、大きなキーは無視。
-m 1
--qps
QPS (queries-per-second) の制限。デフォルト値は 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. 不整合データのリストの表示
[root@redis-server RedisFullCheck]# sqlite3 result.db.3 SQLite version 3.7.17 2013-05-20 00:56:22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> SELECT * FROM key; 1|differentkey1|string|lack_target|0|10|0 2|differentkey2|list|lack_target|0|4|0 sqlite>説明SQLite3 データベースには、
keyとfieldの 2 つのテーブルが含まれています。-
keyテーブルには不整合キーが格納されます。 -
hash、set、zset、list のデータタイプの場合、
fieldテーブルには不整合データの詳細が格納されます。
-
-