Data Transmission Service (DTS) の API を使用して、Tair (Redis OSS 互換) Enterprise Edition インスタンスの一方向または双方向のデータ同期を設定できます。このトピックでは、注意事項とサンプルコードについて説明します。
前提条件
ソースインスタンスと宛先インスタンスは、Tair (Redis OSS 互換) Enterprise Edition インスタンスです。
Tair インスタンスが [永続メモリ] をその [記憶媒体] として使用する場合、appendonly パラメーターを yes に設定してください。詳細については、「手順」をご参照ください。
注意事項
-
双方向同期の場合、正方向同期ジョブは初期完全同期と増分同期を実行します。逆方向同期ジョブは増分同期のみを実行します。
警告データ整合性を確保するため、双方向同期タスクの実行中は、ソースデータベースとターゲットデータベースの同じキーに対してデータを変更したり書き込んだりしないでください。
DTS は、初期完全同期中にソースデータベースとターゲットデータベースのリソースを使用します。これにより、データベースサーバーの負荷が増加する可能性があります。大量のデータを同期する場合や、サーバーの仕様が要件を満たしていない場合、データベースサービスが利用できなくなることがあります。データを同期する前に、データ同期がソースインスタンスと宛先インスタンスのパフォーマンスに与える影響を評価してください。オフピーク時にデータを同期することを推奨します。
-
ソースインスタンスで
FLUSHDBまたはFLUSHALLコマンドを実行しないでください。実行すると、ソースとターゲット間でデータの不整合が発生します。 -
ターゲットデータベースのメモリが不足し、データエビクションがトリガーされると、ソースとターゲット間でデータが不整合になる可能性があります。これは、Tair (Redis OSS 互換) のデフォルトのデータエビクションポリシー (maxmemory-policy) が volatile-lru であるために発生します。ただし、これは通常のタスク操作には影響しません。
この問題を回避するには、ターゲットデータベースのデータエビクションポリシーを noeviction に設定することを推奨します。このポリシーでは、ターゲットのメモリが不足した場合、書き込み操作は失敗し、タスクは停止し、エビクションによるデータ損失は発生しません。
説明データエビクションポリシーの詳細については、「Redis のデータエビクションポリシー」をご参照ください。
-
ソースデータベースが一部のキーに有効期限ポリシーを使用している場合、ターゲットデータベースのキー数が少なく見えることがあります (info などのコマンドで報告されるように)。これは、有効期限が切れたキーがソースデータベースですぐに削除されないことがあるためです。
説明有効期限ポリシーがない、または有効期限が切れていないキーの数は、ソースデータベースとターゲットデータベースの両方で同じです。
宛先 Tair (Redis OSS 互換) Enterprise Edition インスタンスで直接接続が無効になっている場合、DTS はプロキシ転送モードを使用して宛先インスタンスにデータを書き込みます。
説明直接接続を有効にする方法の詳細については、「直接接続の有効化」をご参照ください。
-
同期中にソース Redis インスタンスがスケールされた場合 (シャードの追加や削除など)、または仕様が変更された場合 (メモリの増加など)、タスクを再設定する必要があります。データ整合性を確保するため、タスクを再設定する前に、宛先 Redis インスタンスから同期されたすべてのデータをクリアすることを推奨します。
-
同期中にソース Redis インスタンスのエンドポイントが変更された場合 (アベイラビリティゾーンの変更や、ネットワークタイプがクラシックネットワークから Virtual Private Cloud (VPC) への切り替えなど)、タスクを再設定する必要があります。
-
スタンドアロン Redis インスタンスからクラスターモード Redis インスタンスにデータを同期する場合、以下の制限が適用されます。Redis クラスターでは、同じスロットにあるキーに対してのみコマンドを操作できます。キーが複数のスロットにまたがる複数キー操作をソースデータベースで実行すると、次のエラーが発生します:
CROSSSLOT Keys in request don't hash to the same slotタスクの中断を防ぐため、データ同期中は単一キー操作のみを実行することを推奨します。
- 宛先インスタンスがクラスターインスタンスであり、そのシャードの 1 つがメモリ制限に達した場合、または宛先インスタンスのストレージ容量が不足した場合、DTS ジョブはメモリ不足 (OOM) エラーで失敗します。
ソースまたは宛先インスタンスで TDE (透過的データ暗号化) 機能が有効になっている場合、DTS を使用してソースデータベースからターゲットデータベースにデータを同期することはできません。
-
ソースインスタンスが自主管理 Redis の場合、
config set repl-timeout 600コマンドを使用して、スレーブとマスター間のレプリケーションタイムアウト (repl-timeout) を 600 秒に設定することを推奨します。ソースデータベースに大量のデータが含まれている場合は、repl-timeout パラメーターの値を大きくすることができます。 -
双方向同期タスクには、正方向同期タスクと逆方向同期タスクが含まれます。タスクを設定またはリセットする際に、一方のタスクの宛先オブジェクトがもう一方のタスクの同期オブジェクトと一致する場合:
-
一方のタスクのみが完全データと増分データの同期を許可します。もう一方のタスクは増分同期のみをサポートします。
-
現在のタスクのソースからのデータは、現在のタスクの宛先にのみ同期されます。もう一方のタスクのソースデータとしては機能しません。
-
課金
同期タイプ | 料金 |
スキーマ同期と完全データ同期 | 無料です。 |
増分データ同期 | 有料です。詳細については、「課金概要」をご参照ください。 |
制限事項
一方向カスケード同期はサポートされていません。詳細については、「同期トポロジ」をご参照ください。
同期可能なコマンド
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、RPOP、RPOPLPUSH、RPUSH、および RPUSHX
SADD、SDIFFSTORE、SELECT、SET、SETBIT、SETEX、SETNX、SETRANGE、SINTERSTORE、SMOVE、SPOP、SREM、および SUNIONSTORE
UNLINK、ZADD、ZINCRBY、ZINTERSTORE、ZREM、ZREMRANGEBYLEX、ZUNIONSTORE、ZREMRANGEBYRANK、および ZREMRANGEBYSCORE
SWAPDB (ソースまたは宛先インスタンスがクラスターアーキテクチャでデプロイされている場合、このコマンドは同期できません。)
PUBLISH コマンドは同期できません。
EVAL または EVALSHA コマンドを実行して Lua スクリプトを呼び出す場合、DTS はこれらの Lua スクリプトがターゲットデータベースで実行されたかどうかを識別できません。これは、増分データ同期中にターゲットデータベースが Lua スクリプトの実行結果を明示的に返さないためです。
DTS が SYNC または PSYNC コマンドを実行して LIST タイプのデータを転送する場合、DTS は既存のデータをクリアしません。その結果、宛先インスタンスに重複したデータレコードが含まれる可能性があります。
事前準備
Alibaba Cloud アカウントの AccessKey ペアを保護するため、Resource Access Management (RAM) ユーザーを作成し、その RAM ユーザーに DTS へのアクセス権限を付与してから、RAM ユーザーの AccessKey ペアを使用して DTS SDK for Java を呼び出すことを推奨します。詳細については、「RAM ユーザーを使用したリソースへのアクセスコントロール」をご参照ください。
データ同期インスタンスの作成
OpenAPI Explorer にログインします。
-
ビジネス要件に基づいてリクエストパラメーターを設定します。次の表にパラメーターを示します。
パラメーター
説明
値
SourceRegion
ソースインスタンスが存在するリージョンの ID。
ビジネス要件に基づいて、これらのパラメーターの値を指定します。
DestRegion
宛先インスタンスが存在するリージョンの ID。
Topology
同期トポロジ。有効な値:
oneway (デフォルト): 一方向同期。
bidirectional: 双方向同期。
SynchronizationJobClass
データ同期インスタンスのインスタンスクラス。
PayType
データ同期インスタンスの課金方法。有効な値:
PrePaid: サブスクリプション。
PostPaid (デフォルト): 従量課金。
SourceEndpoint.InstanceType
ソースインスタンスのタイプ。
値を Redis に設定します。
DestinationEndpoint.InstanceType
宛先インスタンスのタイプ。
値を Redis に設定します。
説明詳細については、「CreateSynchronizationJob」をご参照ください。
ページの下部にある [呼び出し開始] をクリックします。
-
[応答] タブで、API 応答を表示します。
説明応答から同期インスタンス ID (
SynchronizationJobId) を記録します。重要リクエストが失敗した場合は、応答で返された message に基づいてリクエストパラメーターを修正し、リクエストが成功するまで再度送信する必要があります。
-
オプション: SDK サンプルコードを取得します。
[SDK サンプルコード] タブをクリックします。
SDK のバージョンと言語を指定します。
-
コードセクションの右上隅にあるコピーアイコン をクリックしてコードをコピーします。
一方向同期タスクの設定
この例では、ソースインスタンスのデータベースアカウントはソースデータベースに対する読み取り権限を持っています。宛先インスタンスのデータベースアカウントは、ターゲットデータベースに対する読み取りおよび書き込み権限を持っています。
一方向データ同期を設定する場合、自主管理 Redis データベースまたは Tair (Redis 互換) インスタンスをソースまたはターゲットデータベースとして使用することもできます。設定方法はこの例と似ていますが、MigrationReserved などの対応するリクエストパラメーターを調整する必要があります。
OpenAPI Explorer にログインします。
ビジネス要件に基づいてリクエストパラメーターを設定します。
説明SynchronizationDirection パラメーターを Forward に設定する必要があります。詳細については、「ConfigureSynchronizationJob」をご参照ください。
ページの下部にある [呼び出し開始] をクリックします。
-
[応答] タブで、API 応答を表示します。
重要呼び出しが失敗した場合は、応答の Message を確認し、問題を修正してから再試行してください。
-
オプション。SDK のサンプルコードを取得します。
[SDK サンプルコード] タブをクリックします。
SDK のバージョンと言語を指定します。
-
コードセクションの右上隅にあるコピーアイコン をクリックしてコードをコピーします。
双方向同期タスクの設定
この例では、データ同期に使用されるデータベースアカウントは読み取りおよび書き込み権限を持っています。
正方向のデータ同期タスクを設定します。詳細については、このトピックの「一方向同期タスクの設定」セクションをご参照ください。
-
正方向同期ジョブが初期化を完了し、ステータスが 同期中 に変わるまで待ちます。
説明データ同期タスクのステータスは、DTS コンソールで表示するか、「データ同期ジョブのステータスのクエリ」操作を呼び出すことで確認できます。
-
逆方向のデータ同期タスクを設定します。
任意。 OpenAPI Explorer にログインします。
ビジネス要件に基づいてリクエストパラメーターを設定します。
説明SynchronizationDirection パラメーターを Reverse に設定する必要があります。詳細については、「ConfigureSynchronizationJob」をご参照ください。
ページの下部にある [呼び出し開始] をクリックします。
-
[応答] タブで、API 応答を表示します。
重要呼び出しが失敗した場合は、応答の Message を確認し、問題を修正してから再試行してください。
-
オプション。SDK のサンプルコードを取得します。
[SDK サンプルコード] タブをクリックします。
SDK のバージョンと言語を指定します。
-
コードセクションの右上隅にあるコピーアイコン をクリックしてコードをコピーします。
参考資料
パフォーマンスメトリクスを使用して、データ同期のパフォーマンスを確認できます。 DTS は、データ同期タスクの管理に役立つ接続とパフォーマンスメトリクスを提供します。
同期オブジェクトの追加 または データ同期タスクからのオブジェクトの削除
データ同期タスクの実行中に、タスクにオブジェクトを追加したり、タスクからオブジェクトを削除したりできます。