Data Transmission Service (DTS) は、Tair (Redis OSS-compatible) データベース向けに一方向データ同期をサポートしています。この機能は、アクティブ地理的冗長性およびジオディザスタリカバリに適しています。以下の手順では、Tair (Redis OSS-compatible) インスタンス間で一方向同期タスクを設定する方法を説明します。
概要
-
完全なデータ移行
DTS は、ソースデータベースの既存データすべてをターゲットデータベースに移行します。完全なデータ移行は無料です。
-
増分同期
完全なデータ移行後、DTS はソースデータベースからの増分更新をリアルタイムでターゲットデータベースに同期します。増分同期には、データ量ではなくタスクの持続時間に基づいて課金されます。詳細については、「課金」をご参照ください。
前提条件
Tair (Redis OSS-compatible) インスタンスが宛先として使用されます。宛先インスタンスのメモリ容量は、ソースインスタンスが使用しているメモリ容量よりも大きくなければなりません。詳細については、「インスタンスの作成」をご参照ください。
ターゲットデータベースのメモリ容量は、ソースデータベースのメモリ容量より少なくとも 10 % 大きくしてください。メモリが不足すると、データの不整合やタスクの失敗が発生する可能性があります。そのような事象が発生した場合は、ターゲットデータベースをクリアして移行タスクを再設定してください。
注意事項
移行中は、ソースまたはターゲットデータベースの構成を変更しないでください。リソースのスケーリング、仕様の変更、接続エンドポイントの変更を行うと、タスクが失敗し、再設定が必要になります。移行は両方のデータベース上でリソースを消費するため、オフピーク時間帯に実施してください。
操作手順
-
データ同期タスクの一覧ページに移動します。
-
Data Management (DMS) コンソールにログインします。
-
トップナビゲーションバーで、 を選択します。
-
データ同期タスク の横で、同期するインスタンスのリージョンを選択します。
-
-
タスクの作成 をクリックします。
-
ソースデータベースとターゲットデータベースを設定し、ページ下部の 接続をテストして続行 をクリックします。
カテゴリ
パラメーター
説明
該当なし
タスク名
DTS は自動的にタスク名を生成します。識別しやすいように、わかりやすい名前を指定することを推奨します。タスク名は一意である必要はありません。
ソースデータベース
DMS データベースインスタンスの選択
DMS にこのデータベースを登録済みの場合は、ここで選択することで接続パラメーターが自動入力されます。未登録の場合は、このオプションを空のままにしてください。
データベースタイプ
Tair/Redis を選択します。
アクセス方法
[クラウドインスタンス] を選択します。
インスタンスリージョン
ソースインスタンスのリージョンを選択します。
Alibaba Cloud アカウント間でデータを複製
この例では、同一 Alibaba Cloud アカウント内でデータを同期します。× を選択します。
インスタンス ID
ソースデータベースのインスタンス ID を選択します。
認証方法
必要に応じて、パスワードログイン または シークレットフリーのログイン を選択します。この例では パスワードログイン を使用します。
説明インスタンスで パスワードなしのアクセス が有効になっていない場合、パスワードログイン を選択する必要があります。
データベースパスワード
ソースインスタンスに接続するために使用するアカウントのパスワードを入力します。
説明-
このパラメーターは任意です。パスワードが設定されていない場合は、このフィールドを空のままにしてかまいません。
-
カスタムアカウントを使用する場合は、読み取り権限があることを確認してください。
<user>:<password>形式でアカウントとパスワードを指定します。たとえば、カスタムアカウントのユーザー名がadmin、パスワードがRp829dlwaの場合、admin:Rp829dlwaと入力します。
宛先データベース
DMS データベースインスタンスの選択
DMS にこのデータベースを登録済みの場合は、ここで選択することで接続パラメーターが自動入力されます。未登録の場合は、このオプションを空のままにしてください。
データベースタイプ
Tair/Redis がデフォルトで選択されています。
アクセス方法
[クラウドインスタンス] を選択します。
インスタンスリージョン
宛先インスタンスのリージョンを選択します。
インスタンス ID
ターゲットデータベースのインスタンス ID を選択します。
認証方法
必要に応じて、パスワードログイン または シークレットフリーのログイン を選択します。この例では パスワードログイン を使用します。
説明インスタンスで パスワードなしのアクセス が有効になっていない場合、パスワードログイン を選択する必要があります。
データベースパスワード
ターゲットデータベースに接続するために使用するアカウントのパスワードを入力します。
説明カスタムアカウントを使用する場合は、書き込み権限があることを確認してください。
<user>:<password>形式でアカウントとパスワードを指定します。たとえば、カスタムアカウントのユーザー名がadmin、パスワードがRp829dlwaの場合、admin:Rp829dlwaと入力します。 -
-
同期オブジェクトを設定し、詳細設定へ をクリックします。
パラメーター
説明
同期タイプ
[完全同期 + 増分同期] がデフォルトで選択されています。
競合テーブルの処理モード
-
エラーの事前チェックと報告 (デフォルト):ターゲットデータベースにキーが存在するかどうかをチェックします。
キーが存在する場合、事前チェックでエラーが報告され、タスクは開始されません。キーが存在しない場合、事前チェックは合格します。
-
エラーを無視して続行:ターゲットデータベース内のオブジェクトデータの存在検査 という事前チェック項目をスキップします。ターゲットデータベースに同じ名前のキーが既に存在する場合、上書きされます。
ソースオブジェクト および 選択中のオブジェクト
ソースオブジェクト ボックスで同期するオブジェクトを選択し、
をクリックして 選択中のオブジェクト ボックスに移動させます。オブジェクトを削除するには、選択中のオブジェクト ボックスで該当オブジェクトを選択し、
をクリックして ソースオブジェクト ボックスに戻します。説明同期対象としてデータベース (DB 0 ~ DB 255) を選択できます。
-
-
詳細設定を構成し、[次へ:データ検証] をクリックします。
ほとんどの場合、デフォルト設定のまま使用できます。詳細については、「付録:詳細設定」をご参照ください。
-
データ検証を設定し、次:タスク設定の保存と事前チェック をクリックします。
ほとんどの場合、デフォルト設定のまま使用できます。詳細については、「DTS 同期または移行インスタンスでのデータ検証の設定」をご参照ください。
-
事前チェックが完了したら、次:インスタンスの購入 をクリックします。
警告 または 失敗 の項目が報告された場合は、個別に解決してください。詳細の表示 をクリックして問題内容を確認し、提示された提案に従って解決できます。また、アラートの詳細を確認 をクリックしてチェック項目を無視することも可能ですが、データの不整合が発生する可能性があるため推奨されません。詳細については、「事前チェックの問題」をご参照ください。問題を解決したら、再度事前チェックを実行してください。
-
[購入] ページで必要な情報を設定し、購入して起動 をクリックします。
-
(任意) リソースグループの設定 で、DTS タスクのリソースグループを選択します。デフォルトでは [デフォルトリソースグループ] が使用されます。
-
(任意) DTS 同期リンクの仕様を選択します。仕様を高くすると同期速度が速くなりますが、コストも高くなります。デフォルト値は large です。詳細については、「データ同期リンクの仕様」をご参照ください。
-
利用規約を読み、同意してください。
購入が完了すると、同期タスクが開始されます。データ同期ページで進行状況を確認できます。
-
次のステップ
データの同期が不要になった場合は、コンソールでタスクを終了またはリリースしてください。
よくある質問
-
接続テストが失敗するのはなぜですか?
以下を確認してください。
-
アカウントまたはパスワードが無効です。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 データエビクションポリシー」をご参照ください。
-
ソースデータベースに DTS_REDIS_TIMESTAMP_HEARTBEAT という名前のキーがあるのはなぜですか?
DTS は、更新タイムスタンプを記録するために、ソースデータベースに DTS_REDIS_TIMESTAMP_HEARTBEAT 接頭辞を持つキーを挿入します。クラスターソースの場合、各シャードにキーが挿入されます。DTS は移行中にこのキーをフィルターで除外し、タスク完了時に自動的に有効期限切れになります。
-
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 コマンドはサポートされていません。
-
増分同期中に EVAL または EVALSHA で呼び出された Lua スクリプトの実行結果は、ターゲットが明示的に返さないため、DTS では成功を保証できません。
-