Data Transmission Service (DTS) は、Tair (Redis OSS-Compatible)インスタンス間の一方向データ同期をサポートしています。 この機能は、アクティブな地理的冗長性や地理的災害復旧などのシナリオに適しています。 このトピックでは、Tair (Redis OSS-Compatible)インスタンス間の一方向の同期を設定する方法について説明します。
データ同期タスクを設定した後、ソースインスタンスまたはターゲットインスタンスのアーキテクチャタイプを変更しないでください。 たとえば、マスターレプリカアーキテクチャをクラスターアーキテクチャに変更すると、データの同期が失敗します。 Tair (Redis OSS-Compatible)でサポートされているアーキテクチャタイプの詳細については、 概要をご参照ください。
前提条件
ソースインスタンスとターゲットインスタンスのバージョンはDTSでサポートされています。 詳細については、「データ同期シナリオの概要」をご参照ください。
説明ターゲットインスタンスのバージョンは、ソースインスタンスのバージョンと同じかそれ以降である必要があります。 異なるバージョンのインスタンス間でデータを同期する場合は、ソースインスタンスとターゲットインスタンスのバージョンが互換性があることを確認してください。 たとえば、従量課金のターゲットインスタンスを作成して、ソースインスタンスとターゲットインスタンスの互換性を確認できます。 その後、このインスタンスをリリースするか、インスタンスの課金方法をサブスクリプションに変更できます。
ターゲットインスタンスの使用可能なストレージスペースが、ソースインスタンスのデータの合計サイズよりも大きいこと。
拡張エディション (Tair) 永続メモリ最適化インスタンスがソースインスタンスとして設定されている場合、appendonlyパラメーターはyesに設定されます。
ESSDベースのインスタンスは、ソースインスタンスとして設定されていません。
ソースインスタンスのマスターノードとレプリカノード間のデータレプリケーションのタイムアウト期間は、repl-timeoutパラメーターで指定します。 デフォルトでは、このパラメータは60秒に設定されています。
config set repl-timeout 600
コマンドを実行して、このパラメーターを600秒に設定することを推奨します。 ソースインスタンスに大量のデータが保存されている場合は、ビジネス要件に基づいてrepl-timeoutパラメーターの値を増やすことができます。
注意事項
DTSは、最初の完全データ同期中にソースインスタンスとターゲットインスタンスのリソースを使用します。 これにより、データベースサーバーの負荷が増加する可能性があります。 大量のデータを同期したり、サーバーの仕様が要件を満たしていない場合、データベースサービスが利用できなくなることがあります。 データを同期する前に、ソースインスタンスとターゲットインスタンスのパフォーマンスに対するデータ同期の影響を評価します。 オフピーク時にデータを同期することを推奨します。
ソースデータベースの特定のキーに対して有効期限ポリシーが有効化されている場合、これらのキーは、有効期限が切れた後の最も早い機会に削除されない場合があります。 したがって、宛先データベース内のキーの数は、ソースデータベース内のキーの数よりも少なくてもよい。 INFOコマンドを実行して、ターゲットデータベース内のキーの数を表示できます。
説明有効期限ポリシーが有効になっていない、または有効期限が切れていないキーの数は、ソースデータベースとターゲットデータベースで同じです。
データ同期中は、ソースインスタンスで
FLUSHDB
またはFLUSHALL
コマンドを実行しないことを推奨します。 そうしないと、ソースインスタンスとターゲットインスタンスの間でデータの不一致が発生する可能性があります。デフォルトでは、データの削除方法を指定するmaxmemory-policyパラメーターは、Tair (Redis OSS-Compatible)インスタンスのvolatile-lruに設定されています。 デスティネーションインスタンスのメモリが不十分な場合、データの削除により、ソースインスタンスとデスティネーションインスタンスの間でデータの不整合が発生する可能性があります。 この場合、データ同期タスクは実行を停止しません。
データの不整合を防ぐため、ターゲットインスタンスのmaxmemory-policyをnoevictionに設定することを推奨します。 このように、宛先インスタンスのメモリが不十分な場合、データ同期タスクは失敗しますが、宛先インスタンスのデータ損失を防ぐことができます。
説明データ削除ポリシーの詳細については、Tairのデフォルトの削除ポリシーは何ですか?
データ同期中に、ソースインスタンスのシャードの数が増減した場合、またはインスタンスの仕様が変更された場合 (メモリ容量がスケールアップされた場合など) 、データ同期タスクを再設定する必要があります。 データの一貫性を確保するために、データ同期タスクを再構成する前に、ターゲットインスタンスに同期されたデータをクリアすることを推奨します。
データ同期中に、ソースインスタンスのエンドポイントが変更される場合があります。 たとえば、インスタンスのゾーンが変更された場合、またはネットワークタイプがクラシックネットワークからVirtual Private Cloud (VPC) に変更された場合、ソースインスタンスのエンドポイントが変更されます。 この場合、データ同期タスクを再設定する必要があります。
スタンドアロン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はターゲットインスタンスの既存のデータをクリアしません。 その結果、宛先インスタンスは重複するデータレコードを含むことがある。
データベースアカウントに必要な権限
データベース | 権限と権限付与方法 |
ソースTair (Redis OSS-Compatible)インスタンス | データベースアカウントには読み取り権限が必要です。 アカウントに必要な権限を付与する方法の詳細については、「データベースアカウントの作成と管理」をご参照ください。 |
ターゲットTair (Redis OSS-Compatible)インスタンス | データベースアカウントには、読み取りおよび書き込み権限が必要です。 アカウントに必要な権限を付与する方法の詳細については、「データベースアカウントの作成と管理」をご参照ください。 |
手順
データ同期インスタンスを購入します。 詳細については、「データ同期インスタンスの購入」をご参照ください。
説明購入ページで、ソースインスタンスと宛先インスタンスの両方をRedisに設定します。
最初に DTSコンソール。
説明DTSコンソールからDMSコンソールに移動している場合は、右下隅にあるアイコンの上にポインターを移動し、アイコンをクリックしてDTSコンソールに戻ることができます。
ログイン後に新しいバージョンのDTSコンソールが表示される場合は、右下隅にあるアイコンをクリックして、以前のバージョンに戻ることができます。
左側のナビゲーションウィンドウで、[データ同期] を選択します。
[データ同期タスク] ページの上部で、ターゲットインスタンスが存在するリージョンを選択します。
データ同期インスタンスを見つけ、[操作] 列の [タスクの設定] をクリックします。
ソースデータベースとターゲットデータベースの設定
セクション
パラメーター
説明
非該当
同期タスク名
DTSが自動的に生成するタスク名。 タスクを簡単に識別できるように、わかりやすい名前を指定することをお勧めします。 一意のタスク名を使用する必要はありません。
ソースインスタンスの詳細
インスタンスタイプ
ターゲットデータベースのタイプ。 [Redisインスタンス] を選択します。
インスタンスリージョン
購入ページで選択したソースリージョン。 このパラメーターの値は変更できません。
インスタンス ID
ソースインスタンスの ID。
データベースパスワード
ソースインスタンスのデータベースパスワード。 データベースアカウントに必要な権限については、「データベースアカウントに必要な権限」をご参照ください。
説明データベースのパスワードは <user >:< password> 形式です。 たとえば、インスタンスへのログインに使用するアカウントのユーザー名がadminで、パスワードがRp829dlwaの場合、データベースのパスワードはadmin:Rp829dlwaです。
ターゲットインスタンスの詳細
インスタンスタイプ
ターゲットデータベースのタイプ。 [Redisインスタンス] を選択します。
インスタンスリージョン
購入ページで選択したターゲットリージョン。 このパラメーターの値は変更できません。
インスタンス ID
ターゲットインスタンスの ID。
データベースパスワード
ターゲットインスタンスのデータベースパスワード。 データベースアカウントに必要な権限については、「データベースアカウントに必要な権限」をご参照ください。
説明データベースのパスワードは <user >:< password> 形式です。 たとえば、インスタンスへのログインに使用するアカウントのユーザー名がadminで、パスワードがRp829dlwaの場合、データベースのパスワードはadmin:Rp829dlwaです。
ページの右下隅にある [ホワイトリストの設定] および [次へ] をクリックします。
説明ApsaraDB RDS for MySQLやApsaraDB for MongoDBなどのApsaraDBインスタンス、またはElastic Compute Service (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は事前チェックを実行します。 データ同期タスクは、タスクが事前チェックに合格した後にのみ開始できます。
タスクが事前チェックに合格しなかった場合は、失敗した各項目の横にあるアイコンをクリックして詳細を表示できます。
原因に基づいて問題をトラブルシューティングし、事前チェックを再度実行できます。
問題をトラブルシューティングする必要がない場合は、失敗した項目を無視して、再度事前チェックを実行できます。
[事前チェックに合格] の後に、[事前チェック] ダイアログボックスを閉じます。 [事前チェック] ダイアログボックスにメッセージが表示されます。 その後、データ同期タスクが開始されます。
最初の同期が完了し、データ同期タスクが同期状態になるまで待ちます。
説明データ同期タスクの状態は、[同期タスク] ページで確認できます。