Data Transmission Service(DTS)を使用すると、2 つの Tair インスタンスを双方向に同期できます。つまり、いずれかのインスタンスへの書き込みが、もう一方のインスタンスにも反映されます。これは、アクティブ地理的冗長性およびジオディザスタリカバリアーキテクチャの基盤となります。
事前準備
開始する前に、以下の条件を満たしていることを確認してください。
ソースおよび宛先として使用する 2 つの Tair インスタンスが作成済みであること(または、クラウドディスクを使用し、Redis 5.0 を実行する Tair インスタンス)。詳細については、「ステップ 1:インスタンスの作成」および「ステップ 1:Tair インスタンスの作成」をご参照ください。
両インスタンスのストレージ容量が同一であること
両インスタンスに読み取りおよび書き込み権限を持つデータベースアカウントが設定されていること。詳細については、「データベースアカウントの作成と管理」をご参照ください。
サポートされるインスタンスタイプ
双方向同期は、以下の Tair インスタンスタイプのみをサポートします。
ローカルディスクを使用する Tair インスタンス
クラウドディスクを使用する Tair ダイナミックランダムアクセスメモリ(DRAM)ベースインスタンス
クラウドディスクを使用する Tair 永続メモリインスタンス
DTS では、正確に 2 つの Tair インスタンス間でのみ双方向同期がサポートされます。3 つ以上のインスタンスを含むトポロジはサポートされません。
制限事項
ソースデータベースの動作
DTS では、データが宛先に同期されたタイミングを追跡するために、ソースデータベースに DTS_REDIS_TIMESTAMP_HEARTBEAT で始まるキーが追加されます。クラスタアーキテクチャでは、このキーは各シャードに追加されます。このキーは同期時に除外され、タスク完了後に有効期限が切れます。
ソースデータベースが読み取り専用である場合、またはタスクを実行するアカウントに SETEX 権限がない場合、報告される同期遅延が不正確になる可能性があります。
同期の安定性を向上させるには、redis.conf の repl-backlog-size パラメーターを増加させます。
ソースデータベースで FLUSHDB または FLUSHALL コマンドを実行しないでください。これらのコマンドは、2 つのインスタンス間のデータ不整合を引き起こす可能性があります。
ソースデータベースで特定のキーに対して有効期間(TTL)が有効になっている場合、期限切れとなったキーが宛先で即座に削除されないことがあります。宛先データベース内のキー数を確認するには、INFO コマンドを実行します。
運用上の制約
| 制約 | 詳細 |
|---|---|
| インスタンス仕様の変更 | ソースインスタンスのシャード数を変更したり、メモリ容量をスケールアップ/ダウンした場合、同期タスクを再構成する必要があります。再構成の前に、宛先インスタンスで既に同期済みのデータをクリアしてください。 |
| データベースバージョン | 宛先データベースのバージョンは、ソースと同一またはそれより新しいものである必要があります。古いバージョンの宛先では、互換性の問題が発生する可能性があります。 |
| 初期同期ロード | 完全データ同期では、両インスタンスからの読み取りおよび書き込みが行われます。パフォーマンスへの影響を軽減するため、非ピーク時間帯にタスクを実行してください。 |
| 書き込みアクセス | 同期中は、宛先データベースへの書き込みを DTS 経由でのみ許可してください。これにより、データの不整合を防止できます。 |
| 競合解決 | 同一キーが異なる値で存在する場合、最新のキー値を持つレコードが競合するレコードを上書きします。 |
| メモリ制限 | 宛先インスタンスがクラスタアーキテクチャでデプロイされており、いずれかのシャードがメモリ制限に達した場合、または利用可能なストレージが不足した場合、タスクは「メモリ不足(OOM)」エラーで失敗します。 |
| データ立ち退きポリシー | デフォルトの立ち退きポリシー (volatile-lru) は、送信先のメモリが不足した場合にデータの不整合を引き起こす可能性があります。しかし、これはデータ同期タスク自体には影響しません。立ち退きポリシーを noeviction に設定すると、DTS はデータをサイレントにエビクションするのではなく、明示的に書き込みに失敗します。メモリが不足している場合、DTS はデータを書き込めず、タスクは失敗しますが、エビクションによるデータ損失は発生しません。詳細については、「Tair (Redis OSS 互換) はデフォルトでどのようにデータをエビクションしますか? |
| 透過的データ暗号化(TDE) | いずれかのインスタンスで TDE が有効になっている場合、DTS ではデータの同期ができません。 |
| 再開可能同期 | 一時的な切断がソース側の同期を中断した場合、DTS は宛先に対してフル同期を再開することがあり、一時的なデータ不整合を引き起こす可能性があります。 |
正方向および逆方向タスクの動作
双方向同期インスタンスには、正方向同期タスクおよび逆方向同期タスクの 2 つが含まれます。両タスクで対象となるオブジェクトについて、以下の点に注意してください。
完全データ同期および増分データ同期の両方を実行できるのは、いずれか 1 つのタスクのみです。もう一方のタスクは増分データ同期のみを実行します。
現在のタスクで同期されたデータは、他のタスクのソースデータとしてフィードバックされないため、同期ループが発生しません。
サポートされるコマンド
以下の Redis コマンドが同期可能です。
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、XADD、XCLAIM、XDEL、XAUTOCLAIM、XGROUP CREATECONSUMER、XTRIM、ZADD、ZINCRBY、ZINTERSTORE、ZREM、ZREMRANGEBYLEX、ZREMRANGEBYRANK、ZREMRANGEBYSCORE、ZUNIONSTORE
以下のコマンドには既知の制限があります。
PUBLISH — 同期はサポートされていません。
EVAL / EVALSHA — 増分同期中に宛先が明示的な実行結果を返さないため、DTS ではソースで実行された Lua スクリプトが宛先で適用されたかどうかを確認できません。
SYNC / PSYNC(LIST データ用)— DTS は書き込み前に宛先の既存データをクリアしないため、重複レコードが発生する可能性があります。
双方向同期の構成
構成手順は 2 段階で、まず正方向タスクを作成し、その後逆方向タスクを構成します。逆方向タスクは、正方向タスクが 実行中 状態に達した後に利用可能になります。
段階概要:
正方向タスクの作成 — ソースおよび宛先データベースの構成、同期オブジェクトおよび高度な設定の指定、事前チェックの実行、インスタンスの購入
逆方向タスクの構成 — 正方向タスクが 実行中 状態に達した後、自動的に作成された逆方向タスクを検索して構成を完了
ステップ 1:正方向タスクの作成
ステップ 1:データ同期タスクページへ移動
Data Management(DMS)コンソール にログインします。
トップナビゲーションバーで、Data + AI をクリックします。
左側のナビゲーションウィンドウで、DTS(DTS) > データ同期 を選択します。
ナビゲーションパスは、DMSコンソールモードに基づいて異なる場合があります。シンプルモードおよびDMSコンソールのレイアウトとスタイルをカスタマイズするをご参照ください。または、直接データ同期タスクページに移動します。
ステップ 2:リージョンの選択
データ同期タスク の右側で、同期インスタンスを配置するリージョンを選択します。
新規 DTS コンソールでは、代わりにトップナビゲーションバーからリージョンを選択します。
ステップ 3:ソースおよび宛先データベースの構成
続行する前に、構成ページに表示される 使用制限 を必ずご確認ください。このステップをスキップすると、タスクが失敗したり、データの不整合が発生したりする可能性があります。
| セクション | パラメーター | 説明 |
|---|---|---|
| 該当なし | タスク名 | DTS が自動的に名前を生成します。タスクを識別しやすいように、意味のある名前を指定してください(一意である必要はありません)。 |
| ソースデータベース | DMS データベースインスタンスの選択 | 既存の DMS データベースインスタンスを選択するか、手動で接続を構成します。既存のインスタンスを選択した場合、DTS が残りのパラメーターを自動的に設定します。 |
| データベースタイプ | Tair/Redis を選択します。 | |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 | |
| インスタンスリージョン | ソース Tair インスタンスが配置されているリージョンです。 | |
| Alibaba Cloud アカウント間でのデータ複製 | 同一アカウント内での同期の場合は、いいえ を選択します。 | |
| インスタンス ID | ソース Tair インスタンスの ID です。 | |
| データベースパスワード | <user>:<password> 形式のパスワードです。たとえば、ユーザー名が admin、パスワードが Rp829dlwa の場合、admin:Rp829dlwa と入力します。 | |
| 宛先データベース | DMS データベースインスタンスの選択 | 既存の DMS データベースインスタンスを選択するか、手動で接続を構成します。 |
| データベースタイプ | Tair/Redis を選択します。 | |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 | |
| インスタンスリージョン | 宛先 Tair インスタンスが配置されているリージョンです。 | |
| インスタンス ID | 宛先 Tair インスタンスの ID です。 | |
| データベースパスワード | <user>:<password> 形式のパスワードです。 |
ステップ 4:接続性のテスト
接続性のテストと続行 をクリックします。
DTS は、自動的にそのサーバーの CIDR ブロックを Alibaba Cloud データベースインスタンスのホワイトリストおよび Elastic Compute Service (ECS) インスタンスのセキュリティグループルールに追加します。データセンター内またはサードパーティプロバイダーがホストする自己管理データベースの場合、DTS サーバーの CIDR ブロックを手動でデータベースのホワイトリストに追加します。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
DTS の CIDR ブロックをホワイトリストまたはセキュリティグループに追加すると、セキュリティリスクが発生します。予防措置として、強力な認証情報を使用し、公開ポートを制限し、API 呼び出しを認証し、ホワイトリストルールを定期的に監査してください。さらに高いセキュリティを確保するには、Express Connect、VPN Gateway、または Smart Access Gateway を介してデータベースを DTS に接続することを推奨します。
ステップ 5:同期オブジェクトの構成
| パラメーター | 説明 |
|---|---|
| 同期タイプ | 完全データ同期 および 増分データ同期 の両方を選択します。完全同期によりベースラインが確立され、その後の増分同期によりインスタンス間の同期が維持されます。 |
| 競合テーブルの処理モード | 事前チェックとエラー報告:宛先に既にデータが存在する場合、事前チェックが失敗します。エラーを無視して続行:存在チェックをスキップします。 警告 このオプションを選択すると、ソースのレコードが同一キーを持つ宛先のレコードを上書きするため、データ損失が発生する可能性があります。 |
| 同期トポロジ | 双方向同期 を選択します。 |
| ソースオブジェクト | ソースオブジェクト から 1 つ以上のオブジェクトを選択し、矢印アイコンをクリックして 選択済みオブジェクト に移動します。選択可能なのはデータベースのみであり、個別のキーは選択できません。 |
| 選択済みオブジェクト | DB 0 から DB 255 への同期またはキープレフィックスによるフィルターを実行するには、[選択されたオブジェクト] 内のデータベースを右クリックし、[スキーマの編集] ダイアログでオプションを設定します。詳細については、「オブジェクト名のマッピング」および「フィルター条件の指定」をご参照ください。オブジェクト名は一度に 1 つだけマッピングできます。 |
ステップ 6:高度な設定の構成
次へ:高度な設定 をクリックします。
| パラメーター | 説明 |
|---|---|
| モニタリングとアラート | タスクが失敗した場合、または同期遅延がしきい値を超えた場合に通知を受け取るには、[はい]モニタリングとアラート機能の設定 を選択します。アラートのしきい値と通知設定を構成します。詳細については、「」をご参照ください。アラート機能をスキップするには、[いいえ] を選択します。 |
| 失敗した接続のリトライ時間 | DTS が失敗した接続をリトライするタイムウィンドウです。有効な値:10~1440 分。デフォルト:720 分。この値は 30 分以上に設定してください。タイムウィンドウ内に DTS が再接続した場合、タスクは自動的に再開されます。再接続しない場合、タスクは失敗します。 説明 複数のタスクが同じソースデータベースまたはターゲットデータベースを共有する場合、最も短いリトライウィンドウが優先されます。リトライ中も DTS インスタンスは課金されます。 |
| ターゲットデータベースキーの有効期限の延長 | ターゲットデータベース内の同期されたキーの有効期間を秒単位で延長します。EXPIRE、PEXPIRE、EXPIREAT、または PEXPIREAT コマンドを使用してインスタンス間のデータ整合性を維持する場合、この値を 600 に設定します。 |
| ETL の設定 | ETL (抽出、変換、ロード) 処理を有効にするには、[はい]データ移行またはデータ同期タスクにおける ETL の設定 を選択し、コードエディタにデータ変換の文を入力します。詳細については、「」をご参照ください。ETL をスキップするには、[いいえ] を選択します。 |
ステップ 7:タスク設定の保存および事前チェックの実行
次へ:タスク設定の保存および事前チェック をクリックします。
このタスク構成の API パラメーターをプレビューするには、次へ:タスク設定の保存および事前チェック の上にポインターを合わせ、OpenAPI パラメーターのプレビュー をクリックします。
DTS はタスク開始前に事前チェックを実行します。いずれかの確認項目が失敗した場合:
失敗した項目の横にある 詳細の表示 をクリックし、問題を解決してから、再チェック をクリックします。
無視可能なアラート項目の場合は:アラートの詳細の確認 をクリックし、詳細表示ダイアログで 無視 をクリックして確認し、再チェック をクリックします。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 8:インスタンスの購入
成功率 が 100% に達するまで待ち、その後 次へ:インスタンスの購入 をクリックします。
購入ページで、以下の項目を構成します。
| セクション | パラメーター | 説明 |
|---|---|---|
| 新規インスタンスクラス | 課金方法 | サブスクリプション:一定期間の前払い方式で、長期利用に適しています。従量課金:時間単位で課金され、短期利用に適しています。不要になったらインスタンスを解放して、課金を停止してください。 |
| リソースグループ設定 | このインスタンスのリソースグループです。デフォルト: デフォルトのリソースグループResource Management とは | |
| インスタンスクラス | 同期スループットを制御します。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 | |
| サブスクリプション期間 | サブスクリプション課金の場合のみ利用可能です。選択肢:1~9 か月、または 1、2、3、5 年。 |
Data Transmission Service(従量課金)サービス利用規約 をお読みになり、チェックボックスをオンにしてから、購入して開始 をクリックします。表示されるダイアログで、OK をクリックします。
正方向同期タスクがタスク一覧に表示されます。
ステップ 9:正方向タスクが「実行中」状態になるまで待機
正方向同期タスクが 実行中 状態になるまで待ちます。
完全データ同期 および 増分データ同期 の両方が選択されている場合、完全同期完了後にタスク一覧に 増分データ同期 が表示されます。
ステップ 2:逆方向タスクの構成
ステップ 10:逆方向タスクの検索および開始
タスク一覧で、正方向タスクの直下にリスト表示される逆方向同期タスクを検索し、タスクの構成 をクリックします。
ステップ 11:逆方向タスクの構成
上記のステップ 3~7 と同じ手順に従って構成します。
逆方向タスクでは、正方向タスクよりも少ないパラメーターが必要です。画面上の指示に従ってください。
逆方向タスクでは、ソースおよび宛先インスタンスが入れ替わります。つまり、正方向タスクの宛先がソースとなり、正方向タスクのソースが宛先となります。インスタンス名、アカウント、パスワードを慎重に確認してください。
ステップ 12:逆方向タスクの事前チェックの完了
成功率 が 100% に達するまで待ち、その後 戻る をクリックします。
ステップ 13:双方向同期の有効化の確認
正方向および逆方向の同期タスクの両方が 実行中 状態になるまで待ちます。これで双方向同期が有効になります。