Data Transmission Service (DTS) は、Tair (Redis OSS-compatible) インスタンス間の一方向データ同期をサポートしています。 この機能は、アクティブな地理的冗長性や地理的災害復旧などのシナリオに適しています。 このトピックでは、Tair (Redis OSS-compatible) インスタンス間の一方向データ同期を設定する方法について説明します。
概要
完全なデータ移行
DTSを使用すると、既存のすべてのデータをソースデータベースからターゲットデータベースに無料で移行できます。
増分データ同期
完全データ移行を実行した後、DTSは、増分データをソースデータベースからターゲットデータベースにリアルタイムで同期できます。 増分データ移行は、転送されるデータ量ではなく、移行期間に基づいて課金されます。 詳細については、「課金項目」をご参照ください。
前提条件
Tair (Redis OSS-compatible) インスタンスがターゲットインスタンスとして作成され、ターゲットインスタンスに割り当てられたメモリがソースインスタンスで使用されているメモリよりも大きくなります。 詳細については、「手順1: インスタンスの作成」をご参照ください。
ターゲットデータベースのメモリの合計量は、ソースデータベースで使用されるメモリの量よりも少なくとも10% 大きくすることをお勧めします。 データ移行タスクの実行時にターゲットデータベースのメモリ量が不足している場合、データの不整合やタスクの失敗などの問題が発生する可能性があります。 この場合、ターゲットデータベースを空にし、データ移行タスクを再設定します。
注意事項
データ移行タスクを実行するときは、ソースデータベースまたはターゲットデータベースの仕様またはエンドポイントをスケーリングまたは変更しないでください。 それ以外の場合、データ移行タスクは失敗します。 データ移行タスクが失敗した場合は、変更を考慮してタスクを再構成します。 さらに、データ移行によって、ソースデータベースとターゲットデータベースのリソースが消費されます。 オフピーク時にデータ移行を実行することを推奨します。
手順
[データ同期タスク] ページに移動します。
最初に
データ管理 (DMS) コンソール上部のナビゲーションバーで、データ开発.
左側のナビゲーションウィンドウで、 .
クリックタスクの作成.
ソースデータベースとターゲットデータベースを設定し、ページ下部の [Test Connectivity and Proceed] をクリックします。 下表に、各パラメーターを説明します。
セクション
パラメーター
説明
非該当
タスク名
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データ移行インスタンスが属するリソースグループを選択します。 デフォルト値はdefault resource groupです。
(オプション) DTSデータ移行インスタンスの仕様を選択します。 より高い仕様は、より速い移行速度およびより高いコストをもたらす。 デフォルト値は大きいです。 詳細については、「データ移行インスタンスの仕様」をご参照ください。
利用規約を読んで選択します。
DTSデータ移行インスタンスを購入すると、データ移行タスクが開始されます。 データ移行ページで、データ移行タスクの進行状況を確認できます。
次に何をすべきか
データを同期したくない場合は、コンソールでデータ同期タスクを手動で終了またはリリースできます。
よくある質問
接続テストが失敗するのはなぜですか?
トラブルシューティングを実行するときは、次の要素に注意してください。
アカウントのパスワードが無効です。 パスワードは
user:password
形式である必要があります。 詳細については、「インスタンスへの接続」をご参照ください。ソースデータベースがオンプレミスのデータセンターまたはサードパーティのクラウドプラットフォームにデプロイされた自己管理型データベースである場合、ネットワークファイアウォールがDTSサーバーからのアクセスをブロックする可能性があります。 この場合、対応するリージョンにDTSサーバーのCIDRブロックを手動で追加して、サーバーからのアクセスを許可します。 詳細については、「DTSサーバーのCIDRブロックの追加」をご参照ください。
移行タスクが実行に失敗するのはなぜですか?
データ移行タスクを実行するときに、ソースデータベースまたはターゲットデータベースの仕様またはエンドポイントをスケーリングまたは変更すると、タスクは失敗します。 この場合、変更を考慮してデータ移行タスクを再設定します。
ターゲットインスタンスに十分な使用可能なメモリがない場合、または特定のシャードがメモリ上限に達しているクラスターインスタンスの場合、DTSデータ移行タスクはメモリ不足 (OOM) エラーにより失敗します。
移行先インスタンスに対して透過データ暗号化 (TDE) が有効になっている場合、DTSを使用してデータを移行することはできません。
ソースデータベースとターゲットデータベースでデータボリュームが異なるのはなぜですか?
ソースデータベースの特定のキーに対して有効期限ポリシーが有効化されている場合、これらのキーは、有効期限が切れた後の最も早い機会に削除されない場合があります。 この場合、宛先データベース内のキーの数は、ソースデータベース内のキーの数よりも少なくてもよい。
PSYNCまたはSYNCコマンドを実行してリストデータを送信する場合、DTSはターゲットデータベースの既存のデータに対してFLUSH操作を実行しません。 その結果、重複データが存在する可能性があります。
フルデータ移行中にネットワークが中断された場合、DTSは接続の再確立後に複数のフルデータ移行を実行できます。 この場合、DTSは、ターゲットデータベース内の同じ名前を持つ既存のキーを自動的に上書きします。 この時点でソースデータベースに対して削除操作を実行すると、コマンドはターゲットデータベースと同期されません。 その結果、宛先データベースは、ソースデータベースよりも多くのキーを有することができる。
立ち退きポリシーがnoevictionであるかどうかを確認する必要があるのはなぜですか?
デフォルトでは、データの削除方法を指定するmaxmemory-policyパラメーターは、Tair (Redis OSS互換) インスタンスのvolatile-lruに設定されています。 ターゲットデータベースに十分なメモリがない場合、データの削除により、ソースデータベースとターゲットデータベースの間でデータの不整合が発生する可能性があります。 この場合、データ移行タスクの実行は停止しません。 データの不整合を防ぐために、ターゲットデータベースのmaxmemory-policyパラメーターをnoevictionに設定することを推奨します。 このように、ターゲットデータベースに十分なメモリがない場合、データ移行タスクは失敗しますが、ターゲットデータベースのデータ損失を防ぐことができます。 データ削除ポリシーの詳細については、Tairのデフォルトの削除ポリシーは何ですか?
プレフィックスがDTS_REDIS_TIMESTAMP_HEARTBEATであるキーがソースデータベースに存在するのはなぜですか。
データの移行と同期の効率を確保するために、DTSはプレフィックスがDTS_REDIS_TIMESTAMP_HEARTBEATであるキーをソースデータベースに挿入して、更新が発生した時点を記録します。 ソースデータベースがクラスターアーキテクチャを使用している場合、DTSは各シャードにキーを挿入します。 DTSは、データ移行中にキーを除外します。 データ移行が完了すると、キーは自動的に期限切れになります。
リクエスト内の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スクリプトの実行結果を明示的に返さないためです。