Data Transmission Service (DTS) は、2 つの ApsaraDB for MongoDB レプリカセットインスタンス間でデータを双方向に同期します。両方のインスタンスは書き込み可能な状態を維持し、どちらかの側での変更は、フォワードタスクとリバースタスクのペアを通じて他方に伝播されます。
仕組み
双方向同期インスタンスは、次の 2 つのタスクで構成されます:
フォワードタスク:インスタンス A からインスタンス B にデータを同期します。スキーマ同期、完全データ同期、増分データ同期を処理します。
リバースタスク:インスタンス B からインスタンス A にデータを同期します。増分データ同期のみを処理します。
フォワードタスクの設定 --> 事前チェック --> 購入 --> フォワードタスク実行中
|
リバースタスクの設定 --> 事前チェック --> リバースタスク実行中
|
両方のタスクが実行中 = 双方向同期がアクティブ完全データを同期するのはフォワードタスクのみです。リバースタスクは増分データのみを同期します。リバースタスクを設定する前に、フォワードタスクが 実行中 状態になるまで待ってください。
サポートされるトポロジー
DTS は、ちょうど 2 つの ApsaraDB for MongoDB レプリカセットインスタンス間の双方向データ同期をサポートします。3 つ以上のインスタンス間での双方向同期はサポートされていません。
競合の解決
DTS は、「無視」という固定の競合解決戦略を使用します。競合が発生した場合、DTS はターゲットコレクション内の既存のデータを保持し、競合する操作をスキップします。この戦略は変更できません。
2 つのインスタンスのシステムクロックが異なる可能性があり、同期遅延が存在するため、競合検出メカニズムはすべてのデータ競合を防ぐことはできません。競合を避けるために、同じプライマリキー、ビジネスプライマリキー、または一意キーを持つレコードは、1 つの同期ノードでのみ更新してください。
| 競合タイプ | 動作 |
|---|---|
| INSERT の一意性競合 | ターゲットに同じキーを持つレコードが既に存在する場合、DTS は INSERT をスキップします。 |
| 存在しないまたは競合するレコードに対する UPDATE | ターゲットレコードが存在しないか、別のレコードと競合する場合、DTS は UPDATE をスキップします。 |
| 存在しないレコードに対する DELETE | ターゲットレコードが存在しない場合、DTS は DELETE をスキップします。 |
同期タイプ
| タイプ | 説明 |
|---|---|
| スキーマ同期 | 選択したオブジェクトのスキーマをソースからターゲットの ApsaraDB for MongoDB インスタンスに同期します。 |
| 完全データ同期 | 既存データ (データベースとコレクション) をソースからターゲットの ApsaraDB for MongoDB インスタンスに同期します。 |
| 増分データ同期 | 進行中の変更を同期します。サポートされる操作:CREATE COLLECTION、CREATE INDEX、DROP COLLECTION、DROP INDEX、RENAME COLLECTION、およびドキュメントの挿入、更新、削除。増分ファイルデータについては、$set コマンドのみがサポートされます。DTS は、タスク開始後に作成されたデータベースからの増分データを同期しません。 |
前提条件
開始する前に、以下を確認してください:
ソースとターゲットの ApsaraDB for MongoDB レプリカセットインスタンスが作成されていること。詳細については、「レプリカセットインスタンスの作成」をご参照ください。サポートされているデータベースのバージョンについては、「データ同期シナリオの概要」をご参照ください。
ターゲットインスタンスには、ソースインスタンスの総データサイズよりも少なくとも 10% 多くの利用可能なストレージがあること。
ソースとターゲットの両方のインスタンスで、
replication.oplogGlobalIdEnabledパラメーターがtrueに設定されていること。詳細については、「インスタンスのデータベースパラメーターの設定」をご参照ください。
replication.oplogGlobalIdEnabled が true に設定されていない場合、事前チェックが失敗するか、two-way mongo must have gid エラーが返されます。
ステップ 1:データ同期ページを開く
以下のいずれかの方法でデータ同期ページに移動します:
DTS コンソール
DTS コンソールにログインします。
左側のナビゲーションウィンドウで、データ同期 をクリックします。
左上隅で、データ同期タスクが存在するリージョンを選択します。
DMS コンソール
実際の操作は、DMS コンソールのモードおよびレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
DMS コンソールにログインします。
上部のナビゲーションバーで、データ + AI にポインターを合わせ、DTS (DTS) > データ同期 を選択します。
データ同期タスク の右側にあるドロップダウンリストから、データ同期インスタンスが存在するリージョンを選択します。
ステップ 2:フォワード同期タスクの作成と設定
タスクの作成 をクリックします。
(オプション) 右上隅の 新しい設定ページ をクリックします。
説明以前のバージョンに戻る ボタンが表示されている場合は、このステップをスキップしてください。新しいバージョンの設定ページを推奨します。
以下のパラメーターでソースデータベースとターゲットデータベースを設定します。
ソースデータベース
パラメーター 説明 タスク名 DTS が自動的に名前を生成します。タスクを簡単に識別できるように、わかりやすい名前を指定してください。一意の名前は必要ありません。 既存の接続を選択 データベースインスタンスが DTS に登録済みの場合は、ドロップダウンリストから選択してください。DTS により残りのパラメーターが自動的に設定されます。詳細については、「データベース接続の管理」をご参照ください。インスタンスが登録されていない場合は、以下のパラメーターを設定してください。 データベースタイプ MongoDB を選択します。 アクセス方法 Alibaba Cloud インスタンス を選択します。 インスタンスリージョン ソース ApsaraDB for MongoDB インスタンスのリージョンを選択します。 Alibaba Cloud アカウント間でのデータレプリケーション いいえ を選択します。 アーキテクチャ レプリカセット を選択します。 移行方法 Oplog を選択します。 インスタンス ID ソース ApsaraDB for MongoDB インスタンスを選択します。 認証データベース アカウントの認証情報を保存するデータベース。デフォルト: admin。データベースアカウント ソースインスタンスのデータベースアカウント。アカウントには、ソースデータベース、 configデータベース、adminデータベース、およびlocalデータベースに対する読み取り権限が必要です。詳細については、「DMS を使用したデータベースアカウントの管理」をご参照ください。データベースパスワード データベースアカウントのパスワード。 暗号化 要件に応じて、非暗号化、SSL 暗号化、または Mongo Atlas SSL を選択します。利用可能なオプションは、アクセス方法 と アーキテクチャ の設定によって異なります。アーキテクチャ が シャードクラスター で、移行方法 が Oplog の場合、SSL 暗号化 は利用できません。 ターゲットデータベース
パラメーター 説明 既存の接続を選択 データベースインスタンスが DTS に登録済みの場合、ドロップダウンリストからそのインスタンスを選択します。DTS により残りのパラメーターが自動的に入力されます。詳細については、「データベース接続の管理」をご参照ください。インスタンスが登録されていない場合は、以下のパラメーターを設定してください。 データベースタイプ MongoDB を選択します。 アクセス方法 Alibaba Cloud インスタンス を選択します。 インスタンスリージョン ターゲット ApsaraDB for MongoDB インスタンスのリージョンを選択します。 Alibaba Cloud アカウント間でのデータレプリケーション いいえ を選択します。 アーキテクチャ レプリカセット を選択します。 インスタンス ID ターゲット ApsaraDB for MongoDB インスタンスを選択します。 認証データベース アカウントの認証情報を保存するデータベース。デフォルト: admin。データベースアカウント ターゲットインスタンスのデータベースアカウント。アカウントには、dbAdminAnyDatabase 権限、ターゲットデータベースに対する読み取り/書き込み権限、および localデータベースに対する読み取り権限が必要です。詳細については、「DMS を使用したデータベースアカウントの管理」をご参照ください。データベースパスワード データベースアカウントのパスワード。 暗号化 要件に応じて、非暗号化、SSL 暗号化、または Mongo Atlas SSL を選択します。利用可能なオプションは、アクセス方法 と アーキテクチャ の設定によって異なります。ターゲットが アーキテクチャ を シャードクラスター に設定した ApsaraDB for MongoDB インスタンスの場合、SSL 暗号化 は利用できません。 接続をテストして続行 をクリックします。
説明DTS サーバーの CIDR ブロックが、ソースおよびターゲットデータベースのセキュリティ設定に追加されていることを確認してください。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
ステップ 3:同期オブジェクトの設定
オブジェクトの設定 ステップで、以下のパラメーターを設定します。
パラメーター 説明 同期タイプ 増分データ同期 がデフォルトで選択されています。スキーマ同期 および フルデータ同期 も選択してください。 競合テーブルの処理モード 事前チェックしてエラーを報告:ソースとターゲットに同名のコレクションが存在するかをチェックします。同名のコレクションが存在する場合、エラーが返され、タスクを開始できません。競合を解決するには、オブジェクト名マッピング を使用してコレクション名を変更してください。エラーを無視して続行:同名チェックをスキップします。ターゲットに同じプライマリキーまたはユニークキー値を持つレコードが存在する場合、DTS はそのレコードを同期せず、既存のデータを保持します。この場合、データの初期化に失敗したり、特定の列のみが同期されたり、データ同期インスタンスが失敗したりする可能性があります。 同期トポロジー 双方向同期 を選択します。 DDL 操作の除外 はい:DDL 操作を除外します。いいえ:DDL 操作を同期します。安定性を維持するため、DDL 操作は転送方向でのみ同期されます。 競合解決ポリシー 無視(固定値)に設定します。ターゲットデータベース内の競合レコードは保持されます。詳細については、「競合解決」をご参照ください。 宛先インスタンスにおけるオブジェクト名の大文字・小文字の扱い デフォルト:DTS デフォルトポリシー。ソースまたはターゲットデータベースのオブジェクト名の大文字・小文字の扱いに合わせるには、他のオプションを選択します。詳細については、「宛先インスタンスにおけるオブジェクト名の大文字・小文字の扱いの指定」をご参照ください。 ソースオブジェクト ソースオブジェクト パネルからデータベースまたはコレクションを選択し、右向き矢印アイコンをクリックして 選択済みオブジェクト パネルに追加します。 選択済みオブジェクト オブジェクトを右クリックして、ターゲットデータベースでの名前変更や特定のターゲットオブジェクトへのマッピングを行います。詳細については、「オブジェクト名のマッピング」をご参照ください。オブジェクトを削除するには、該当オブジェクトを選択して左向き矢印アイコンをクリックします。データベースまたはコレクション単位で増分データを同期するには、選択済みオブジェクト を右クリックし、表示されるダイアログボックスで操作を選択します。フルデータ同期中にデータをフィルターするには、コレクションを右クリックしてフィルター条件を設定します。詳細については、「フィルター条件の指定」をご参照ください。オブジェクト名マッピングを使用してデータベースまたはコレクションの名前を変更した場合、依存オブジェクトの同期に失敗する可能性があります。 次へ:詳細設定 をクリックし、以下のパラメーターを設定します。
パラメーター 説明 タスクスケジューリング用の専用クラスター デフォルトでは、タスクは共有クラスターで実行されます。安定性を向上させるには、専用クラスターの購入を推奨します。詳細については、「DTS 専用クラスターとは」をご参照ください。 接続失敗時のリトライ時間 接続失敗時のリトライ時間範囲。有効値:10~1440 分。デフォルト:720。30 より大きい値を設定してください。DTS が指定時間内に再接続すると、タスクは再開されます。そうでない場合、タスクは失敗します。複数のタスクがソースまたはターゲットデータベースを共有する場合、最も短いリトライ時間が優先されます。DTS はリトライ中のインスタンスに対して課金します。 その他の問題に対するリトライ時間 失敗した DDL または DML 操作のリトライ時間範囲。有効値:1~1440 分。デフォルト:10。10 より大きい値を設定してください。この値は 接続失敗時のリトライ時間 よりも小さくする必要があります。 完全データ同期のスロットリングを有効にする ソースデータベースへの秒間クエリ数 (QPS)、完全データ移行の RPS、および 完全移行のデータ移行速度 (MB/s) を設定して、ターゲットサーバーの負荷を軽減します。完全データ同期 が選択されている場合にのみ利用可能です。 同期対象データのテーブル内のプライマリキー _id のデータ型は 1 つのみ 各コレクションでプライマリキー _idのデータ型が一意であるかどうか。はい:DTS は_idのデータ型をスキャンせず、コレクションごとに 1 つのデータ型のみを同期します。いいえ:DTS は_idのデータ型をスキャンし、一致するすべてのデータを同期します。データに基づいて設定してください。完全データ同期 が選択されている場合にのみ表示されます。増分データ同期のスロットリングを有効にする 増分データ同期の RPS と 増分同期のデータ同期速度 (MB/s) を設定して、ターゲットサーバーの負荷を軽減します。 環境タグ DTS インスタンスを識別するための環境タグ。オプション。 ETL の設定 はい: ETL (抽出・変換・書き出し) を設定します。詳細については、「ETL とは?」および「データ同期タスクで ETL を設定する」をご参照ください。いいえ: ETL を設定しません。 モニタリングとアラート [はい]: タスクの失敗または同期遅延に対するアラートしきい値および通知設定を構成します。詳細については、「モニタリングおよびアラート設定の構成」をご参照ください。[いいえ]: アラート機能を有効にしません。 [次のステップ:データ検証] をクリックして、データ検証を設定します。詳細については、「データ検証タスクを設定する」をご参照ください。
ステップ 4:事前チェックの実行とインスタンスの購入
タスク設定を保存し、事前チェックを実行します。
タスクの API パラメーターを表示するには、次へ:タスク設定を保存して事前チェック にポインターを合わせ、OpenAPI パラメーターのプレビュー をクリックします。
次へ:タスク設定を保存して事前チェック をクリックします。
説明DTS はタスクを開始する前に事前チェックを実行します。タスクは事前チェックに合格した後にのみ開始できます。
事前チェックが失敗した場合は、失敗した項目の横にある 詳細の表示 をクリックし、問題をトラブルシューティングして事前チェックを再実行します。
アラートがトリガーされた場合:無視できない項目については、トラブルシューティングを行い、事前チェックを再実行します。無視できる項目については、アラート詳細の確認 をクリックし、次に 無視、次に OK をクリックして、事前チェックを再実行します。アラートを無視すると、データの不整合が発生する可能性があります。
成功率 が 100% に達するまで待ち、次へ:インスタンスの購入 をクリックします。
購入ページで、インスタンスを設定します。
パラメーター 説明 課金方法 サブスクリプション:長期利用に向け、事前に料金を支払います。従量課金:1 時間単位で課金されます。短期利用に適しています。不要になった場合は、インスタンスをリリースしてください。 リソースグループ設定 インスタンスのリソースグループです。デフォルト:デフォルトリソースグループ。詳細については、「What is Resource Management? インスタンスクラス 同期速度の要件に基づき、インスタンスクラスを選択します。詳細については、「Instance classes of data synchronization instances」をご参照ください。 サブスクリプション期間 サブスクリプションでのみ利用可能です。有効値:1~9 か月、または 1 年、2 年、3 年、5 年。 Data Transmission Service (従量課金) サービス規約 を読み、選択します。
購入して開始 をクリックします。ダイアログボックスで OK をクリックします。フォワード同期タスクがタスクリストに表示されます。
ステップ 5:リバース同期タスクの設定
初期同期が完了し、フォワード同期タスクのステータスが 実行中 に変わるまで待ちます。
タスクリストでリバース同期タスクを見つけ、タスクの設定 をクリックします。
ステップ 2 (サブステップ 3 以降)、ステップ 3、およびステップ 4 の事前チェックの設定サブステップを繰り返し、以下の調整を加えてリバース同期タスクを設定します:
説明リバースタスクは、フォワードタスクを購入する際に自動的に作成されます。タスクの作成 (ステップ 2、サブステップ 1) をクリックしたり、新しいインスタンスを購入したり (ステップ 4、サブステップ 3 以降) する必要はありません。
重要- リバース方向のソースインスタンスは、フォワード方向のターゲットインスタンスであり、その逆も同様です。データベース名、アカウント、パスワードがそれに応じて設定されていることを確認してください。 - リバース方向ではオブジェクト名マッピングを使用しないでください。そうしないと、データの不整合が発生する可能性があります。 - インスタンスリージョン はリバース方向では変更できません。コンソールに表示されるパラメーターのみを設定してください。 - 競合するテーブルの処理モード については、フォワードタスクによって既にターゲットに同期されたコレクションが無視されるようにしてください。 - フォワードタスクで使用された 選択したオブジェクト リストから同じオブジェクトを選択することはできません。 - リバースタスクは DDL 操作を無視します。
成功率 が 100% に達するまで待ち、戻る をクリックします。
ステップ 6:同期ステータスの確認
フォワードとリバースの両方の同期タスクが 実行中 状態になると、双方向データ同期がアクティブになります。タスクリストでタスクのステータスを監視します。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期と完全データ同期 | 無料 |
| 増分データ同期 | 有料。詳細については、「課金の概要」をご参照ください。 |
制限事項
ソースおよびターゲットデータベースの要件
ソースとターゲットは両方とも同じアーキテクチャの ApsaraDB for MongoDB インスタンスである必要があります。自主管理 MongoDB データベースやアーキテクチャが異なるインスタンスでは、双方向同期はサポートされていません。
ターゲットの MongoDB バージョンは、ソースバージョンと同じかそれ以降である必要があります。
DTS は
admin、config、またはlocalデータベースからデータを同期できません。ソースデータベースは、Azure Cosmos DB for MongoDB クラスターまたは Amazon DocumentDB エラスティッククラスターであってはなりません。
DTS は SRV エンドポイントを介して MongoDB データベースに接続できません。
Oplog とチェンジストリーム
ソースデータベースで Oplog を有効にし、ログデータを少なくとも 7 日間保持する必要があります。または、チェンジストリームを有効にして、DTS が過去 7 日以内のデータ変更をサブスクライブできるようにします。そうしないと、データ同期が失敗し、データの不整合やデータ損失が発生する可能性があります。このような状況で発生した問題は、DTS サービスレベルアグリーメント (SLA) の対象外です。
データ変更を記録するために Oplog を使用することを推奨します。
チェンジストリームには MongoDB 4.0 以降が必要です。チェンジストリームを使用する場合、双方向同期はサポートされていません。
非エラスティックな Amazon DocumentDB クラスターの場合、チェンジストリームを有効にし、移行方法 を ChangeStream に、アーキテクチャ を シャードクラスター に設定します。
DDL とスキーマの制限
スキーマ同期および完全データ同期中は、データベースまたはコレクションのスキーマを変更しないでください (配列型の更新を含む)。変更すると、タスクの失敗やデータの不整合が発生します。
完全データ同期中に限り、ソースデータベースにデータを書き込まないでください。そうしないと、データの不整合が発生します。
双方向同期の安定性を維持するため、DDL 操作はフォワード方向でのみ同期されます。リバースタスクは DDL 操作を無視します。
データ型とコレクションの制限
コレクションには、すべてのフィールドが一意であるプライマリキーまたは一意制約が必要です。そうでない場合、ターゲットデータベースに重複したデータレコードが含まれる可能性があります。
単一のデータ入力は 16 MB を超えることはできません。この制限を超えるとタスクは失敗します。
ターゲットでコレクションを編集する場合 (名前の変更など)、単一のタスクは最大 1,000 コレクションまでサポートします。1,000 を超えるコレクションの場合は、作業を複数のタスクに分割するか、データベース全体を同期してください。
コレクションに一意なインデックスがあるか、
capped属性がtrueの場合、コレクションは増分データ同期中に同時リプレイなしのシングルスレッド書き込みのみをサポートします。これにより、同期遅延が増加する可能性があります。
データの整合性と競合の動作
DTS がターゲットコレクションに書き込む際にプライマリキーまたは一意キーの競合が発生した場合、DTS は書き込み文をスキップし、既存のターゲットデータを保持します。
トランザクション情報は保持されません。トランザクションは、ターゲットデータベースで単一のレコードに変換されます。
TTL インデックスは、同期後にソースとターゲットのデータベース間でデータの不整合を引き起こす可能性があります。
ターゲットデータベースには、ソースデータベースと同じプライマリキー (デフォルト:
_id) を持つデータがあってはなりません。そうしないと、データ損失が発生する可能性があります。重複するプライマリキーが存在する場合は、DTS を中断せずにターゲットデータベースの競合データをクリアしてください。同期中に他のソースからターゲットにデータを書き込むと、データの不整合が発生します。たとえば、他のソースから書き込み中に DMS を使用してオンライン DDL 文を実行すると、データ損失が発生する可能性があります。
パフォーマンスとストレージ
ソースデータベースをホストするサーバーには、十分なアウトバウンド帯域幅が必要です。帯域幅が不足すると、同期速度に影響します。
完全データ同期は両方のデータベースの読み取りおよび書き込みリソースを使用し、サーバーの負荷を増加させる可能性があります。オフピーク時に同期をスケジュールしてください。
完全データ同期中、データはターゲットデータベースに同時に書き込まれます。同期後のターゲットストレージは、ソースより 5% から 10% 大きくなります。
ターゲットの MongoDB データベースでカウント操作をクエリするには、
db.$table_name.aggregate([{ $count:"myCount"}])を使用します。
双方向同期タスクのルール
2 つのタスク (フォワードまたはリバース) のうち 1 つだけが、完全データと増分データの両方を同期できます。もう一方は増分データのみを同期します。
現在のタスクのソースデータは、そのタスクのターゲットデータベースにのみ同期されます。同期されたデータは、他のタスクのソースデータとして使用されません。
DTS タスクが失敗した場合、DTS テクニカルサポートは 8 時間以内にその復旧を試みます。タスクが再起動されたり、タスクパラメーターが変更されたりする場合があります (データベースパラメーターは変更されません)。変更可能なパラメーターの詳細については、「インスタンスパラメーターの変更」をご参照ください。