Data Transmission Service (DTS) は、Tairインスタンス間の双方向データ同期をサポートします。 この機能は、アクティブな地理的冗長性や地理的災害復旧などのシナリオに適しています。 このトピックでは、Tairインスタンス間の双方向データ同期を設定する方法について説明します。
概要
双方向同期機能を使用するには、順方向データ同期タスクと逆方向データ同期タスクの2つのデータ同期タスクを順番に設定する必要があります。 データ転送同期タスクは、完全データ移行と増分データ同期を実行します。 逆データ同期タスクは、増分データ同期のみを実行します。
フルデータ移行: DTSを使用すると、既存のすべてのデータをソースデータベースからターゲットデータベースに無料で移行できます。
増分データ同期: 完全データ移行を実行すると、DTSは、増分データをソースデータベースからターゲットデータベースにリアルタイムで同期できます。 増分データ移行は、転送されるデータ量ではなく、移行期間に基づいて課金されます。 詳細については、「請求項目」をご参照ください。
データの一貫性を確保するために、双方向データ同期タスクの実行中に、ソースデータベースとターゲットデータベースの同じキーにデータを変更したり、データを書き込んだりしないでください。
前提条件
ソースインスタンスとターゲットインスタンスはTairインスタンスです。
Tair SSDベースのインスタンスは、双方向同期をサポートしていません。
Tair永続メモリ最適化インスタンスをソースインスタンスとして使用する場合、appendonlyパラメーターをyesに設定します。
注意
データ移行タスクを実行するときは、ソースデータベースまたはターゲットデータベースの仕様またはエンドポイントをスケーリングまたは変更しないでください。 それ以外の場合、データ移行タスクは失敗します。 データ移行タスクが失敗した場合は、変更を考慮してタスクを再構成します。 さらに、データ移行によって、ソースデータベースとターゲットデータベースのリソースが消費されます。 オフピーク時にデータ移行を実行することを推奨します。
ソースインスタンスまたはターゲットインスタンスが中国以外のリージョンにある場合、同じリージョン内のインスタンス間でのみ双方向同期がサポートされます。 たとえば、インスタンスが日本 (東京) リージョンにある場合、データは日本 (東京) リージョン内でのみ同期でき、双方向同期シナリオではドイツ (フランクフルト) リージョンとの間で同期できません。
双方向データ同期インスタンスには、順方向同期タスクと逆方向同期タスクが含まれます。 インスタンスを設定またはリセットするときに、順方向同期タスクと逆方向同期タスクの両方でオブジェクトを同期する場合は、次のルールが適用されます。
オブジェクトの完全データと増分データの両方を同期できるのは、タスクの1つだけです。 もう1つのタスクは、オブジェクトの増分データのみを同期します。
現在のタスクのソースデータは、タスクの宛先にのみ同期できます。 同期されたデータは、他のタスクのソースデータとして使用されません。
手順
[データ同期タスク] ページに移動します。
にログインします。 データ管理 (DMS) コンソール
上部のナビゲーションバーで、DTS.
左側のナビゲーションウィンドウで、 .
クリックタスクの作成.
ソースデータベースとターゲットデータベースを設定し、ページ下部の [Test Connectivity and Proceed] をクリックします。 下表に、各パラメーターを説明します。
セクション
パラメーター
説明
非該当
タスク名
DTSタスクの名前。 タスク名は自動生成されます。 タスクを簡単に識別できるように、わかりやすい名前を指定することをお勧めします。 一意のタスク名を指定する必要はありません。
ソースデータベース
DMSデータベースインスタンスの選択
DMSにソースデータベースを登録した場合は、データベースを選択できます。 ソースデータベースを選択した後、データベースに関する情報を入力する必要はありません。 DMSにソースデータベースを登録しなかった場合は、このオプションを無視してください。
データベースタイプ
移行元ディスクのタイプを設定します。 [ApsaraDB for Redis Enhanced Edition (Tair)] を選択します。
アクセス方法
ソースデータベースのアクセス方法。 [Alibaba Cloudインスタンス] を選択します。
インスタンスリージョン
ソースインスタンスが存在するリージョン。
Alibaba Cloudアカウント全体でのデータの複製
Alibaba Cloudアカウント間でデータを移行するかどうかを指定します。 この例では、[いいえ] が選択されています。
インスタンスID
ソースTairインスタンスのID。
データベースパスワード
ソースTairデータベースへの接続に使用されるパスワード。
説明このパラメーターはオプションです。 パラメータは空のままにすることができます。
カスタムアカウントを使用する場合は、アカウントに読み取り権限があることを確認してください。 データベースのパスワードを <user >:< password> 形式で指定します。 たとえば、ソースTairデータベースへのログインに使用するカスタムアカウントのユーザー名がadminで、パスワードがRp829dlwaの場合、データベースのパスワードはadmin:Rp829dlwaです。
宛先データベース
DMSデータベースインスタンスの選択
DMSにターゲットデータベースを登録した場合は、データベースを選択できます。 ターゲットデータベースを選択した後、データベースに関する情報を入力する必要はありません。 DMSにターゲットデータベースを登録しなかった場合は、このオプションを無視してください。
データベースタイプ
ターゲットデータベースのタイプ。 デフォルトでは、ApsaraDB for Redis Enhanced Edition (Tair) が選択されています。
アクセス方法
ターゲットデータベースのアクセス方法。 [Alibaba Cloudインスタンス] を選択します。
インスタンスリージョン
ターゲットインスタンスが存在するリージョン。
インスタンスID
移行先のTairインスタンスのID。
データベースパスワード
接続先のTairデータベースへの接続に使用されるパスワード。
説明カスタムアカウントを使用する場合は、そのアカウントに書き込み権限があることを確認してください。 データベースのパスワードを <user >:< password> 形式で指定します。 たとえば、宛先Tairデータベースへのログインに使用するカスタムアカウントのユーザー名がadminで、パスワードがRp829dlwaの場合、データベースのパスワードはadmin:Rp829dlwaです。
タスクオブジェクトを設定し、ページ下部の [次へ: 詳細設定] をクリックします。 下表に、各パラメーターを説明します。
パラメーター
説明
同期タイプ
データ同期タイプ。 要件に基づいて、フルデータ同期を有効にするかどうかを選択します。 増分データ同期は常に選択されます。
同期トポロジ
データ同期タスクの同期トポロジ。 [双方向同期] を選択します。
競合テーブルの処理モード
事前チェックとレポートエラー (デフォルト): ターゲットデータベースにキーが存在するかどうかを確認します。
キーが存在する場合、事前チェック中にエラーが返され、データ移行タスクを開始できません。 キーが存在しない場合、事前チェックはパスされます。
エラーを無視して続行: ターゲットデータベース内のオブジェクトの存在を確認チェック項目をスキップします。 同じ名前のキーがターゲットデータベースにすでに存在する場合、キーは上書きされます。
ソースオブジェクトと選択中のオブジェクト
ソースオブジェクト セクションで同期するオブジェクトを選択し、をクリックして 選択中のオブジェクト セクションに移動します。 選択したオブジェクトを削除するには、選択中のオブジェクト セクションでオブジェクトを選択し、をクリックして ソースオブジェクト セクションに移動します。
説明移行するオブジェクトとして、データベース (DB 0 ~ DB 255) を選択できます。
詳細設定を設定し、ページ下部の [次のステップ: データ検証] をクリックします。
ほとんどの場合、デフォルト設定を保持できます。 詳細については、このトピックの「付録: 詳細設定」セクションを参照してください。
データ検証を設定し、ページ下部の [次へ: タスク設定の保存と事前チェック] をクリックします。
ほとんどの場合、デフォルト設定を保持できます。 詳細については、「データ検証の設定」をご参照ください。
事前チェックを実行し、ページ下部の [次へ: インスタンスの購入] をクリックします。
事前チェック中に [警告] または [失敗] 項目が生成された場合は、項目を個別に確認します。 [詳細の表示] をクリックして、問題のトラブルシューティングを行います。 [アラート詳細の確認] をクリックして、チェック項目を無視することもできます。 ただし、データの不整合などの問題が発生する可能性があり、ビジネスにリスクをもたらす可能性があります。 詳細については、「FAQ」をご参照ください。 上記の操作を完了したら、別の事前チェックを実行します。
[購入] ページでパラメーターを設定し、[購入と開始] をクリックします。
(オプション) DTSデータ移行インスタンスが属するリソースグループを選択します。 デフォルト値はdefault resource groupです。
(オプション) DTSデータ移行インスタンスの仕様を選択します。 より高い仕様は、より速い移行速度およびより高いコストをもたらす。 デフォルト値は大きいです。 詳細については、「データ移行インスタンスの仕様」をご参照ください。
利用規約を読んで選択します。
DTSデータ移行インスタンスを購入すると、データ移行タスクが開始されます。 データ移行ページで、データ移行タスクの進行状況を確認できます。
転送データ同期タスクのステータスが実行中になるまで待ちます。 逆データ同期タスクに対応する操作列で、[タスクの設定] をクリックします。
上記の手順に従って、逆データ同期タスクを設定します。
成功率の値が100% として表示されている場合、設定は完了です。 [戻る] をクリックします。
データ同期タスクリストで、順方向データ同期タスクと逆方向データ同期タスクの両方が実行中状態の場合、双方向データ同期は成功します。
よくある質問
接続テストが失敗するのはなぜですか?
トラブルシューティングを実行するときは、次の要素に注意してください。
アカウントのパスワードが無効です。 パスワードは
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に設定することを推奨します。 このように、ターゲットデータベースに十分なメモリがない場合、データ移行タスクは失敗しますが、ターゲットデータベースのデータ損失を防ぐことができます。 データ削除ポリシーの詳細については、ApsaraDB for Redisのデフォルトの削除ポリシーは何ですか?
リクエスト内のCROSSSLOTキーが同じスロットにハッシュされない
というエラーメッセージが表示されるのはなぜですか?ターゲットインスタンスがクラスターインスタンスの場合、ApsaraDB for Redisは単一のコマンドでクロススロット操作をサポートしません。 データ同期中は、1つのキーに対してのみ操作を実行することを推奨します。 これにより、データ同期タスクの中断が防止されます。
どのコマンドを同期できますか?
次のコマンドを同期できます。
APPEND
BITOP、BLPOP、BRPOP、およびBRPOPLPUSH
DECR、DECRFY、およびDEL
EVAL、EVALSHA、EXEC、EXPIRE、EXPIREAT
GEOADDとGETSET
HDEL、HINCRBY、HINCRBYFLOAT、HMSET、HSET、およびHSETNX
INCR、INCRBY、およびINCRBYFLOAT
LINSERT、LPOP、LPUSH、LUSHX、LREM、LSET、およびLTRIM
移動、MSET、MSETNX、およびマルチ
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、およびSUUNIONSTORE
ZADD、ZINCRBY、ZINTERSTORE、ZREM、ZREMRANGEBYLEX、ZUNION STORE、ZREMRANGEBYRANK、およびZREMRANGEBYSCORE
SWAPDBとUNLINK。 これらの2つのコマンドは、ソースデータベースのエンジンバージョンがRedis 4.0の場合にのみ同期できます。
XADD、XCLAIM、XDEL、XAUTOCLAIM、XGROUP CREATECONSUMER、およびXTRIM
PUBLISHコマンドは同期できません。
EVALまたはEVALSHAコマンドを実行してLuaスクリプトを呼び出した場合、DTSはこれらのLuaスクリプトがターゲットデータベースで実行されているかどうかを識別できません。 これは、増分データ同期中に、ターゲットデータベースがLuaスクリプトの実行結果を明示的に返さないためです。