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 プロキシをデプロイします。
yum install nginx
(2) nginx 転送の設定
nginx 設定ファイル /etc/nginx/nginx.conf を変更して、Redis を監視するバックエンドを次のように設定します。
設定ファイルで次の HTTP 設定をコメントアウトします。
TCP 設定を設定ファイルに追加します。
stream{
upstream backend{
hash $remote_addr consistent;
# 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.
server r-bp1b294374634044.redis.rds.aliyuncs.com:6379 max_fails=3 fail_timeout=10s;
}
server{
# nginx access port
listen 3333;
# Set the time-out period for nginx to connect to the back-end server.
proxy_connect_timeout 20s;
# Disconnect if the previous successful access (connect or read/write) to the back-end server was more than 5 minutes ago.
Proxy_timeout 5m;
# Transfer the TCP connections and data to the backend server called "backend".
proxy_pass backend;
}
}
たとえば、Redis 接続アドレスが r-bp1b294374634044.redis.rds.aliyuncs.com:6379 で、nginx プロキシの転送ポートが 3333 の場合、TCP の設定は次のようになります。
(3) Redis インスタンスの転送ポート経由でのアクセス
nginx コマンドを実行して、nginx プロキシサービスを開始します。
redis_cli を使用して nginx 転送ポートにアクセスし、プロキシ転送が正常かどうかをテストできます。次の例では、nginx が存在する ECS の EIP が 114.55.89.152 であることを前提としています。
上の図に示すように、nginx プロキシ転送ポートにアクセスすることで Redis インスタンスにアクセスできます。
VPN 経由で VPC に接続されたオンプレミス Redis インスタンスに、続けて DTS 移行タスクを作成するときは、nginx プロキシの接続アドレスを入力します。
移行タスクの作成
上記のすべての前提条件が満たされたら、データの移行を開始できます。ここでは、パブリック IP を持つオンプレミス Redis インスタンスから、クラシックネットワーク内の ApsaraDB for Redis インスタンスへ移行する方法について説明します。
DTS コンソールに移動し、右上にある [移行タスクの作成] をクリックします。
インスタンス接続情報を設定します。
タスク名
DTS は自動的にタスク名を生成します。タスク名は一意である必要はありません。必要に応じて変更することができます。ソースデータベース
インスタンスタイプ: [オンプレミスデータベース] を選択します。
インスタンスリージョン: ソースインスタンスに最も近いリージョンを選択します。
データベースエンジン: [Redis] を選択します。
インスタンスモード: デフォルト値は [シングル] です。クラスターインスタンスは将来サポートする予定です。
ホスト名または IP アドレス: オンプレミス Redis インスタンスのアドレスを入力します。nginx プロキシ転送が設定されている場合は、転送先の接続アドレスを入力します。
ポート: オンプレミスの Redis インスタンスのリスニングポート番号を入力します。nginx プロキシ転送が設定されている場合は、転送ポート番号を入力します。
データベースのパスワード: オンプレミスの Redis インスタンスのパスワードを入力します。インスタンスにパスワードがない場合は、このフィールドを空白のままにします。ターゲットデータベース
インスタンスタイプ: [Redis インスタンス] を選択します。
インスタンスリージョン: ターゲットインスタンスが配置されているリージョンを選択します。
Redis インスタンス ID: ターゲットインスタンスのインスタンス ID を選択します。
データベースのパスワード: ターゲットインスタンスのパスワードを入力します。
接続情報を設定したら、右下隅の [ホワイトリストを承認して次のステップに進む] をクリックします。これにより、ターゲットの Redis インスタンスの IP アドレスホワイトリストに DTS サーバーの IP アドレスが追加されます。そうしないと、DTS サーバーがターゲット Redis インスタンスにアクセスできないため、移行は失敗します。
移行タイプと移行対象オブジェクトを設定します。
移行タイプ
既存のデータのみを移行するには、[既存データ移行] を選択します。
サービスを停止せずに移行を実行するには、両方の移行タイプを選択します。
移行対象オブジェクト
移行するデータベースを選択します。現在、DTS は Redis インスタンスのデータベース全体の移行のみをサポートしています。
事前チェックを開始します。
DTS は、移行を開始する前に事前チェックを実行します。詳細は、事前チェック項目と修正方法の項をご参照ください。
事前チェックが失敗した場合は、エラー項目の横にある [失敗] をクリックして問題を解決し、再度事前チェックを実行してください。
移行タスクを開始します。
事前チェックが成功したら、移行タスクを開始します。タスクのリストで、移行のステータスと進行状況を表示できます。
事前チェック項目と修正方法
オンプレミスの Redis から ApsaraDB for Redis への移行には、次の項目が適用されます。
チェック項目 | 説明 | 修正方法 |
---|---|---|
ソースデータベースの接続チェック | DTS サーバーとソース Redis インスタンス間の接続を確認してください。 | (1) 誤った接続情報を修正します。 (2) ポートが他のサーバーからアクセスできるかどうかを確認します。 |
ターゲットデータベースの接続チェック | DTS サーバーとターゲット ApsaraDB for Redis インスタンス間の接続を確認してください。 | 誤った接続情報を修正します。 |
データベースマッピングチェック | 複数のデータベースから 1 つのデータベースへの移行かどうかを確認してください。 | 現在、DTS は複数のデータベースから 1 つのデータベースへの移行をサポートしていません。タスク設定を変更します。 |
空のターゲットデータベースチェック | ターゲットインスタンスで、移行対象のデータベースが空かどうかを確認してください。 | ターゲットの Redis インスタンスで、対応するデータベースキーを削除します。 |
変更データレプリケーションのコンフリクトチェック | Redis インスタンスで、他に進行中の変更データレプリケーションタスクがあるかどうかを確認してください。 | 他の変更データレプリケーションタスクを終了または削除します。 |