Data Transmission Service (DTS) は、Tair (Redis OSS-compatible) データベースの一方向同期をサポートしています。この機能は、アクティブ地理的冗長性やデータディザスタリカバリなど、さまざまなシナリオに適しています。このトピックでは、Tair (Redis OSS-compatible) インスタンス間の一方向データ同期を例に、データ同期タスクの設定方法について説明します。
機能概要
完全移行
DTS は、ソースデータベースからターゲットデータベースにすべての既存データを移行します。完全移行は無料です。
増分同期
完全移行が完了すると、DTS はソースデータベースからの増分更新をリアルタイムでターゲットデータベースに同期します。増分同期は、同期されるデータ量に関係なく、使用期間に基づいて課金されます。詳細については、「課金項目」をご参照ください。
前提条件
Tair (Redis OSS-compatible) インスタンスを作成する必要があります。宛先インスタンスは、ソースインスタンスが使用するメモリよりも多くのメモリを持つ必要があります。詳細については、「インスタンスの作成」をご参照ください。
ターゲットデータベースの合計メモリは、ソースデータベースが使用するメモリよりも少なくとも 10% 大きくする必要があります。ターゲットデータベースのメモリが不足している場合、データが不整合になったり、タスクが失敗したりする可能性があります。この場合、ターゲットデータベースをクリアしてタスクを再設定する必要があります。
注意事項
移行中に、インスタンスのスケーリング、インスタンスタイプの変更、またはソースデータベースやターゲットデータベースのエンドポイントの変更を行わないでください。これらの操作は移行タスクの失敗を引き起こす可能性があり、再設定が必要になります。移行プロセスはソースデータベースとターゲットデータベースの両方のリソースを消費するため、オフピーク時に移行を実行することをお勧めします。
手順
データ同期タスクページに移動します。
DMS コンソールにログインします。
トップメニューバーで、 を選択します。
[同期タスク] の右側で、同期するインスタンスのリージョンを選択します。
[タスクの作成] をクリックします。
ソースデータベースとターゲットデータベースを設定し、ページ下部の [接続をテストして続行] をクリックします。
カテゴリ
設定
説明
なし
タスク名
DTS タスクの名前。DTS はタスク名を自動的に生成します。タスクを簡単に識別できるわかりやすい名前を指定することをお勧めします。一意のタスク名を指定する必要はありません。
ソースデータベース
DMS データベースインスタンスの選択
ソースデータベースを DMS に追加している場合は、ここで選択できます。選択すると、以下のソースデータベース情報を入力する必要はありません。追加していない場合は、このオプションを無視してください。
データベースタイプ
[Tair/Redis] を選択します。
アクセス方法
[クラウドインスタンス] を選択します。
インスタンスリージョン
インスタンスが配置されているリージョンを選択します。
クロス Alibaba Cloud アカウント
この例では、同じ Alibaba Cloud アカウント内のインスタンス間の移行を示しています。[いいえ] を選択します。
インスタンス ID
ソースデータベースのインスタンス ID を選択します。
認証方法
必要に応じて [パスワードログオン] または [パスワードなしのログオン] を選択します。この例では [パスワードログオン] を使用します。
説明インスタンスで VPC 経由のパスワードなしのアクセス機能が有効になっていない場合は、[パスワードログオン] を選択します。
データベースパスワード
ソースインスタンスへの接続に使用するアカウントのパスワードを入力します。
説明これはオプションです。パスワードが設定されていない場合は、空白のままにできます。
カスタムアカウントを使用する場合、読み取り権限が必要です。アカウントとパスワードの形式は <user>:<password> です。たとえば、インスタンスのカスタムアカウントが admin で、パスワードが Rp829dlwa の場合、データベースパスワードに admin:Rp829dlwa と入力します。
宛先データベース
DMS データベースインスタンスの選択
ターゲットデータベースを DMS に追加している場合は、ここで選択できます。選択すると、以下のターゲットデータベース情報を入力する必要はありません。追加していない場合は、このオプションを無視してください。
データベースタイプ
デフォルトで [Tair/Redis] が選択されています。
アクセス方法
[クラウドインスタンス] を選択します。
インスタンスリージョン
宛先インスタンスが配置されているリージョンを選択します。
インスタンス ID
宛先インスタンス ID を選択します。
認証方法
必要に応じて [パスワードログオン] または [パスワードなしのログオン] を選択します。この例では [パスワードログオン] を使用します。
説明インスタンスで VPC 経由のパスワードなしのアクセス機能が有効になっていない場合は、[パスワードログオン] を選択します。
データベースパスワード
ターゲットデータベースに接続するためのパスワードを入力します。
説明カスタムアカウントを使用する場合、書き込み権限が必要です。アカウントとパスワードの形式は <user>:<password> です。たとえば、インスタンスのカスタムアカウントが admin で、パスワードが Rp829dlwa の場合、データベースパスワードに admin:Rp829dlwa と入力します。
タスクオブジェクトを設定し、ページ下部の [次へ: 詳細設定] をクリックします。
設定
説明
同期タイプ
デフォルトで [完全同期 + 増分同期] が選択されています。
競合テーブルの処理モード
[事前チェックしてブロック] (デフォルト): ターゲットデータベースにデータ (キー) が存在するかどうかを確認します。
キーが存在する場合、事前チェックフェーズでエラーが報告され、移行タスクは開始されません。キーが存在しない場合、チェックはパスします。
[エラーを無視して実行を継続]: [宛先オブジェクトデータ存在チェック] 項目をスキップします。同じ名前のキーがターゲットデータベースに既に存在する場合、上書きされます。
ソースオブジェクト と 選択中のオブジェクト
ソースオブジェクト ボックスで同期するオブジェクトを選択し、
をクリックして 選択中のオブジェクト ボックスに移動します。オブジェクトを削除するには、選択中のオブジェクト ボックスでオブジェクトを選択し、
をクリックして ソースオブジェクト ボックスに戻します。説明移行オブジェクトはデータベースレベル (DB 0 から DB 255) で選択されます。
詳細設定を行い、ページ下部の [次へ: データ検証] をクリックします。
通常はデフォルト設定のままでかまいません。詳細については、「付録: 詳細設定」をご参照ください。
検証設定を行い、ページ下部の [次へ: タスクを保存して事前チェック] をクリックします。
ほとんどの場合、デフォルト設定のままでかまいません。詳細については、「DTS 同期または移行インスタンスのデータ検証を設定する」をご参照ください。
事前チェックを実行します。事前チェックが完了したら、[次へ: 購入] をクリックします。
事前チェックで [警告] または [失敗] 項目が返された場合は、1 つずつ対処する必要があります。[詳細の表示] をクリックして、提供された指示に基づいて項目を修正できます。また、[アラート詳細の確認] をクリックして項目を無視することもできますが、これによりデータの不整合が発生し、ビジネスにリスクをもたらす可能性があります。詳細については、「事前チェックの問題」をご参照ください。問題を解決した後、再度事前チェックを実行します。
[購入] ページで設定を行い、[購入して開始] をクリックします。
(オプション) [リソースグループの設定] で、DTS インスタンスのリソースグループを選択します。リソースグループを指定しない場合、[デフォルトのリソースグループ] が使用されます。
(オプション) DTS 同期リンクの仕様を選択します。仕様が高いほど同期速度は速くなりますが、コストも高くなります。デフォルト値は large です。詳細については、「データ同期リンクの仕様」をご参照ください。
利用規約を読んで選択します。
購入が完了すると、同期タスクが開始されます。データ同期タスクページでタスクの進行状況を確認できます。
次のステップ
データの同期が不要になった場合は、コンソールでタスクを手動で終了またはリリースできます。
よくある質問
接続テストが失敗するのはなぜですか?
次の項目を確認してください:
アカウントまたはパスワードが正しくありません。Redis パスワードの形式は
user:passwordです。詳細については、「インスタンスのログオン方法」をご参照ください。ソースデータベースがオンプレミスのデータセンターまたはサードパーティのクラウドにある場合、ネットワークファイアウォールが存在する可能性があります。DTS からのアクセスを許可するには、対応するリージョンの 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 はこのキーを各シャードに挿入します。DTS はタスク中にこのキーをフィルターで除外し、タスク終了後にキーは自動的に期限切れになります。
なぜ
CROSSSLOT Keys in request don't hash to the same slotエラーが発生するのですか?宛先インスタンスがクラスターアーキテクチャを使用している場合、Redis は単一のコマンドでのクロススロット操作をサポートしていません。DTS の同期中は、リンクの中断を避けるために単一キー操作のみを実行する必要があります。
どのコマンドが同期でサポートされていますか?
以下のコマンドがサポートされています:
APPEND
BITOP, BLPOP, BRPOP, and BRPOPLPUSH
DECR, DECRBY, and DEL
EVAL, EVALSHA, EXEC, EXPIRE, and EXPIREAT
GEOADD and GETSET
HDEL, HINCRBY, HINCRBYFLOAT, HMSET, HSET, and HSETNX
INCR, INCRBY, and INCRBYFLOAT
LINSERT, LPOP, LPUSH, LPUSHX, LREM, LSET, and LTRIM
MOVE, MSET, MSETNX, and MULTI
PERSIST, PEXPIRE, PEXPIREAT, PFADD, PFMERGE, and PSETEX
RENAME, RENAMENX, RESTORE, RPOP, RPOPLPUSH, RPUSH, and RPUSHX
SADD, SDIFFSTORE, SELECT, SET, SETBIT, SETEX, SETNX, SETRANGE, SINTERSTORE, SMOVE, SPOP, SREM, and SUNIONSTORE
ZADD, ZINCRBY, ZINTERSTORE, ZREM, ZREMRANGEBYLEX, ZUNIONSTORE, ZREMRANGEBYRANK, and ZREMRANGEBYSCORE
SWAPDB and UNLINK (これらの 2 つのコマンドは、ソース Redis インスタンスのエンジンバージョンが 4.0 の場合にのみ同期できます)
XADD, XCLAIM, XDEL, XAUTOCLAIM, XGROUP CREATECONSUMER, and XTRIM
PUBLISH コマンドは同期できません。
EVAL または EVALSHA コマンドを実行して Lua スクリプトを呼び出す場合、DTS はこれらの Lua スクリプトがターゲットデータベースで実行されたかどうかを識別できません。これは、増分データ同期中にターゲットデータベースが Lua スクリプトの実行結果を明示的に返さないためです。