Data Transmission Service (DTS) は、Redis クラスター間の一方向同期をサポートしており、データ移行、アクティブ/アクティブアーキテクチャ、ジオディザスタリカバリなどのシナリオに最適です。このトピックでは、データ同期タスクを設定して、自主管理 Redis クラスターから Tair (Redis OSS-Compatible) インスタンスにデータを移行する方法について説明します。
Tair (Redis OSS-Compatible) インスタンスから自主管理 Redis クラスターにデータを同期する手順も同様です。ビジネス要件に応じて、ソースインスタンスと宛先インスタンスを設定する必要があります。
データ同期タスクを設定した後は、ソースまたは宛先データベースの アーキテクチャタイプを変更しないでください。たとえば、アーキテクチャをマスター/スレーブからクラスターに変更するなどです。これにより、データ同期タスクが失敗する可能性があります。
前提条件
-
自主管理 Redis データベースのバージョンが 2.8、3.0、3.2、4.0、または 5.0 であること。
説明宛先の Tair (Redis OSS-Compatible) インスタンスは、バージョン 4.0 または 5.0 である必要があります。異なるバージョン間でデータを同期する場合、以前のバージョンから新しいバージョンへの同期のみがサポートされることにご注意ください。事前に互換性を確認する必要があります。たとえば、テスト用に従量課金の Redis クラスターインスタンスを作成できます。テストが完了したら、インスタンスをリリースするか、サブスクリプションインスタンスに変換できます。
-
宛先の Tair (Redis OSS-Compatible) インスタンスのストレージ容量が、ソースの Redis データベースが使用するストレージ容量よりも大きいこと。
-
ソースの Redis クラスター内の各ノードで
psyncコマンドを実行でき、すべてのノードが接続に同じパスワードを使用していること。 -
repl-timeout パラメーターは、ソース Redis インスタンスのスレーブとマスター間のレプリケーションタイムアウトを指定します。デフォルト値は 60 秒です。
config set repl-timeout 600コマンドを実行して、値を 600 秒に設定することを推奨します。ソースデータベースが大きい場合は、必要に応じて repl-timeout パラメーターの値を増やしてください。
制限事項
DTS は、初期完全データ同期中にソースおよび宛先データベースのリソースを消費します。これにより、データベースサーバーの負荷が増加する可能性があります。データベースのトラフィックが多い場合やサーバーの仕様が低い場合は、データベースに高い負荷がかかったり、利用できなくなったりする可能性があります。データを同期する前に、影響を慎重に評価し、オフピーク時間に同期を実行してください。
-
同期リンクの安定性を確保するために、redis.conf ファイル内の
repl-backlog-sizeパラメーターの値を増やしてください。 -
同期の品質を確保するために、DTS はソースの Redis データベースに DTS_REDIS_TIMESTAMP_HEARTBEAT という名前のキーを挿入して、更新タイムスタンプを記録します。
-
ソースクラスターで
FLUSHDBまたはFLUSHALLコマンドを実行しないでください。これにより、ソースデータベースと宛先データベースの間でデータの不整合が発生する可能性があります。 宛先データベースのメモリが不足し、データのエビクションがトリガーされると、データの不整合が発生する可能性があります。これは、Tair (Redis OSS-compatible) のデフォルトのエビクションポリシー (maxmemory-policy) が volatile-lru であるためです。同期タスクは実行を継続しますが、データに不整合が生じます。
これを防ぐには、宛先データベースのエビクションポリシーを noeviction に設定します。宛先データベースのメモリが不足すると、データ書き込みが失敗し、タスクも失敗します。これにより、エビクションによるデータ損失を防ぐことができます。
説明データエビクションポリシーの詳細については、「Redis データエビクションポリシーの概要」をご参照ください。
ソースデータベースの一部のキーが有効期限切れに設定されている場合、有効期限が切れてもすぐに削除されないことがあります。その結果、info コマンドで確認できる宛先データベースのキー数が、ソースデータベースよりも少なくなる可能性があります。
説明有効期限ポリシーが設定されていない、または有効期限が切れていないキーの数は、ソースデータベースと宛先データベースで同じです。
データ同期中に、シャードの追加または削除によって自主管理 Redis データベースがスケールされたり、メモリがスケールアップされたりした場合は、タスクを再設定する必要があります。データ整合性を確保するために、タスクを再設定する前に、宛先の Redis インスタンスに同期されたデータをクリアする必要があります。
データ同期中に、自主管理 Redis データベースのエンドポイントが変更された場合は、タスクを再設定する必要があります。
-
スタンドアロン Redis インスタンスからクラスターモードの Redis インスタンスにデータを同期する場合、以下の制限が適用されます。Redis クラスターでは、同じスロットにあるキーに対してのみコマンドを操作できます。キーが複数のスロットにまたがるソースデータベースで複数キー操作を実行すると、次のエラーが発生します。
CROSSSLOT Keys in request don't hash to the same slotタスクの中断を防ぐために、データ同期中は単一キー操作のみを実行することを推奨します。
- 宛先インスタンスがクラスターインスタンスであり、そのシャードの 1 つがメモリ制限に達した場合、または宛先インスタンスのストレージ容量が不足した場合、DTS タスクはメモリ不足 (Out of Memory) エラーで失敗します。
-
宛先インスタンスで TDE (透過的データ暗号化) が有効になっている場合、DTS を使用してデータを同期することはできません。
課金
同期タイプ | 料金 |
スキーマ同期と完全データ同期 | 無料。 |
増分データ同期 | 有料です。詳細については、「課金概要」をご参照ください。 |
サポートされる同期トポロジ
一対一の一方向同期
一対多の一方向同期
カスケード型の一方向同期
これらの同期トポロジとその注意事項の詳細については、「データ同期トポロジの概要」をご参照ください。
サポートされる同期コマンド
APPEND
BITOP、BLPOP、BRPOP、BRPOPLPUSH
DECR、DECRBY、DEL
EVAL、EVALSHA、EXEC、EXPIRE、EXPIREAT
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
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
SWAPDB、UNLINK (ソース Redis インスタンスがバージョン 4.0 の場合のみサポート)
XADD、XCLAIM、XDEL、XAUTOCLAIM、XGROUP CREATECONSUMER、XTRIM
PUBLISH コマンドはサポートされていません。
EVAL または EVALSHA によって呼び出される Lua スクリプトについては、宛先が実行結果を明示的に返さないため、DTS は増分データ同期中にスクリプトが正常に実行されることを保証できません。
sync または psync を使用して List データを再送信する場合、DTS は宛先の既存データをクリアしません。これにより、データが重複する可能性があります。
操作手順
-
説明
タスクを購入する際、ソースと宛先の両方のインスタンスタイプを Redis に設定します。
-
Data Transmission Service コンソールにログインします。
説明Data Management (DMS) コンソールにリダイレクトされた場合は、右下隅の
アイコンをクリックし、次に
アイコンをクリックして以前のバージョンの DTS コンソールに戻ります。 -
左側のナビゲーションウィンドウで、データ同期 をクリックします。
-
[同期タスク] ページの上部で、宛先インスタンスが配置されているリージョンを選択します。
-
購入したデータ同期インスタンスを見つけ、[タスクの設定] をクリックします。
-
ソースインスタンスと宛先インスタンスを設定します。
カテゴリ
設定
説明
N/A
同期タスク名
DTS は自動的にタスク名を生成します。簡単に識別できるように、わかりやすい名前を指定することを推奨します。名前は一意である必要はありません。
ソースインスタンスの詳細
インスタンスタイプ
[ECS 上の自己管理データベース] を選択します。ソースデータベースがデプロイされている場所に応じて、[ECS 上の自己管理データベース] または [Express Connect/VPN Gateway/Smart Access Gateway 経由で接続された自己管理データベース] を選択できます。
このトピックでは、[ECS 上の自己管理データベース] を例として使用します。他のタイプの自主管理 Redis データベースの設定プロセスも同様です。
インスタンスリージョン
データ同期タスクを購入したときに選択したソースインスタンスのリージョンです。この設定は変更できません。
ECS インスタンス ID
自主管理 Redis クラスターのマスターノードが存在する ECS インスタンスの ID を選択します。
データベースタイプ
これは Redis に固定されています。
インスタンスモード
クラスター を選択します。
ポート
自主管理 Redis クラスターのマスターノードのサービスポートを入力します。この例では、7000 が入力されています。
データベースパスワード
自主管理 Redis データベースのパスワードを入力します。
説明このパラメーターはオプションです。パスワードが設定されていない場合は、空白のままにすることができます。
宛先インスタンスの詳細
インスタンスタイプ
[Redis インスタンス] を選択します。
インスタンスリージョン
データ同期タスクを購入したときに選択した宛先インスタンスのリージョンです。この設定は変更できません。
インスタンス ID
宛先の Tair (Redis OSS-Compatible) インスタンスの ID を選択します。
データベースパスワード
宛先の Tair (Redis OSS-Compatible) インスタンスのパスワードを入力します。
説明データベースパスワードは、<ユーザー名>:<パスワード> の形式である必要があります。たとえば、Redis インスタンスのカスタムユーザー名が admin で、パスワードが Rp829dlwa の場合、admin:Rp829dlwa と入力します。
-
ページ右下の [ホワイトリストを承認して次のステップへ] をクリックします。
説明-
ソースまたは宛先が ApsaraDB RDS for MySQL や ApsaraDB for MongoDB インスタンスなどの Alibaba Cloud データベースインスタンス、または ECS 上の自己管理データベースである場合、DTS は対応するリージョンのサーバーの CIDR ブロックをデータベースインスタンスのホワイトリストまたは ECS インスタンスのセキュリティグループルールに自動的に追加します。手動で追加する必要はありません。詳細については、「DTS サーバーの CIDR ブロック」をご参照ください。
-
DTS タスクが完了またはリリースされた後、DTS サーバーの CIDR ブロックを手動で削除してください。
-
既存テーブルの処理モードと同期するオブジェクトを設定します。

