Data Transmission Service (DTS) は、Redisクラスター間の一方向同期をサポートします。 この機能は、データ移行、アクティブな地理的冗長性、および地理的災害復旧などのシナリオに適用できます。 このトピックでは、セルフマネージドRedisクラスターからTair (Redis OSS-Compatible)クラスターインスタンスへの一方向同期を設定する方法について説明します。
手順に従って、Tair (Redis OSS-Compatible)クラスターインスタンスから自己管理Redisクラスターへのデータ同期を設定することもできます。 ただし、実際のシナリオに基づいてソースインスタンスとターゲットインスタンスのパラメーターを設定する必要があります。
データ同期タスクを設定した後、ソースインスタンスまたはターゲットインスタンスのアーキテクチャタイプを変更しないでください。 たとえば、マスターレプリカアーキテクチャをクラスターアーキテクチャに変更すると、データの同期が失敗します。 Tair (Redis OSS-Compatible)でサポートされているアーキテクチャタイプの詳細については、 概要をご参照ください。
前提条件
自己管理型Redisクラスターのデータベースバージョンは、2.8、3.0、3.2、4.0、または5.0です。
説明ターゲットTair (Redis OSS-Compatible)クラスターインスタンスのデータベースバージョンを4.0または5.0できます。 ターゲットデータベースのバージョンは、ソースデータベースのバージョンと同じかそれ以降である必要があります。 異なるバージョンのRedisデータベース間でデータを同期する場合は、ソースデータベースとターゲットデータベースのバージョンが互換性があることを確認してください。 従量課金のTair (Redis OSS-Compatible)クラスターインスタンスを作成して、データベースの互換性を確認できます。 検証後、インスタンスをリリースするか、課金方法をサブスクリプションに変更できます。
ターゲットTair (Redis OSS-Compatible)クラスターインスタンスの使用可能なストレージ容量が、ソースRedisクラスターのデータの合計サイズよりも大きいこと。
ソースRedisクラスターのすべてのノードが
PSYNC
コマンドをサポートし、同じパスワードを共有します。ソースインスタンスのマスターノードとレプリカノード間のデータレプリケーションのタイムアウト期間は、repl-timeoutパラメーターで指定します。 デフォルトでは、このパラメータは60秒に設定されています。
config set repl-timeout 600
コマンドを実行して、このパラメーターを600秒に設定することを推奨します。 ソースインスタンスに大量のデータが保存されている場合は、ビジネス要件に基づいてrepl-timeoutパラメーターの値を増やすことができます。
注意事項
DTSは、最初の完全データ同期中にソースインスタンスとターゲットインスタンスのリソースを使用します。 これにより、データベースサーバーの負荷が増加する可能性があります。 大量のデータを同期したり、サーバーの仕様が要件を満たしていない場合、データベースサービスが利用できなくなることがあります。 データを同期する前に、ソースインスタンスとターゲットインスタンスのパフォーマンスに対するデータ同期の影響を評価します。 オフピーク時にデータを同期することを推奨します。
データ同期の安定性を確保するために、redis.confファイルの
repl-backlog-size
パラメーターの値を大きくすることを推奨します。同期品質を確保するために、DTSはソースRedisクラスターに次のキーを追加します。 このキーは、データがTair (Redis OSS-Compatible)に同期される時刻を記録するために使用されます。
ソースRedisクラスターで
FLUSHDB
またはFLUSHALL
コマンドを実行しないことを推奨します。 いずれかのコマンドを実行すると、ソースデータベースとターゲットデータベースの間でデータの不整合が発生する可能性があります。デフォルトでは、データの削除方法を指定するmaxmemory-policyパラメーターは、Tair (Redis OSS-Compatible)インスタンスのvolatile-lruに設定されています。 デスティネーションインスタンスのメモリが不十分な場合、データの削除により、ソースインスタンスとデスティネーションインスタンスの間でデータの不整合が発生する可能性があります。 この場合、データ同期タスクは実行を停止しません。
データの不整合を防ぐため、ターゲットインスタンスのmaxmemory-policyをnoevictionに設定することを推奨します。 このように、宛先インスタンスのメモリが不十分な場合、データ同期タスクは失敗しますが、宛先インスタンスのデータ損失を防ぐことができます。
説明データ削除ポリシーの詳細については、「Tair (Redis OSS-compatible)のデフォルトの削除ポリシーは何ですか?」をご参照ください。
ソースデータベースの特定のキーに対して有効期限ポリシーが有効化されている場合、これらのキーは、有効期限が切れた後の最も早い機会に削除されない場合があります。 したがって、宛先データベース内のキーの数は、ソースデータベース内のキーの数よりも少なくてもよい。 INFOコマンドを実行して、ターゲットデータベース内のキーの数を表示できます。
説明有効期限ポリシーが有効になっていない、または有効期限が切れていないキーの数は、ソースデータベースとターゲットデータベースで同じです。
データ同期中に、自己管理Redisデータベースのシャードの数が増減した場合、またはメモリ容量のスケールアップなどのデータベース仕様を変更した場合、データ同期タスクを再構成する必要があります。 データの一貫性を確保するために、データ同期タスクを再構成する前に、ターゲットインスタンスに同期されたデータをクリアすることを推奨します。
データ同期中に、自己管理Redisデータベースのエンドポイントが変更された場合、データ同期タスクを再構成する必要があります。
スタンドアロンTair (Redis OSS-Compatible)インスタンスからTair (Redis OSS-Compatible)クラスターインスタンスへのデータ同期の制限: 各コマンドは、Tair (Redis OSS-Compatible)クラスターインスタンスの単一のスロットでのみ実行できます。 ソースデータベース内の複数のキーに対して操作を実行し、キーが異なるスロットに属している場合、次のエラーが発生します。
CROSSSLOT Keys in request don't hash to the same slot
データ同期中は、1つのキーに対してのみ操作を実行することを推奨します。 それ以外の場合、データ同期タスクは中断されます。
ターゲットインスタンスがクラスターアーキテクチャにデプロイされ、ターゲットインスタンスのシャードが使用するメモリ量が上限に達した場合、またはターゲットインスタンスの使用可能なストレージスペースが不十分な場合、メモリ不足 (OOM) によりデータ同期タスクが失敗します。
ターゲットインスタンスに対して透過データ暗号化 (TDE) 機能が有効になっている場合、DTSを使用してデータを同期することはできません。
課金
同期タイプ | タスク設定料金 |
スキーマ同期と完全データ同期 | 無料です。 |
増分データ同期 | 有料。 詳細については、「課金の概要」をご参照ください。 |
サポートしている同期トポロジ
一方向の 1 対 1 の同期
一方向の 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 (ソースインスタンスのエンジンバージョンが4.0の場合のみサポート)
XADD、XCLAIM、XDEL、XAUTOCLAIM、XGROUP CREATECONSUMER、およびXTRIM
公開操作は同期できません。
EVALまたはEVALSHAコマンドを実行してLuaスクリプトを呼び出す場合、DTSはこれらのLuaスクリプトがターゲットインスタンスで実行されているかどうかを識別できません。 これは、増分データ同期中に、ターゲットインスタンスがLuaスクリプトの実行結果を明示的に返さないためです。
DTSがSYNCまたはPSYNCコマンドを実行してLISTタイプのデータを転送すると、DTSはターゲットインスタンスの既存のデータをクリアしません。 その結果、宛先インスタンスは重複するデータレコードを含むことがある。
手順
DTSインスタンスを購入します。 詳細については、「データ同期インスタンスの購入」をご参照ください。
説明購入ページで、ソースインスタンスとターゲットインスタンスの両方のパラメーターをRedisに設定します。
最初に DTSコンソールにログインします。
説明DTSコンソールからDMSコンソールに移動している場合は、右下隅にあるアイコンの上にポインターを移動し、アイコンをクリックしてDTSコンソールに戻ることができます。
ログイン後に新しいバージョンのDTSコンソールが表示される場合は、右下隅にあるアイコンをクリックして、以前のバージョンに戻ることができます。
左側のナビゲーションウィンドウで、[データ同期] を選択します。
[データ同期タスク] ページの上部で、ターゲットインスタンスが存在するリージョンを選択します。
データ同期インスタンスを見つけ、[操作] 列の [タスクの設定] をクリックします。
ソースデータベースとターゲットデータベースの設定
セクション
パラメーター
説明
非該当
同期タスク名
DTSが自動的に生成するタスク名。 タスクを簡単に識別できるように、わかりやすい名前を指定することをお勧めします。 一意のタスク名を使用する必要はありません。
ソースインスタンスの詳細
インスタンスタイプ
ソースデータベースのアクセス方法。 [ECS インスタンスのユーザー作成データベース] を選択します。 ソースデータベースのタイプに基づいて、[ECSインスタンスのユーザー作成データベース] または [Express Connect、VPN Gateway、またはSmart Access Gateway経由で接続されたユーザー作成データベース] を選択できます。
この例では、ECSインスタンスのユーザー作成データベースが選択されています。 手順に従って、他の種類の自己管理型Redisデータベースのデータ同期タスクを設定することもできます。
インスタンスリージョン
購入ページで選択したソースリージョン。 このパラメーターの値は変更できません。
ECS インスタンス ID
セルフマネージドRedisクラスター内のマスターノードが存在するElastic Compute Service (ECS) インスタンスのID。
データベースエンジン
このパラメーターの値はRedisに設定されています。
インスタンスモード
ソースデータベースがデプロイされるアーキテクチャ。 [クラスター] を選択します。
ポート番号
自己管理Redisクラスター内のマスターノードのサービスポート番号。 この例では、7000が入力されます。
データベースパスワード
自己管理Redisデータベースへのログインに使用されるパスワード。
説明このパラメーターはオプションで、データベースパスワードが設定されていない場合は空のままにできます。
ターゲットインスタンスの詳細
インスタンスタイプ
ターゲットデータベースのタイプ。 [Redisインスタンス] を選択します。
インスタンスリージョン
購入ページで選択したターゲットリージョン。 このパラメーターの値は変更できません。
インスタンス ID
ターゲットTair (Redis OSS-Compatible)クラスターインスタンスのID。
データベースパスワード
ターゲットTair (Redis OSS-Compatible)クラスターインスタンスのデータベースパスワード。
説明データベースのパスワードは <user >:< password> 形式です。 たとえば、インスタンスへのログインに使用するアカウントのユーザー名がadminで、パスワードがRp829dlwaの場合、データベースのパスワードはadmin:Rp829dlwaです。
ページの右下隅にある [ホワイトリストの設定] および [次へ] をクリックします。
説明ApsaraDB RDS for MySQLやApsaraDB for MongoDBなどのApsaraDBインスタンス、またはECSインスタンスでホストされている自己管理データベースのセキュリティ設定を変更する必要はありません。 DTSは、DTSサーバーのCIDRブロックをApsaraDBインスタンスのホワイトリストまたはECSインスタンスのセキュリティグループルールに自動的に追加します。 詳細については、「DTSサーバーのCIDRブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。
データ同期が完了したら、DTSサーバーのCIDRブロックをホワイトリストまたはセキュリティグループから削除することを推奨します。
競合するテーブルと同期するオブジェクトの処理モードを選択します。
設定
説明
競合するテーブルの処理モードを選択する
事前チェックとインターセプト: ターゲットインスタンスが空かどうかを確認します。 ターゲットインスタンスが空の場合、事前チェックに合格します。 ターゲットインスタンスが空でない場合、事前チェック中にエラーが返され、データ同期タスクを開始できません。
無視: 空のターゲットインスタンスのチェックをスキップします。
警告[無視] を選択した場合、ソースインスタンスのデータレコードは、ターゲットインスタンスの同じキーを持つデータレコードを上書きします。 作業は慎重に行ってください。
同期するオブジェクトの選択
[使用可能] セクションから1つ以上のデータベースを選択し、アイコンをクリックしてデータベースを [選択済み] セクションに移動します。
同期するオブジェクトとしてデータベースを選択できます。 同期するオブジェクトとしてキーを選択できません。
データベースとテーブルの名前変更
このシナリオでは、オブジェクトの名前を変更できません。
DMSがDDL操作を実行するときの一時テーブルのレプリケート
DMSを使用してソースデータベースでオンラインDDL操作を実行する場合、オンラインDDL操作によって生成された一時テーブルを同期するかどうかを指定できます。
Yes: DTSは、オンラインDDL操作によって生成された一時テーブルのデータを同期します。
説明オンラインDDL操作が大量のデータを生成する場合、データ同期タスクが遅延する可能性があります。
No: DTSは、オンラインDDL操作によって生成された一時テーブルのデータを同期しません。 ソースデータベースの元のDDLデータのみが同期されます。
説明[いいえ] を選択すると、ターゲットデータベースのテーブルがロックされる可能性があります。
失敗した接続の再試行時間
既定では、DTSがソースデータベースまたはターゲットデータベースへの接続に失敗した場合、DTSは次の720分 (12時間) 以内に再試行します。 必要に応じて再試行時間を指定できます。 DTSが指定された時間内にソースデータベースとターゲットデータベースに再接続すると、DTSはデータ同期タスクを再開します。 それ以外の場合、データ同期タスクは失敗します。
説明DTSが接続を再試行すると、DTSインスタンスに対して課金されます。 ビジネスニーズに基づいて再試行時間を指定することを推奨します。 ソースインスタンスとターゲットインスタンスがリリースされた後、できるだけ早くDTSインスタンスをリリースすることもできます。
ページの右下に表示される [次へ] をクリックします。
初期同期タイプを選択します。 値はInclude full data + incremental dataに設定されており、変更することはできません。
説明DTSは、履歴データをソースインスタンスからターゲットインスタンスに同期します。 次に、DTSは増分データを同期します。
バージョン関連のエラーメッセージが表示された場合は、ソースインスタンスを指定したバージョンにアップグレードできます。 詳細については、「メジャーバージョンのアップグレード」および「インスタンスのマイナーバージョンの更新」をご参照ください。
ページの右下に表示される [事前確認] をクリックします。
説明データ同期タスクを開始する前に、DTSは事前チェックを実行します。 データ同期タスクは、タスクが事前チェックに合格した後にのみ開始できます。
タスクが事前チェックに合格しなかった場合は、失敗した各項目の横にあるアイコンをクリックして詳細を表示できます。
原因に基づいて問題をトラブルシューティングし、事前チェックを再度実行できます。
問題をトラブルシューティングする必要がない場合は、失敗した項目を無視して、再度事前チェックを実行できます。
[事前チェックに合格] の後に、[事前チェック] ダイアログボックスを閉じます。 [事前チェック] ダイアログボックスにメッセージが表示されます。 その後、データ同期タスクが開始されます。
最初の同期が完了し、データ同期タスクが同期状態になるまで待ちます。
説明データ同期タスクの状態は、[同期タスク] ページで確認できます。