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

Data Transmission Service:ECSインスタンスでホストされているTweemproxy RedisクラスターのデータをTair (Redis OSS-Compatible)インスタンスに同期する

最終更新日:Nov 19, 2024

Tair (Redis OSS-Compatible)は、オープンソースのRedisプロトコルと互換性があり、ストレージ用のメモリとディスクのハイブリッドをサポートするデータベースサービスです。 信頼性の高いホットスタンバイアーキテクチャとスケーラブルなクラスターアーキテクチャに基づくTair (Redis OSS-Compatible)は、柔軟な構成変更、高スループット、低レイテンシが必要なシナリオに適しています。 このトピックでは、data Transmission Service (DTS) を使用して、Twemproxy RedisクラスターからTair (Redis OSS-Compatible)インスタンスにデータを同期する方法について説明します。

前提条件

  • Tair (Redis OSS-Compatible)インスタンスが作成されました。 詳細については、「手順1: Tair (Redis OSS-Compatible)インスタンスの作成」をご参照ください。

  • Tair (Redis OSS-Compatible)インスタンスの使用可能なストレージ容量が、Tweemproxy Redisクラスターに保存されているデータの合計サイズよりも大きいこと。

  • Tweemproxy Redisクラスター内のすべてのマスターノードは、PSYNCコマンドをサポートしています。

  • ソースインスタンスのマスターノードとレプリカノード間のデータレプリケーションのタイムアウト期間は、repl-timeoutパラメーターで指定します。 デフォルトでは、このパラメータは60秒に設定されています。 config set repl-timeout 600コマンドを実行して、このパラメーターを600秒に設定することを推奨します。 ソースインスタンスに大量のデータが保存されている場合は、ビジネス要件に基づいてrepl-timeoutパラメーターの値を増やすことができます。

DTSがTomproxy Redisクラスターからのデータを同期する方法

Tweemproxy Redisクラスターは、複数のRedisサーバーで構成されています。 DTSは、クラスター全体が同期されるまで、データ同期タスクで各Redisサーバーのデータを同期します。

Synchronize data from a Twemproxy Redis cluster

Tweemproxy Redisクラスターのアーキテクチャ

このトピックでは、Tweemproxy Redisクラスターは2つのRedisサーバーで構成されています。 各Redisサーバーは、マスターレプリカアーキテクチャで実行されます。 次の図は、クラスターのアーキテクチャを示しています。

Architecture of a Twemproxy Redis cluster

注意事項

  • DTSは、最初の完全データ同期中にソースインスタンスとターゲットインスタンスのリソースを使用します。 これにより、データベースサーバーの負荷が増加する可能性があります。 大量のデータを同期したり、サーバーの仕様が要件を満たしていない場合、データベースサービスが利用できなくなることがあります。 データを同期する前に、ソースインスタンスとターゲットインスタンスのパフォーマンスに対するデータ同期の影響を評価します。 オフピーク時にデータを同期することを推奨します。

  • ソースredisデータベースのRedis. confファイルでbindパラメーターが設定されている場合、このパラメーターの値をECSインスタンスの内部IPアドレスに設定する必要があります。 この設定により、DTSがソースデータベースに接続できるようになります。

  • データ同期の安定性を確保するために、ソースCodisクラスターのredis.confファイルのrepl-backlog-sizeパラメーターの値を大きくすることを推奨します。

  • 同期品質を確保するために、DTSはソースCodisクラスターにDTS_REDIS_TIMESTAMP_HEARTBEATキーを追加します。 このキーは、データがTair (Redis OSS-Compatible)に同期される時刻を記録するために使用されます。

  • ソースのCodisクラスターでFLUSHDBまたはFLUSHALLコマンドを実行しないことを推奨します。 そうしないと、ソースデータベースとターゲットデータベースの間でデータが一致しなくなります。

  • デフォルトでは、データの削除方法を指定するmaxmemory-policyパラメーターは、Tair (Redis OSS-Compatible)インスタンスのvolatile-lruに設定されています。 デスティネーションインスタンスのメモリが不十分な場合、データの削除により、ソースインスタンスとデスティネーションインスタンスの間でデータの不整合が発生する可能性があります。 この場合、データ同期タスクは実行を停止しません。

    データの不整合を防ぐため、ターゲットインスタンスのmaxmemory-policyをnoevictionに設定することを推奨します。 このように、宛先インスタンスのメモリが不十分な場合、データ同期タスクは失敗しますが、宛先インスタンスのデータ損失を防ぐことができます。

    説明

    データ削除ポリシーの詳細については、Tairのデフォルトの削除ポリシーは何ですか?

  • ソースデータベースの特定のキーに対して有効期限ポリシーが有効化されている場合、これらのキーは、有効期限が切れた後の最も早い機会に削除されない場合があります。 したがって、宛先データベース内のキーの数は、ソースデータベース内のキーの数よりも少なくてもよい。 INFOコマンドを実行して、ターゲットデータベース内のキーの数を表示できます。

    説明

    有効期限ポリシーが有効になっていない、または有効期限が切れていないキーの数は、ソースデータベースとターゲットデータベースで同じです。

  • ターゲットTair (Redis OSS-Compatible)インスタンスのデータベースバージョンは、4.0、5.0、または6.0です。 ターゲットデータベースのバージョンは、ソースデータベースのバージョンと同じかそれ以降でなければなりません。 異なるバージョンのRedisデータベース間でデータを同期する場合は、ソースデータベースとターゲットデータベースのバージョンが互換性があることを確認してください。 たとえば、従量課金のターゲットインスタンスを作成して、ソースインスタンスとターゲットインスタンスの互換性を確認できます。 その後、このインスタンスをリリースするか、インスタンスの課金方法をサブスクリプションに変更できます。

  • ターゲットインスタンスがクラスターアーキテクチャにデプロイされ、ターゲットインスタンスのシャードが使用するメモリ量が上限に達した場合、またはターゲットインスタンスの使用可能なストレージスペースが不十分な場合、メモリ不足 (OOM) によりデータ同期タスクが失敗します。

  • ターゲットインスタンスに対して透過データ暗号化 (TDE) 機能が有効になっている場合、DTSを使用してデータを同期することはできません。