設定
説明
既存テーブルの処理モード
[事前チェックしてエラーを報告]:宛先データベースが空であるかを確認します。同期対象の宛先データベースが空の場合、確認項目は合格となります。空でない場合は、事前チェックフェーズでエラーが報告され、データ同期タスクは開始されません。
[無視して続行]:宛先データベースが空であるかの確認をスキップします。
警告[無視して続行] を選択し、同期中に宛先データベースのキーがソースデータベースのキーと同じであった場合、ソースデータベースのデータが宛先データベースのデータを上書きします。このオプションは慎重に選択してください。
同期するオブジェクト
[ソースオブジェクト] ボックスで、同期するデータベースをクリックし、
をクリックして [選択したオブジェクト] ボックスに移動します。同期の粒度はデータベースレベルです。キーレベルの選択はサポートされていません。
マッピング名の変更
マッピング名の変更はサポートされていません。
ソーステーブルでのオンライン DDL 中に一時テーブルを宛先データベースにレプリケートする
Data Management Service (DMS) を使用してソースデータベースでオンライン DDL 変更を実行する場合、これらの変更によって生成された一時テーブルを同期するかどうかを指定できます。
-
○:オンライン DDL 変更によって生成された一時テーブルからデータを同期します。
説明オンライン DDL 変更によって一時テーブルに大量のデータが生成されると、データ同期が遅延する可能性があります。
-
いいえ:一時テーブルからデータを同期しません。ソースデータベースからの元の DDL データのみが同期されます。
説明このオプションは、宛先データベースでテーブルロックを引き起こします。
接続失敗時の再試行期間
デフォルトでは、DTS がソースまたは宛先データベースへの接続に失敗した場合、720 分 (12 時間) 再試行します。カスタムの再試行期間を指定することもできます。指定された期間内に DTS が再接続した場合、同期タスクは自動的に再開されます。それ以外の場合、タスクは失敗します。
説明DTS インスタンスは接続再試行期間中も課金されるため、ビジネス要件に基づいてカスタムの再試行期間を設定するか、ソースおよび宛先インスタンスがリリースされた後、速やかに DTS インスタンスをリリースしてください。
設定が完了したら、ページ右下の [次へ] をクリックします。
初期同期オプションを設定します。このオプションは [完全データ + 増分データ] に設定されています。
説明DTS は、ソース Redis インスタンスの既存データを宛先 Redis インスタンスに同期し、その後、増分データを同期します。
バージョン関連のエラーメッセージが表示された場合は、プロンプトに従ってソース Redis インスタンスを指定されたバージョンにアップグレードする必要があります。バージョンのアップグレード方法の詳細については、「メジャーバージョンのアップグレード」および「マイナーバージョンとプロキシバージョンのアップグレード」をご参照ください。
-
設定が完了したら、ページ右下の [事前チェックして開始] をクリックします。
説明-
DTS は、同期タスクが開始される前に事前チェックを実行します。タスクは、事前チェックに合格した後にのみ開始できます。
-
事前チェックが失敗した場合は、失敗した項目の横にある
アイコンをクリックして詳細を表示します。-
提供された詳細に基づいて問題を修正し、事前チェックを再実行します。
-
修正が不要な警告項目がある場合は、無視 または [警告を無視して再度事前チェック] を選択して項目をスキップし、事前チェックを再実行できます。
-
-
[事前チェック] ダイアログボックスで、[事前チェックに合格しました] というメッセージが表示された後、[事前チェック] ダイアログボックスを閉じます。同期タスクは自動的に開始されます。
同期タスクのリンク初期化が完了するのを待ちます。ステータスが [同期中] に変わります。
説明データ同期タスクのステータスは、[データ同期] ページで確認できます。