すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):移行されたRedisデータの確認

最終更新日:Aug 23, 2024

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」をご参照ください。

手順

  1. ECS インスタンスにログインします。 詳細については、「インスタンスへの接続」をご参照ください。

  2. ECS インスタンスにredis-full-checkツールをダウンロードします。

    説明

    最新バージョンのredis-full-checkをダウンロードすることを推奨します。

  3. 次のコマンドを実行して、redis-full-check.tar.gz パッケージを解凍します。

    tar -xvf redis-full-check.tar.gz
  4. 以下のコマンドを実行してデータを検証します。

    ./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
  5. 整合性のないキーが格納されているSQLite3データベースを確認します。

    1. sqlite3 result.db.3コマンドを実行します。

      説明

      整合性のないキーは、デフォルトで result.db.3 に保存されます。

    2. SELECT * FROM key; ステートメントを実行します。

      図 1. 不整合キーのリストの表示

      説明

      SQLite3データベースには、キーテーブルとフィールドテーブルが含まれます。

      • 不一致キーはキーテーブルに格納されます。

      • ハッシュ、set、zset、およびlist型の不一致データの詳細は、フィールドテーブルに格納されます。