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

:オンプレミス Redis から ApsaraDB for Redis への移行

最終更新日:Mar 19, 2020

DTS では、オンプレミスの Redis から ApsaraDB for Redis にデータを移行できます。変更データレプリケーション機能を使用すると、サービスを停止せずに移行を実行できます。

注意: Redis の移行では、ソースデータベースが psync または sync コマンドをサポートしている必要があります。したがって、現在のところ、Redis 移行のソースデータベースは、クラウドベースではなくオンプレミスである必要があります。

移行タイプ

オンプレミスの Redis から ApsaraDB for Redis へのデータ移行の場合、DTS は、既存データ移行および変更データレプリケーションの、2 つの移行タイプをサポートしています。これらの移行タイプの機能と制限は次のとおりです。

  • 既存データ移行

    これにより、ソース Redis インスタンス内の既存のすべてのキーが、ターゲット Redis インスタンスに移行されます。

  • 変更データレプリケーション

    データの変更をレプリケートすることも選択すると、移行中に更新されたソースインスタンスのキーはターゲットインスタンスに同期され、最終的にソースインスタンスはターゲットインスタンスと動的に同期します。これにより、オンプレミスの Redis の稼動中に移行を実行できます。

移行機能

Redis データの移行では、次のコマンドがサポートされています。

  • APPEND
  • BITOP, BLPOP, BRPOP, BRPOPLPUSH
  • DECR, DECRBY, DEL
  • EVAL, EVALSHA, EXEC, EXPIRE, EXPIREAT
  • FLUSHALL, FLUSHDB
  • GEOADD, GETSET
  • HDEL, HINCRBY, HINCRBYFLOAT, HMSET, HSET, HSETNX
  • INCR, INCRBY, INCRBYFLOAT
  • LINSERT, LPOP, LPUSH, LPUSHX, LREM, LSET, LTRIM
  • MOVE, MSET, MSETNX, MULTI
  • PERSIST, PEXPIRE, PEXPIREAT, PFADD, PFMERGE, PSETEX, PUBLISH
  • RENAME, RENAMENX, RESTORE, RPOP, RPOPLPUSH, RPUSH, RPUSHX
  • SADD, SDIFFSTORE, SELECT, SET, SETBIT, SETEX, SETNX, SETRANGE, SINTERSTORE, SMOVE, SPOP, SREM, SUNIONSTORE
  • ZADD, ZINCRBY, ZINTERSTORE, ZREM, ZREMRANGEBYLEX, ZUNIONSTORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE

前提条件

ソースインスタンスの前提条件

  • DTS が、ソースインスタンスで psync または sync コマンドを実行できること。
  • ソースインスタンスが、パブリック IP アドレスを持つオンプレミス Redis インスタンスか、ECS ベースの Redis インスタンスか、専用回線 (高速リンク) または VPN を介して VPC に接続されたオンプレミス Redis インスタンスかの、いずれかであること。

注意: クラウドベースの Redis インスタンスからデータを移行するには、Alibaba Cloud テクニカルサポートにお問い合わせください。

ターゲットインスタンスの前提条件

ターゲットインスタンスは、クラシックまたは VPC ネットワークに接続された ApsaraDB for Redis インスタンスか、パブリック IP アドレスを持つオンプレミス Redis インスタンスか、ECS ベースの Redis インスタンスか、VPC に専用回線 (高速リンク) で接続されたオンプレミスの Redis インスタンスかの、いずれかである必要があります。

インスタンスアクセスモード

  • ソース Redis インスタンスが直接接続文字列 (形式: IP:Port) を提供できる場合、DTS は Redis インスタンスに直接アクセスできます。
  • ソース Redis インスタンスが専用回線 (高速リンク) 経由で VPC に接続されたオンプレミス Redis インスタンスである場合は、専用回線経由でインスタンスにアクセスするように DTS を設定します。詳細については、「オンプレミスデータベースの専用回線での移行」をご参照ください。
  • ソース Redis インスタンスが、VPN 経由で VPC に接続されたオンプレミス Redis インスタンスである場合、接続文字列 IP:Port でデータを転送するプロキシを設定します。詳細については、「nginx プロキシの設定」をご参照ください。

移行の制限

  • EVAL または EVALSHA コマンドを使用して Lua スクリプトを呼び出すと、増分データ移行中に、ターゲットはスクリプトの実行結果を明示的に返さないため、DTS はスクリプトの実行を保証できません。
  • Redis のリストの場合、sync または psync を呼び出して再送信を実行すると、DTS はターゲット上の既存のデータをフラッシュしないため、重複したデータが発生することがあります。

nginx プロキシの設定

DTS が VPN 経由で VPC に接続されたオンプレミス Redis インスタンスにアクセスできるようにするには、ECS に nginx をデプロイして、パブリックネットワークの EIP へ転送します。

注意: ECS が存在する VPC は、オンプレミスの Redis インスタンスに接続されている VPC でなければなりません。

nginx を使って転送を設定する方法の例を次に示します。

(1) nginx プロキシのデプロイ

ECS サーバーで、次のコマンドを使用して nginx プロキシをデプロイします。

  1. yum install nginx

(2) nginx 転送の設定

