Data Transmission Service (DTS) は、Tair (Enterprise Edition) インスタンス間の双方向同期をサポートしており、アクティブ地理的冗長性およびジオディザスタリカバリに最適です。
タスクはコンソールまたは OpenAPI を使用して設定できます。詳細については、「OpenAPI を呼び出して Tair (Enterprise Edition) インスタンス間で単方向または双方向のデータ同期を設定する」をご参照ください。
概要
双方向同期には、フォワードタスクとリバースタスクという 2 つの同期リンクが必要です。フォワードタスクは 完全なデータ移行 と 増分同期 の両方を実行します。リバースタスクは 増分データ 同期のみを実行します。
-
完全なデータ移行:DTS は、ソースデータベース内の既存のすべてのデータをターゲットデータベースに移行します。完全なデータ移行は無料です。
-
増分同期:完全なデータ移行後、DTS はソースデータベースからの増分データ変更をリアルタイムでターゲットデータベースに同期します。増分同期は、転送されたデータ量ではなく、その継続時間に基づいて課金されます。詳細については、「課金対象項目」をご参照ください。
データ整合性を確保するため、双方向同期タスクの実行中は、両方のデータベースで同じキーを変更または書き込まないでください。
前提条件
ソースおよび宛先インスタンスは、Tair (Enterprise Edition) インスタンスである必要があります。
-
Tair (Enterprise Edition) ディスクベースインスタンスは、双方向同期をサポートしていません。
-
ソースデータベースが Tair Persistent Memory タイプのインスタンスの場合、手動で appendonly パラメーターを有効にする必要があります。
注意事項
-
移行中にソースまたはターゲットデータベースの構成を変更しないでください。リソースのスケーリング、仕様の変更、接続エンドポイントの変更を行うと、タスクが失敗し、再設定が必要になります。移行は両方のデータベースでリソースを消費するため、オフピーク時間帯に実行してください。
-
中国本土以外のリージョンでは、双方向同期は同一リージョン内のインスタンス間でのみサポートされています。たとえば、日本 (東京) リージョンの 2 つのインスタンスは同期できますが、日本 (東京) とドイツ (フランクフルト) のインスタンス間では同期できません。
双方向同期タスクには、フォワード同期タスクとリバース同期タスクが含まれます。タスクを設定またはリセットする際、一方のタスクの宛先オブジェクトが他方のタスクの同期オブジェクトと一致する場合:
完全および増分データの同期を実行できるのは、1 つのタスクのみです。もう一方のタスクは増分同期のみをサポートします。
現在のタスクのソースからのデータは、現在のタスクの宛先にのみ同期され、他方のタスクのソースデータとしては使用されません。
操作手順
-
データ同期タスクリストに移動します。
-
Data Management (DMS) コンソールにログインします。
-
トップナビゲーションバーで、[] を選択します。
-
データ同期タスク の横で、同期するインスタンスのリージョンを選択します。
-
-
タスクの作成 をクリックします。
-
ソースおよびターゲットデータベースを設定し、ページ下部の 接続をテストして続行 をクリックします。
セクション
パラメーター
説明
該当なし
タスク名
DTS は自動的にタスク名を生成します。識別しやすいように、わかりやすい名前を指定することを推奨します。名前は一意である必要はありません。
ソースデータベース
DMS データベースインスタンスの選択
ソースデータベースが DMS に登録されている場合は、ここで選択すると詳細情報が自動入力されます。そうでない場合は、このオプションをスキップしてください。
データベースタイプ
Tair/Redis を選択します。
アクセス方法
Alibaba Cloud インスタンス を選択します。
インスタンスリージョン
インスタンスが配置されているリージョンを選択します。
Alibaba Cloud アカウント間でデータを複製
この例では、単一の Alibaba Cloud アカウント内での移行を扱うため、× を選択します。
インスタンス ID
ソースインスタンスの ID を選択します。
認証方法
要件に応じて、パスワードログイン または シークレットフリーのログイン を選択します。この例では、パスワードログイン を選択しています。
説明インスタンスで パスワードなしのアクセス機能 が有効になっていない場合は、パスワードログイン を選択してください。
データベースパスワード
ソースインスタンスへの接続に使用するアカウントのパスワードを入力します。
説明-
このパラメーターは省略可能です。パスワードが設定されていない場合は、空白のままにしてください。
-
カスタムアカウントを使用する場合は、読み取り権限が必要です。アカウントとパスワードは
<user>:<password>形式で指定する必要があります。たとえば、カスタムアカウントがadminでパスワードがRp829dlwaの場合、admin:Rp829dlwaと入力します。
宛先データベース
DMS データベースインスタンスの選択
ターゲットデータベースが DMS に登録されている場合は、ここで選択すると詳細情報が自動入力されます。そうでない場合は、このオプションをスキップしてください。
データベースタイプ
Tair/Redis がデフォルトで選択されています。
アクセス方法
Alibaba Cloud インスタンス を選択します。
インスタンスリージョン
ターゲットインスタンスが配置されているリージョンを選択します。
インスタンス ID
ターゲットインスタンスの ID を選択します。
認証方法
要件に応じて、パスワードログイン または シークレットフリーのログイン を選択します。この例では、パスワードログイン を選択しています。
説明インスタンスで パスワードなしのアクセス機能 が有効になっていない場合は、パスワードログイン を選択してください。
データベースパスワード
ターゲットデータベースへの接続に使用するパスワードを入力します。
説明カスタムアカウントを使用する場合は、書き込み権限が必要です。アカウントとパスワードは
<user>:<password>形式で指定する必要があります。たとえば、カスタムアカウントがadminでパスワードがRp829dlwaの場合、admin:Rp829dlwaと入力します。 -
-
タスクオブジェクトを設定し、ページ下部の 詳細設定へ をクリックします。
パラメーター
説明
同期タイプ
増分データ同期 は常に有効です。完全データ同期 をオプションで有効にできます。
同期トポロジ
双方向同期 を選択します。
競合テーブルの処理モード
-
エラーの事前チェックと報告(デフォルト):ターゲットデータベースにデータ(キー)が存在するかどうかをチェックします。
事前チェック中に、ターゲットデータベースに競合するキーが存在する場合、タスクは失敗します。競合するキーが存在しない場合、タスクは続行されます。
-
エラーを無視して続行:ターゲットデータベース内のオブジェクトデータの存在検査 項目をスキップします。ターゲットデータベースにすでに同じ名前のキーが存在する場合、上書きされます。
ソースオブジェクト および 選択中のオブジェクト
ソースオブジェクト ボックスで同期するオブジェクトを選択し、
をクリックして 選択中のオブジェクト ボックスに移動させます。選択したオブジェクトを削除するには、選択中のオブジェクト ボックスでそのオブジェクトをクリックし、
をクリックして ソースオブジェクト ボックスに戻します。説明データベースレベル(DB 0 ~ DB 255)でオブジェクトを選択できます。
-
-
詳細設定を構成し、次へ:データ検証 をクリックします。
ほとんどの場合、デフォルト設定を使用できます。詳細については、「付録:詳細設定」をご参照ください。
-
データ検証を設定し、次:タスク設定の保存と事前チェック をクリックします。
ほとんどの場合、デフォルト設定のままにしておけます。詳細については、「DTS 同期または移行インスタンスでのデータ検証の設定」をご参照ください。
-
事前チェックが完了したら、次:インスタンスの購入 をクリックします。
警告 または 失敗 の項目が報告された場合は、個別に解決してください。詳細の表示 をクリックして問題を確認し、提供された提案に基づいて解決できます。また、アラートの詳細を確認 をクリックしてチェック項目を無視することもできますが、データの不整合が発生する可能性があるため、推奨されません。詳細については、「事前チェックの問題」をご参照ください。問題を解決したら、再度事前チェックを実行してください。
-
購入 ページで必要な情報を設定し、購入して起動 をクリックします。
-
(オプション)リソースグループの設定 で、DTS タスクのリソースグループを選択します。デフォルトでは デフォルトリソースグループ が使用されます。
-
(オプション)DTS 同期リンクの仕様を選択します。より高い仕様を選択すると同期速度が速くなりますが、コストも高くなります。デフォルト値は large です。詳細については、「データ同期リンクの仕様」をご参照ください。
-
利用規約を読み、同意してください。
購入が完了すると、同期タスクが開始されます。データ同期ページで進行状況を確認できます。
-
-
フォワード同期タスクの ステータス が 実行中 になったら、リバースタスクの タスクの設定 をクリックします。
-
上記の手順に従って、リバースタスクを設定します。
事前チェックの 成功率 が 100% に達すると、設定は完了です。リストに戻る をクリックできます。
-
データ同期リストで、フォワードおよびリバースタスクの両方の ステータス が 実行中 になったら、双方向データ同期の設定は完了です。
よくある質問
-
接続テストが失敗するのはなぜですか?
以下の点を確認してください。
-
アカウントまたはパスワードが無効です。Redis パスワードの形式は
user:passwordです。詳細については、「インスタンスの接続方法」をご参照ください。 -
ソースがオンプレミスデータセンターまたは他のクラウド上の自己管理データベースの場合、ファイアウォールによってアクセスがブロックされている可能性があります。アクセスを許可するには、対応するリージョンの DTS サーバーの IP アドレスを許可リストに追加する必要があります。詳細については、「データベースの許可リストに DTS サーバーの CIDR ブロックを追加する」をご参照ください。
-
-
移行タスクが失敗するのはなぜですか?
-
ソースまたはターゲットデータベースの構成(リソース、仕様、接続エンドポイントなど)を変更すると、移行タスクが失敗します。このような場合は、タスクを再設定する必要があります。
-
ターゲットインスタンスのメモリが不足している場合、またはクラスターインスタンスでシャードのメモリ制限に達している場合、DTS タスクはメモリ不足 (OOM) エラーで失敗します。
-
ターゲットインスタンスで透過的データ暗号化 (TDE) が有効になっている場合、DTS を使用したデータ移行はサポートされていません。
-
-
データに差異が生じるのはなぜですか?
-
ソースデータベースの一部のキーに有効期限 (Expire) ポリシーが設定されている場合、有効期限切れ時にすぐに削除されないことがあります。そのため、ターゲットデータベースのキー数がソースデータベースよりも少なくなる可能性があります。
-
List データ型の場合、DTS は PSYNC または SYNC を使用してデータを転送する際に、ターゲットの既存データに対して FLUSH 操作を実行しません。これにより、重複データが発生する可能性があります。
-
完全データ移行中にネットワークが中断すると、DTS が複数回の完全移行を実行することがあります。これにより、同じ名前のキーが自動的に上書きされます。この間にソースデータベースで削除操作が実行された場合、そのコマンドはターゲットに同期されず、ターゲットデータベースのデータ量がソースよりも多くなる可能性があります。
-
-
事前チェックで Redis のエビクションポリシーが noeviction であることを確認するのはなぜですか?
Tair (Redis OSS-compatible) インスタンスのデフォルトのエビクションポリシー (maxmemory-policy) は volatile-lru です。ターゲットのメモリが不足するとエビクションがトリガーされ、タスクが失敗せずにデータの不整合が発生する可能性があります。これを防ぐために、ターゲットのエビクションポリシーを noeviction に設定してください。このポリシーでは、メモリがいっぱいになると書き込みが失敗し、移行タスクが失敗しますが、エビクションによるデータ損失を防ぐことができます。詳細については、「Redis データエビクションポリシー」をご参照ください。
-
CROSSSLOT Keys in request don't hash to the same slotエラーが発生するのはなぜですか?このエラーは、Redis のクラスタアーキテクチャが単一コマンド内でのクロススロット操作をサポートしていないため発生します。リンクが中断されないようにするため、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 コマンドはサポートされていません。
-
DTS は、増分データ同期中に EVAL または EVALSHA で呼び出された Lua スクリプトの実行が成功したかどうかを保証できません。これは、ターゲットが明示的に実行結果を返さないためです。
-