Data Transmission Service (DTS) を使用した Tair および Redis インスタンスのデータ移行とデータ同期に関してよくあるご質問にお答えします。
データ移行とデータ同期とは
データ移行 は、Tair またはオープンソース Redis インスタンスから別の Tair またはオープンソース Redis インスタンスにキーと値のペアをコピーします。このタスクは1回限り実行され、すべてのデータが転送されると自動的に停止します。1回限りの一括転送が必要な場合に使用します。例えば、セルフマネージド Redis インスタンスから Alibaba Cloud 上の Tair インスタンスにデータを移動する場合などです。
データ同期 は、ソースインスタンスから宛先インスタンスにキーと値のペアをリアルタイムで継続的にレプリケーションします。このタスクは継続的に実行され、2つのインスタンス間のデータ整合性を維持します。継続的なレプリケーションが必要な場合に使用します。例えば、アクティブ地理的冗長性やディザスタリカバリなどです。
どちらの操作も、ソースインスタンスに影響を与えることなく宛先インスタンスにデータをレプリケーションします。
データ移行とデータ同期の仕組み
どちらの機能も、インスタンス間の変更をキャプチャして適用するために DTS を利用しています。基盤となるアーキテクチャの詳細については、「システムアーキテクチャと設計概念」をご参照ください。
DTS を使用したデータ移行とデータ同期の違い
以下の表で、適切なアプローチを選択するための主要な観点を比較します。
DTS データ同期は、データ移行よりも多くの Tair シナリオと機能をサポートしています。ユースケースの要件が許す場合は、データ同期を推奨します。詳細については、「データ同期」をご参照ください。
| 観点 | データ移行 | データ同期 |
|---|---|---|
| 一般的なユースケース | オンプレミスデータベース、ECS インスタンス上のセルフマネージドデータベース、またはサードパーティクラウドプラットフォームから Alibaba Cloud 上の Tair インスタンスへの1回限りの転送 | Tair インスタンス間の継続的なリアルタイムレプリケーション。アクティブ地理的冗長性、ディザスタリカバリ、またはデータ分析に利用されます |
| サポートされるシナリオ | データ移行のサポート | データ同期のサポート |
| 主な機能 | 異なる Alibaba Cloud アカウントが所有する Virtual Private Cloud (VPC) 内のセルフマネージドデータベース間の移行をサポートします | 重複キーの処理モード、インスタンス間の双方向同期、および異なる Alibaba Cloud アカウントが所有する VPC 内のセルフマネージドデータベース間のデータ同期をサポートします |
| 課金 | スキーマ移行とフルデータ移行は無料です。増分データ移行 (オプション) は 期間 によって課金されます (移行されるデータ量に関係なく)。従量課金のみ利用可能です。 | スキーマ移行とフルデータ移行は無料です。増分データ移行が開始された後、期間 によって課金されます。従量課金とサブスクリプションの両方が利用可能です。 |
事前チェック中にエラーが発生した場合の対処法
移行または同期タスクが開始される前に、DTS はソースデータベースと宛先データベースに対して事前チェックを実行し、タスクが続行可能であることを確認します。事前チェックが失敗した場合は、以下のリソースを参照して問題を特定し、修正してください。
サードパーティツールによるデータ移行のための SYNC/PSYNC コマンド権限
Alibaba Cloud Redis および Tair インスタンスでは、デフォルトで SYNC および PSYNC コマンドが無効になっており、有効化できません。その結果、サードパーティの移行または同期ツール (sync/psync モードの redis-shake や他のクラウドプロバイダーの DTS サービスなど) は、SYNC/PSYNC プロトコルを介して Alibaba Cloud Redis インスタンスに対する増分同期を実行できません。
Alibaba Cloud Redis インスタンスから外部環境にデータを移行するには、Alibaba Cloud DTS を使用してください。
ソースデータベースが ApsaraDB for Tair インスタンスの場合、ソースデータベースで PSYNC コマンドの権限を取得する必要はありません。代わりに DTS を使用して増分データ移行を実行できます。
データ移行または同期の所要時間
期間を正確に見積もることはできません。以下の時間はあくまで目安です。小規模なデータ量 (GB 未満) は通常数分以内に完了します。中規模のデータ量 (数 GB) は通常数十分以内に完了します。大規模なデータ量 (数十 GB 以上) は数時間かかる場合があります。
実際の期間は、データ量、帯域幅、DTS インスタンスのクラス、インスタンスの負荷といった要因の影響を受けるため、大きく異なる場合があります。
DTS 事前チェックにおける重複キーの表示
DTS 事前チェックでは、宛先データベースの特定の重複キーは一覧表示されません。宛先データベースが空でないことのみが報告されます。重複データを特定する必要がある場合は、ご自身で宛先データベースにクエリを実行し、結果をソースデータベースと比較してください。
プロキシモードの Redis インスタンスへのデータ同期で同期レイテンシーが発生した場合の対処法
プロキシモードの Redis インスタンスは Lua スクリプトに対して構文チェックを実行し、script_check_enable パラメーターはデフォルトで有効になっています。ソースインスタンスがプロキシモードの構文要件を満たさない Lua スクリプトを実行すると (例えば、redis.call または redis.pcall の最初の引数が文字列リテラルではなく変数である場合)、宛先インスタンスがエラーを返すため、DTS の増分同期が停止します。この結果、同期レイテンシーが継続的に増加します。
これを解決するには、プロキシモードの宛先インスタンスのパラメーター設定で script_check_enable を無効にし、DTS 同期タスクを再起動してください。ソースインスタンスの書き込みスループットが減少すると、レイテンシーは徐々に解消されます。
DTS を使用したクロスリージョン同期における宛先 Tair インスタンスのホワイトリスト設定
DTS を使用してクロスリージョンデータ同期を行う場合 (例えば、中国 (上海) から中国 (張家口) へ同期する場合など)、ソースリージョンと宛先リージョンの両方の DTS サーバーの CIDR ブロックを宛先 Tair インスタンスのホワイトリストに追加する必要があります。これにより、DTS が宛先インスタンスに接続して同期を完了できるようになります。