Data Transmission Service (DTS) は、Tair (Redis OSS-compatible) インスタンス間の一方向データ同期をサポートしています。この機能は、アクティブ ジオレプリケーションや ジオディザスタリカバリ などのシナリオに適しています。このトピックでは、Tair (Redis OSS-compatible) インスタンス間の一方向データ同期を設定する方法について説明します。
概要
完全なデータ移行
DTS を使用すると、ソースデータベースからターゲットデータベースに既存のすべてのデータを無料で移行できます。
増分データ同期
完全なデータ移行を実行した後、DTS はソースデータベースからターゲットデータベースへの増分データをリアルタイムで同期できます。 増分データ移行の料金は、転送されるデータ量ではなく、移行の期間に基づいて課金されます。 詳細については、「課金対象項目」をご参照ください。
前提条件
宛先インスタンスとして Tair (Redis OSS-compatible) インスタンスが作成され、宛先インスタンスに割り当てられたメモリがソースインスタンスで使用されているメモリよりも大きくなっています。 詳細については、「ステップ 1: インスタンスの作成」をご参照ください。
宛先データベースの合計メモリ量は、ソースデータベースで使用されているメモリ量よりも少なくとも 10% 大きくしておくことをお勧めします。 データ移行タスクの実行時に宛先データベースのメモリ量が不足している場合、データの不整合やタスクの失敗などの問題が発生する可能性があります。 この場合、宛先データベースを空にして、データ移行タスクを再設定してください。
注意事項
データ移行タスクの実行中は、ソースデータベースまたは宛先データベースの仕様やエンドポイントをスケーリングまたは変更しないでください。 そうしないと、データ移行タスクは失敗します。 データ移行タスクが失敗した場合は、変更を考慮してタスクを再設定してください。 さらに、データ移行はソースデータベースと宛先データベースのリソースを消費します。 データ移行はオフピーク時に行うことをお勧めします。
手順
データ同期タスクページに移動します。
Data Management (DMS) コンソール にログインします。
上部のナビゲーションバーで、データ + AI をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[タスクの作成] をクリックします。
ソースデータベースと宛先データベースを設定し、ページの下部にある [接続テストと続行] をクリックします。 次の表にパラメータを示します。
セクション
パラメータ
説明
該当なし
タスク名
DTS タスクの名前。 DTS はタスク名を自動的に生成します。 タスクを識別しやすい説明的な名前を指定することをお勧めします。 一意のタスク名を指定する必要はありません。
ソースデータベース
[DMS データベースインスタンスを選択]
ソースデータベースを DMS に登録している場合は、データベースを選択できます。 ソースデータベースを選択した後、データベースに関する情報を入力する必要はありません。 ソースデータベースを DMS に登録していない場合は、このオプションを無視してください。
データベースタイプ
ソースデータベースの種類。 [tair/redis] を選択します。
アクセス方法
ソースデータベースのアクセス方法。 [alibaba Cloud インスタンス] を選択します。
インスタンスリージョン
ソースインスタンスが存在するリージョン。
[alibaba Cloud アカウント間でデータをレプリケート]
Alibaba Cloud アカウント間でデータを移行するかどうかを指定します。 この例では、[いいえ] を選択します。
[インスタンス ID]
ソースインスタンスの ID。
[認証方法]
ビジネス要件に基づいて、[パスワードログイン] または [シークレットフリーログイン] を選択します。 この例では、[パスワードログイン] を選択します。
説明インスタンスで パスワードなしのアクセス機能 が有効になっていない場合は、[パスワードログイン] を選択します。
データベースパスワード
ソースデータベースへの接続に使用するパスワード。
説明このパラメータはオプションです。 パラメータを空のままにすることができます。
カスタムアカウントを使用する場合は、アカウントに読み取り権限があることを確認してください。 データベースパスワードを <user>:<password> 形式で指定します。 たとえば、ソースデータベースにログインするために使用するカスタムアカウントのユーザー名が admin で、パスワードが Rp829dlwa の場合は、データベースパスワードとして admin:Rp829dlwa を指定します。
宛先データベース
[DMS データベースインスタンスを選択]
宛先データベースを DMS に登録している場合は、データベースを選択できます。 宛先データベースを選択した後、データベースに関する情報を入力する必要はありません。 宛先データベースを DMS に登録していない場合は、このオプションを無視してください。
データベースタイプ
宛先データベースの種類。 デフォルトでは、[tair/redis] が選択されています。
アクセス方法
宛先データベースのアクセス方法。 [alibaba Cloud インスタンス] を選択します。
インスタンスリージョン
宛先インスタンスが存在するリージョン。
[インスタンス ID]
宛先インスタンスの ID。
[認証方法]
ビジネス要件に基づいて、[パスワードログイン] または [シークレットフリーログイン] を選択します。 この例では、[パスワードログイン] を選択します。
説明インスタンスで パスワードなしのアクセス機能 が有効になっていない場合は、[パスワードログイン] を選択します。
データベースパスワード
宛先データベースへの接続に使用するパスワード。
説明カスタムアカウントを使用する場合は、アカウントに書き込み権限があることを確認してください。 データベースパスワードを <user>:<password> 形式で指定します。 たとえば、宛先データベースにログインするために使用するカスタムアカウントのユーザー名が admin で、パスワードが Rp829dlwa の場合は、データベースパスワードとして admin:Rp829dlwa を指定します。
タスクオブジェクトを設定し、ページの下部にある [次へ: 詳細設定] をクリックします。 次の表にパラメータを示します。
パラメータ
説明
同期タイプ
データ同期タイプ。 デフォルトでは、[完全データ同期と増分データ同期] が選択されています。
競合テーブルの処理モード
[事前チェックとエラー報告] (デフォルト): 宛先データベースにキーが存在するかどうかを確認します。
キーが存在する場合、事前チェック中にエラーが返され、データ移行タスクを開始できません。 キーが存在しない場合、事前チェックは合格です。
[エラーを無視して続行]: [宛先データベース内のオブジェクトの存在を確認する] チェック項目をスキップします。 同じ名前のキーが宛先データベースに既に存在する場合、キーは上書きされます。
ソースオブジェクト と 選択中のオブジェクト
ソースオブジェクト セクションで同期するオブジェクトを選択し、
をクリックしてオブジェクトを 選択中のオブジェクト セクションに移動します。 選択したオブジェクトを削除するには、選択中のオブジェクト セクションでオブジェクトを選択し、
をクリックしてオブジェクトを ソースオブジェクト セクションに移動します。
説明移行するオブジェクトとしてデータベース (DB 0 ~ DB 255) を選択できます。
詳細設定を行い、ページの下部にある [次のステップ: データ検証] をクリックします。
ほとんどの場合、デフォルト設定を保持できます。 詳細については、このトピックの「付録: 詳細設定」セクションをご参照ください。
データ検証を設定し、ページの下部にある [次へ: タスク設定の保存と事前チェック] をクリックします。
ほとんどの場合、デフォルト設定を保持できます。 詳細については、「データ検証の設定」をご参照ください。
事前チェックを実行し、ページの下部にある [次へ: インスタンスの購入] をクリックします。
事前チェック中に [警告] または [失敗] 項目が生成された場合は、項目を個別に確認してください。 [詳細の表示] をクリックして、問題のトラブルシューティングを行うことができます。 また、[アラート詳細の確認] をクリックして、チェック項目を無視することもできます。 ただし、データの不整合などの問題が発生する可能性があり、ビジネスにリスクをもたらす可能性があります。 詳細については、「FAQ」をご参照ください。 前述の操作が完了したら、別の事前チェックを実行します。
[購入] ページで、パラメータを設定し、[購入して開始] をクリックします。
(オプション) DTS データ移行インスタンスが属する [リソースグループ] を選択します。 デフォルト値は [デフォルトのリソースグループ] です。
(オプション) DTS データ移行インスタンスの仕様を選択します。 仕様が高いほど、移行速度が速くなり、コストが高くなります。 デフォルト値は large です。 詳細については、「データ移行インスタンスの仕様」をご参照ください。
利用規約を読んで選択します。
DTS データ移行インスタンスを購入すると、データ移行タスクが開始されます。 データ移行ページでデータ移行タスクの進捗状況を確認できます。
次のステップ
データを同期したくない場合は、コンソールでデータ同期タスクを手動で終了または解放できます。
FAQ
接続テストが失敗するのはなぜですか?
トラブルシューティングを行う際は、次の点に注意してください。
アカウントパスワードが無効です。 パスワードは
user:password
形式である必要があります。 詳細については、「インスタンスへの接続」をご参照ください。ソースデータベースが、オンプレミス データセンターまたはサードパーティ クラウドプラットフォームにデプロイされている自己管理データベースである場合、ネットワークファイアウォールによって DTS サーバーからのアクセスがブロックされている可能性があります。 この場合、対応するリージョンの DTS サーバーの CIDR ブロックを手動で追加して、サーバーからのアクセスを許可します。 詳細については、「DTS サーバーの CIDR ブロックの追加」をご参照ください。
移行タスクが実行されないのはなぜですか?
データ移行タスクの実行中にソースデータベースまたは宛先データベースの仕様またはエンドポイントをスケーリングまたは変更すると、タスクは失敗します。 この場合、変更を考慮してデータ移行タスクを再設定してください。
宛先インスタンスに使用可能なメモリが十分にない場合、または宛先インスタンスが特定のシャードがメモリの上限に達しているクラスタインスタンスである場合、DTS データ移行タスクはメモリ不足 (OOM) エラーが原因で失敗します。
宛先インスタンスで透過的データ暗号化 (TDE) が有効になっている場合、DTS を使用してデータを移行することはできません。
ソースデータベースと宛先データベースでデータ量が異なるのはなぜですか?
ソースデータベースの特定のキーに対して有効期限ポリシーが有効になっている場合、これらのキーは有効期限が切れてもすぐに削除されない場合があります。 この場合、宛先データベースのキーの数がソースデータベースのキーの数よりも少なくなる可能性があります。
PSYNC コマンドまたは SYNC コマンドを実行してリストデータを転送する場合、DTS は宛先データベースの既存のデータに対して FLUSH 操作を実行しません。 その結果、重複データが存在する可能性があります。
完全なデータ移行中にネットワークが中断された場合、DTS は接続が再確立された後に複数の完全なデータ移行を実行する場合があります。 この場合、DTS は宛先データベースで同じ名前の既存のキーを自動的に上書きします。 この時点でソースデータベースで削除操作を実行した場合、コマンドは宛先データベースに同期されません。 その結果、宛先データベースのキーがソースデータベースよりも多くなる可能性があります。
エビクションポリシーが noeviction かどうかを確認する必要があるのはなぜですか?
デフォルトでは、データをエビクトする方法を指定する maxmemory-policy パラメータは、ApsaraDB for Redis インスタンスに対して volatile-lru に設定されています。 宛先データベースに十分なメモリがない場合、データエビクションが原因でソースデータベースと宛先データベース間でデータの不整合が発生する可能性があります。 この場合、データ移行タスクは実行を停止しません。 データの不整合を防ぐために、宛先データベースの maxmemory-policy パラメータを noeviction に設定することをお勧めします。 これにより、宛先データベースに十分なメモリがない場合、データ移行タスクは失敗しますが、宛先データベースでのデータ損失を防ぐことができます。 データエビクションポリシーの詳細については、「Tair のデフォルトのエビクションポリシーとは?」をご参照ください。
プレフィックスが DTS_REDIS_TIMESTAMP_HEARTBEAT であるキーがソースデータベースに存在するのはなぜですか?
データ移行と同期の効率を確保するために、DTS はプレフィックスが DTS_REDIS_TIMESTAMP_HEARTBEAT であるキーをソースデータベースに挿入して、更新が発生した時点を記録します。 ソースデータベースがクラスタアーキテクチャを使用している場合、DTS は各シャードにキーを挿入します。 DTS はデータ移行中にキーを除外します。 データ移行が完了すると、キーは自動的に期限切れになります。
CROSSSLOT Keys in request don't hash to the same slot
というエラーメッセージが表示されるのはなぜですか?宛先インスタンスがクラスタインスタンスの場合、ApsaraDB for Redis は 1 つのコマンドでのクロススロット操作をサポートしていません。 データ同期中は 1 つのキーのみを操作することをお勧めします。 これにより、データ同期タスクが中断されるのを防ぎます。
どのコマンドを同期できますか?
以下のコマンドを同期できます。
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。 これらの 2 つのコマンドは、ソースデータベースのエンジンバージョンが Redis 4.0 の場合にのみ同期できます。
XADD、XCLAIM、XDEL、XAUTOCLAIM、XGROUP CREATECONSUMER、XTRIM
PUBLISH コマンドは同期できません。
EVAL コマンドまたは EVALSHA コマンドを実行して Lua スクリプトを呼び出す場合、DTS はこれらの Lua スクリプトが宛先データベースで実行されるかどうかを識別できません。 これは、宛先データベースが増分データ同期中に Lua スクリプトの実行結果を明示的に返さないためです。