nginx 設定ファイル /etc/nginx/nginx.conf を変更して、Redis を監視するバックエンドを次のように設定します。

  1. 設定ファイルで次の HTTP 設定をコメントアウトします。

    HTTP Configurations

  2. TCP 設定を設定ファイルに追加します。

    1. stream{
    2. upstream backend{
    3. hash $remote_addr consistent;
    4. # Set the connection string and port number of the back-end Redis. The time-out period is 10 seconds and the maximum number of attempts is 3.
    5. server r-bp1b294374634044.redis.rds.aliyuncs.com:6379 max_fails=3 fail_timeout=10s;
    6. }
    7. server{
    8. # nginx access port
    9. listen 3333;
    10. # Set the time-out period for nginx to connect to the back-end server.
    11. proxy_connect_timeout 20s;
    12. # Disconnect if the previous successful access (connect or read/write) to the back-end server was more than 5 minutes ago.
    13. Proxy_timeout 5m;
    14. # Transfer the TCP connections and data to the backend server called "backend".
    15. proxy_pass backend;
    16. }
    17. }

    たとえば、Redis 接続アドレスが r-bp1b294374634044.redis.rds.aliyuncs.com:6379 で、nginx プロキシの転送ポートが 3333 の場合、TCP の設定は次のようになります。

    TCP Configuration

(3) Redis インスタンスの転送ポート経由でのアクセス

nginx コマンドを実行して、nginx プロキシサービスを開始します。

redis_cli を使用して nginx 転送ポートにアクセスし、プロキシ転送が正常かどうかをテストできます。次の例では、nginx が存在する ECS の EIP が 114.55.89.152 であることを前提としています。

nginx test

上の図に示すように、nginx プロキシ転送ポートにアクセスすることで Redis インスタンスにアクセスできます。

VPN 経由で VPC に接続されたオンプレミス Redis インスタンスに、続けて DTS 移行タスクを作成するときは、nginx プロキシの接続アドレスを入力します。

移行タスクの作成

上記のすべての前提条件が満たされたら、データの移行を開始できます。ここでは、パブリック IP を持つオンプレミス Redis インスタンスから、クラシックネットワーク内の ApsaraDB for Redis インスタンスへ移行する方法について説明します。

  1. DTS コンソールに移動し、右上にある [移行タスクの作成] をクリックします。

  2. インスタンス接続情報を設定します。

    • タスク名
      DTS は自動的にタスク名を生成します。タスク名は一意である必要はありません。必要に応じて変更することができます。

    • ソースデータベース
      インスタンスタイプ: [オンプレミスデータベース] を選択します。
      インスタンスリージョン: ソースインスタンスに最も近いリージョンを選択します。
      データベースエンジン: [Redis] を選択します。
      インスタンスモード: デフォルト値は [シングル] です。クラスターインスタンスは将来サポートする予定です。
      ホスト名または IP アドレス: オンプレミス Redis インスタンスのアドレスを入力します。nginx プロキシ転送が設定されている場合は、転送先の接続アドレスを入力します。
      ポート: オンプレミスの Redis インスタンスのリスニングポート番号を入力します。nginx プロキシ転送が設定されている場合は、転送ポート番号を入力します。
      データベースのパスワード: オンプレミスの Redis インスタンスのパスワードを入力します。インスタンスにパスワードがない場合は、このフィールドを空白のままにします。

    • ターゲットデータベース
      インスタンスタイプ: [Redis インスタンス] を選択します。
      インスタンスリージョン: ターゲットインスタンスが配置されているリージョンを選択します。
      Redis インスタンス ID: ターゲットインスタンスのインスタンス ID を選択します。
      データベースのパスワード: ターゲットインスタンスのパスワードを入力します。

    connection

    接続情報を設定したら、右下隅の [ホワイトリストを承認して次のステップに進む] をクリックします。これにより、ターゲットの Redis インスタンスの IP アドレスホワイトリストに DTS サーバーの IP アドレスが追加されます。そうしないと、DTS サーバーがターゲット Redis インスタンスにアクセスできないため、移行は失敗します。

  3. 移行タイプと移行対象オブジェクトを設定します。

    • 移行タイプ

      既存のデータのみを移行するには、[既存データ移行] を選択します。

      サービスを停止せずに移行を実行するには、両方の移行タイプを選択します。

    • 移行対象オブジェクト

      移行するデータベースを選択します。現在、DTS は Redis インスタンスのデータベース全体の移行のみをサポートしています。

  4. 事前チェックを開始します。

    DTS は、移行を開始する前に事前チェックを実行します。詳細は、事前チェック項目と修正方法の項をご参照ください。

    事前チェックが失敗した場合は、エラー項目の横にある [失敗] をクリックして問題を解決し、再度事前チェックを実行してください。

  5. 移行タスクを開始します。

    事前チェックが成功したら、移行タスクを開始します。タスクのリストで、移行のステータスと進行状況を表示できます。

事前チェック項目と修正方法

オンプレミスの Redis から ApsaraDB for Redis への移行には、次の項目が適用されます。

チェック項目 説明 修正方法
ソースデータベースの接続チェック DTS サーバーとソース Redis インスタンス間の接続を確認してください。 (1) 誤った接続情報を修正します。
(2) ポートが他のサーバーからアクセスできるかどうかを確認します。
ターゲットデータベースの接続チェック DTS サーバーとターゲット ApsaraDB for Redis インスタンス間の接続を確認してください。 誤った接続情報を修正します。
データベースマッピングチェック 複数のデータベースから 1 つのデータベースへの移行かどうかを確認してください。 現在、DTS は複数のデータベースから 1 つのデータベースへの移行をサポートしていません。タスク設定を変更します。
空のターゲットデータベースチェック ターゲットインスタンスで、移行対象のデータベースが空かどうかを確認してください。 ターゲットの Redis インスタンスで、対応するデータベースキーを削除します。
変更データレプリケーションのコンフリクトチェック Redis インスタンスで、他に進行中の変更データレプリケーションタスクがあるかどうかを確認してください。 他の変更データレプリケーションタスクを終了または削除します。