サポートしている同期トポロジ

  • 一方向の 1 対 1 の同期

  • 一方向の 1 対多の同期

  • 一方向のカスケード同期

詳細については、「同期トポロジ」をご参照ください。

同期できるコマンド

  • APPEND

  • BITOP、BLPOP、BRPOP、およびBRPOPLPUSH

  • DECR、DECRFY、およびDEL

  • EVAL、EVALSHA、EXEC、EXPIRE、EXPIREAT

  • GEOADDとGETSET

  • HDEL、HINCRBY、HINCRBYFLOAT、HMSET、HSET、およびHSETNX

  • INCR、INCRBY、およびINCRBYFLOAT

  • LINSERT、LPOP、LPUSH、LUSHX、LREM、LSET、およびLTRIM

  • 移動、MSET、MSETNX、およびマルチ

  • PERSIST、PEXPIRE、PEXPIREAT、PFADD、PFMERGE、PSETEX、および出版物

  • RENAME、RENAMENX、RESTORE、RPOP、RPOPLPUSH、RPUSH、およびRPUSHX

  • SADD、SDIFFSTORE、SELECT、SET、SETBIT、SETEX、SETNX、SETRANGE、SINTERSTORE、SMOVE、SPOP、SREM、およびSUUNIONSTORE

  • ZADD、ZINCRBY、ZINTERSTORE、ZREM、ZREMRANGEBYLEX、ZUNION STORE、ZREMRANGEBYRANK、およびZREMRANGEBYSCORE

説明
  • 公開操作は同期できません。

  • EVALまたはEVALSHAコマンドを実行してLuaスクリプトを呼び出す場合、DTSはこれらのLuaスクリプトがターゲットインスタンスで実行されているかどうかを識別できません。 これは、増分データ同期中に、ターゲットインスタンスがLuaスクリプトの実行結果を明示的に返さないためです。

  • DTSがSYNCまたはPSYNCコマンドを実行してLISTタイプのデータを転送すると、DTSはターゲットインスタンスの既存のデータをクリアしません。 その結果、宛先インスタンスは重複するデータレコードを含むことがある。

手順

  1. データ同期インスタンスを購入します。 詳細については、「DTSインスタンスの購入」をご参照ください。

    説明

    購入ページで、ソースとターゲットの両方のインスタンスタイプとしてRedisを選択し、同期トポロジとして一方向同期を選択します。

  2. にログインします。 DTSコンソール

    説明

    データ管理 (DMS) コンソールにリダイレクトされている場合は、にあるoldアイコンをクリックして、以前のバージョンのDTSコンソールに移動しimage

  3. 左側のナビゲーションウィンドウで、[データ同期] をクリックします。

  4. [同期タスク] ページの上部で、ターゲットインスタンスが存在するリージョンを選択します。

  5. データ同期インスタンスを見つけ、[操作] 列の [タスクの設定] をクリックします。

  6. ソースインスタンスとターゲットインスタンスを設定します。

    Configure the source and destination instances

    セクション

    パラメーター

    説明

    非該当

    同期タスク名

    DTSが自動的に生成するタスク名。 タスクを簡単に識別できるように、わかりやすい名前を指定することをお勧めします。 一意のタスク名を使用する必要はありません。

    ソースインスタンスの詳細

    インスタンスタイプ

    [ECS インスタンスのユーザー作成データベース] を選択します。

    インスタンスリージョン

    購入ページで選択したソースリージョン。 このパラメーターの値は変更できません。

    ECS インスタンス ID

    Redis-ServerのマスターノードをホストするElastic Compute Service (ECS) インスタンスのID。

    説明

    DTSは、クラスター全体が同期されるまで、データ同期タスクを使用して、Tweemproxy Redisクラスターの各Redisサーバーを同期します。 このステップでは、Redisサーバー1のマスターノードのECSインスタンスIDを入力します。 Redisサーバー2のデータ同期タスクを設定するときに、Redisサーバー2のマスターノードのECSインスタンスIDを入力します。 このトピックで説明する手順に従って、すべてのRedisサーバーのデータ同期タスクを設定できます。

    データベースエンジン

    このパラメーターの値はRedisに固定されています。

    インスタンスモード

    [スタンドアロン] を選択します。

    説明

    Tweemproxy Redisクラスターのデータを一度に同期できないため、このパラメーターには [スタンドアロン] を選択する必要があります。 DTSは、すべてのRedisサーバーが同期されるまで、データ同期タスクでクラスターの各Redisサーバーのデータを同期します。

    ポート番号

    Redis-Serverのマスターノードのサービスポート番号。

    データベースパスワード

    マスターノードのデータベースパスワード。

    説明

    このパラメーターはオプションで、データベースパスワードが設定されていない場合は空のままにできます。

    ターゲットインスタンスの詳細

    インスタンスタイプ

    [Redisインスタンス] を選択します。

    インスタンスリージョン

    購入ページで選択したターゲットリージョン。 このパラメーターの値は変更できません。

    RedisインスタンスID

    ターゲットTair (Redis OSS-Compatible)インスタンスのID。

    データベースパスワード

    Tair (Redis OSS-Compatible)インスタンスのデータベースパスワード。

    説明

    データベースのパスワードは <user >:< password> 形式です。 たとえば、ソースTair (Redis OSS-Compatible)インスタンスへのログインに使用するアカウントのユーザー名がadminで、パスワードがRp829dlwaの場合、データベースのパスワードはadmin:Rp829dlwaです。

  7. ページの右下隅ホワイトリストと次への設定をクリックします。

    ソースまたはターゲットデータベースがAlibaba Cloudデータベースインスタンス (ApsaraDB RDS for MySQLApsaraDB for MongoDBインスタンスなど) の場合、DTSは自動的にDTSサーバーのCIDRブロックをインスタンスのIPアドレスホワイトリストに追加します。 ソースデータベースまたはターゲットデータベースがElastic Compute Service (ECS) インスタンスでホストされている自己管理データベースの場合、DTSサーバーのCIDRブロックがECSインスタンスのセキュリティグループルールに自動的に追加されます。ECSインスタンスがデータベースにアクセスできることを確認する必要があります。 自己管理データベースが複数のECSインスタンスでホストされている場合、DTSサーバーのCIDRブロックを各ECSインスタンスのセキュリティグループルールに手動で追加する必要があります。 ソースデータベースまたはターゲットデータベースが、データセンターにデプロイされているか、サードパーティのクラウドサービスプロバイダーによって提供される自己管理データベースである場合、DTSサーバーのCIDRブロックをデータベースのIPアドレスホワイトリストに手動で追加して、DTSがデータベースにアクセスできるようにする必要があります。 詳細については、「DTSサーバーのCIDRブロックの追加」をご参照ください。

    警告

    DTSサーバーのCIDRブロックがデータベースまたはインスタンスのホワイトリスト、またはECSセキュリティグループルールに自動的または手動で追加されると、セキュリティリスクが発生する可能性があります。 したがって、DTSを使用してデータを同期する前に、潜在的なリスクを理解して認識し、次の対策を含む予防策を講じる必要があります。VPNゲートウェイ、またはSmart Access Gateway。

  8. 競合するテーブルと同期するオブジェクトの処理モードを選択します。

    Select objects to be synchronized

    設定

    説明

    競合するテーブルの処理モードを選択する

    DTSは、クラスター全体が同期されるまで、データ同期タスクでTwemproxy Redisクラスターの各Redisサーバーを同期します。 Redisサーバー1のデータ同期を設定する際、Tair (Redis OSS-Compatible)インスタンスにデータがない場合は、[事前チェックとインターセプト] を選択します。 Redisサーバー2からNへのデータ同期を設定するときは、[無視] を選択します。 そうしないと、データ同期中にエラーが発生する可能性があります。

    説明
    • 事前チェックとインターセプト: ターゲットデータベースが空かどうかを確認します。 ターゲットデータベースが空の場合、事前チェックに合格します。 ターゲットデータベースが空でない場合、事前チェック中にエラーが返され、データ同期タスクを開始できません。

    • 無視: 空のターゲットデータベースの事前チェックをスキップし、データ同期を続行します。 データ同期中に、コピー先データベースのキーがコピー元データベースのキーと同じ場合、コピー元データベースのキーはコピー先データベースのキーを上書きします。

    同期するオブジェクトの選択

    • [使用可能] セクションから1つ以上のデータベースを選択し、をクリックして [選択済み] セクションにデータベースを追加します。

    • 同期するオブジェクトとしてデータベースのみを選択できます。 同期するオブジェクトとしてキーを選択することはできません。

    データベースとテーブルの名前変更

    同期するために選択したオブジェクト。 このシナリオでは、オブジェクトの名前を変更することはできません。

    DMSがDDL操作を実行するときの一時テーブルのレプリケート

    DMSを使用してソースデータベースでオンラインDDL操作を実行する場合、オンラインDDL操作によって生成された一時テーブルを同期するかどうかを指定できます。

    • Yes: DTSは、オンラインDDL操作によって生成された一時テーブルのデータを同期します。

      説明

      オンラインDDL操作が大量のデータを生成する場合、データ同期タスクが遅延する可能性があります。

    • No: DTSは、オンラインDDL操作によって生成された一時テーブルのデータを同期しません。 ソースデータベースの元のDDLデータのみが同期されます。

      説明

      [いいえ] を選択すると、ターゲットデータベースのテーブルがロックされる可能性があります。

    失敗した接続の再試行時間

    既定では、DTSがソースデータベースまたはターゲットデータベースへの接続に失敗した場合、DTSは次の720分 (12時間) 以内に再試行します。 必要に応じて再試行時間を指定できます。 DTSが指定された時間内にソースデータベースとターゲットデータベースに再接続すると、DTSはデータ同期タスクを再開します。 それ以外の場合、データ同期タスクは失敗します。

    説明

    DTSが接続を再試行すると、DTSインスタンスに対して課金されます。 ビジネスニーズに基づいて再試行時間を指定することを推奨します。 ソースインスタンスとターゲットインスタンスがリリースされた後、できるだけ早くDTSインスタンスをリリースすることもできます。

  9. ページの右下隅にある [次へ] をクリックします。

  10. 初期同期を設定します。

    Configure initial synchronization

    説明

    値はInclude full data + incremental dataに設定されます。 DTSは、移行元のTweemproxy Redisクラスターから移行先のRedisデータベースに履歴データを同期し、増分データを同期します。

  11. ページの右下隅にあるをクリックします。事前チェック.

    説明
    • データ同期タスクを開始する前に、DTSは事前チェックを実行します。 データ同期タスクは、タスクが事前チェックに合格した後にのみ開始できます。

    • タスクが事前チェックに合格しなかった場合は、失敗した各項目の横にある提示アイコンをクリックして詳細を表示できます。

      • 詳細に基づいて問題をトラブルシューティングした後、新しい事前チェックを開始します。

      • 問題をトラブルシューティングする必要がない場合は、失敗した項目を無視して新しい事前チェックを開始してください。

  12. 次のメッセージが表示されたら、[事前チェック] ダイアログボックスを閉じます。[事前チェックの合格] その後、データ同期タスクが開始されます。

  13. 初期同期が完了し、データ同期タスクが同期状態になるまで待ちます。

    Synchronizing

    説明

    データ同期タスクのステータスは、[同期タスク] ページで確認できます。

  14. ステップ1〜13を繰り返して、他のすべてのRedisサーバーのデータ同期タスクを作成して構成します。

結果

このトピックでは、Tweemproxy Redisクラスターは2つのRedisサーバーで構成されています。 2つのデータ同期タスクを作成する必要があります。 次の図は、両方のタスクの初期同期が完了し、両方のタスクが同期状態にあることを示しています。

Synchronizing the Twemproxy Redis cluster

このトピックでは、データベースDB0が同期されています。 Data Management (DMS) を使用して、ターゲットTair (Redis OSS-Compatible)インスタンスにログインし、インスタンス内のキーの総数を確認できます。 キーの総数は、Tweemproxy Redisクラスターと同じです。 DMSの使用方法の詳細については、「DMSを使用したTair (Redis OSS-Compatible)インスタンスへのログイン」をご参照ください。

図1. Tair (Redis OSS-Compatible)インスタンス Total number of keys in the ApsaraDB for Redis instance

図2. ソースのTweproxy Redisクラスター Total number of keys in the Twemproxy Redis cluster