Data Transmission Service (DTS) は、シャードキーのない MongoDB インスタンスからシャードクラスターインスタンスへのデータ同期をサポートしています。タスク設定中に、シャードキーフィールドがないコレクションにデフォルトのシャードキー値を割り当てることができます。
このトピックでは、ApsaraDB for MongoDB (レプリカセット) をソースとして、ApsaraDB for MongoDB (シャードクラスター) を宛先として使用します。
前提条件
開始する前に、以下を確認してください。
宛先の ApsaraDB for MongoDB シャードクラスターインスタンス。設定手順については、「シャードクラスターインスタンスの作成」をご参照ください。
宛先のストレージ容量がソースより少なくとも 10% 大きいこと。
宛先でのシャーディングの事前設定:ターゲットデータベースとコレクションが作成され、データシャーディングが設定され、Balancer が有効化され、事前シャーディングが完了していること。詳細については、「Shard のパフォーマンスを最大限に活用するためのデータシャーディングの設定」および「MongoDB シャードクラスターアーキテクチャにおける不均一なデータ分散の対処方法」をご参照ください。
事前シャーディングを設定することで、すべてのデータが単一の Shard に集中し、クラスターのパフォーマンスが低下するのを防ぎます。Balancer を有効にして事前シャーディングを実行すると、データスキューを防ぐことができます。
ソースがシャードクラスターの ApsaraDB for MongoDB インスタンスである場合は、以下も確認してください。
すべての Shard ノードのエンドポイントが取得されていること。詳細については、「Shard または ConfigServer ノードのエンドポイントの申請」をご参照ください。
すべて Shard ノードでアカウントとパスワードが同一であること。
サポートされているソースと宛先のバージョンについては、「同期ソリューションの概要」をご参照ください。
制限事項
DTS は、ご利用の設定が以下の制限事項に準拠しているかを自動的にチェックしません。タスクを開始する前に、適用されるすべての制約を確認してください。これらの制限事項に違反してタスクを実行すると、データの不整合、タスクの失敗、またはデータ損失が発生する可能性があり、これらはいずれも DTS のサービスレベルアグリーメント (SLA) の対象外です。
ソースデータベース
| 制約 | 詳細 |
|---|---|
| 帯域幅 | ソースデータベースをホストするサーバーには十分なアウトバウンド帯域幅が必要です。そうでない場合、同期パフォーマンスに影響が出ます。 |
| プライマリキー | 同期対象のコレクションには、プライマリキーまたは一意制約が必要で、すべてのフィールドが一意である必要があります。これがない場合、宛先に重複データが出現する可能性があります。 |
| 収集制限 | 同期オブジェクトがコレクションで、名前マッピングが必要な場合、1 つのタスクでサポートされるコレクションは最大 1,000 個です。コレクション数がこの制限を超える場合は、コレクションを複数のタスクに分割するか、代わりにデータベースレベルで同期してください。 |
| 単一ドキュメントのサイズ | 同期される単一のドキュメントは 16 MB を超えることはできません。この制限を超えるとタスクは失敗します。 |
| Mongos ノード | ソースがシャードクラスターの場合、Mongos ノードの数は 10 を超えることはできません。 |
| サポートされていないソース | Azure Cosmos DB for MongoDB クラスターおよび Amazon DocumentDB エラスティッククラスターはソースとしてサポートされていません。 |
| TTL インデックス | TTL (Time-To-Live) インデックスを持つコレクションは同期できません。このようなコレクションを同期すると、宛先でデータの不整合が発生する可能性があります。 |
| 孤立ドキュメント | ソースのシャードクラスターに孤立ドキュメントが存在しないことを確認してください。これらはデータの不整合やタスクの失敗を引き起こす可能性があります。「孤立ドキュメント」および「MongoDB シャードクラスターアーキテクチャで孤立ドキュメントをクリーンアップする方法」をご参照ください。 |
| Balancer のアクティビティ | ソースがアクティブな Balancer がデータ移行を実行しているシャードクラスターである場合、インスタンスの遅延が増加する可能性があります。 |
| oplog / change stream | ソースデータベースでは、oplog が有効で、ログ保持期間が少なくとも 7 日間であるか、change stream が有効である必要があります。これにより、DTS はデータの変更をサブスクライブできます。この要件が満たされない場合、DTS は変更を取得できず、同期の失敗、データの不整合、またはデータ損失につながる可能性があります。 |
oplog を使用して、ソースデータベースのデータ変更を記録します。oplog は、チェンジストリームよりも高速なログのプルと低いレイテンシーを提供します。チェンジストリームは MongoDB 4.0 以降でのみ利用可能で、チェンジストリームを使用する場合、双方向同期はサポートされていません。ソースが非エラスティックな Amazon DocumentDB クラスターである場合、チェンジストリームを使用し、[移行方法]を [ChangeStream] に、[アーキテクチャ]を[シャードクラスター]に設定する必要があります。
同期中の操作
同期中に以下の操作を行わないでください。タスクの失敗やデータの不整合を引き起こす可能性があります。
スキーマ同期または完全データ同期中にデータベースまたはコレクションのスキーマを変更すること (配列型の更新を含む)。
完全データ同期のみを実行しているときにソースに新しいデータを書き込むこと。リアルタイムのデータ整合性を維持するには、スキーマ同期、完全データ同期、増分データ同期を一緒に選択してください。
DTS 以外のソースから宛先にデータを書き込むこと。
その他の制限事項
ソースで新しく追加されたコレクションには、同期中にシャードキーのデフォルト値を設定できません。
ソースが非シャードクラスターの場合、タスクは自動的に[データベースおよびテーブルフィールドの設定]ステージに入り、シャードキーのデフォルト値を設定します。
ShardKey のデフォルト値は、[データベースとテーブルフィールドの設定] ステージで設定されますが、送信先のバージョンが 4.4 より低い場合にのみ有効になります。バージョン 4.4 以降を実行している宛先インスタンスの場合、DTS は元のデータをそのまま書き込みます。
互換性の問題を避けるため、下位バージョンから同等または上位バージョンに同期してください。
adminおよびlocalデータベース内のデータの同期はサポートされていません。一意なインデックスを持つコレクション、または
capped: trueを持つコレクションは、シングルスレッド書き込みのみをサポートし、増分同期中に同時リプレイを使用できません。これにより、同期遅延が増加する可能性があります。トランザクション情報は保持されません。ソースのトランザクションは、宛先で個別のレコードに変換されます。
データ同期を実行する前に、ソースと宛先のデータベースのパフォーマンスを評価してください。また、ソースと宛先のデータベースへの負荷を軽減するために、ビジネスのオフピーク時間にデータ同期を実行することを推奨します。
完全データ同期は INSERT 操作を同時に実行するため、宛先コレクションで断片化が発生します。完全同期が完了すると、宛先のストレージ容量はソースより 5~10% 大きくなります。
DTS は失敗したタスクを最大 7 日間自動的に回復しようとします。トラフィックを宛先に切り替える前に、DTS タスクを終了またはリリースするか、宛先への DTS の書き込みアクセス権を取り消してください。そうしないと、自動回復によって宛先のデータが上書きされる可能性があります。
宛先 MongoDB のドキュメント数は、
db.$table_name.aggregate([{ $count:"myCount"}])を使用してクエリします。宛先にソースと同じプライマリキー (
_id) を共有するドキュメントがないことを確認してください。重複が存在する場合、タスクを開始する前に、競合するドキュメントを宛先から削除してください。DTS タスクが失敗した場合、DTS サポートは 8 時間以内にそれを解凍しようと試み、タスクを再起動したり、タスクパラメーター(データベースパラメーターを除く)を変更することがあります。変更される可能性のあるパラメーターについては、「インスタンスパラメーターの変更」をご参照ください。
自己管理 MongoDB
ソースが自己管理 MongoDB インスタンスの場合:
同期中のプライマリ/セカンダリの切り替えは、タスクの失敗を引き起こします。
ソースデータベースに長期間書き込み操作がない場合、表示される同期遅延が不正確になることがあります。ソースで更新操作を実行して遅延をリフレッシュしてください。または、同期オブジェクトがデータベース全体である場合は、毎秒ソースにデータを書き込むハートビートを設定してください。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期およびフルデータ同期 | 無料 |
| 増分データ同期 | 有料です。「課金概要」をご参照ください。 |
同期タイプ
| タイプ | DTS が同期するもの |
|---|---|
| スキーマ同期 | 選択したオブジェクトのスキーマをソースから宛先へ |
| 完全データ同期 | 選択したオブジェクト (データベースとコレクション) の履歴データ |
| 増分データ同期 | ソースから宛先への継続的なデータ変更 |
oplog と change stream の選択
DTS は増分変更をキャプチャするために 2 つのメソッドをサポートしています。ソースが change stream を必要としない限り、oplog を使用してください。
| メソッド | サポートされる操作 | 使用する状況 |
|---|---|---|
| oplog (推奨) | CREATE COLLECTION、CREATE INDEX、DROP DATABASE、DROP COLLECTION、DROP INDEX、RENAME COLLECTION、INSERT、UPDATE、DELETE | 自己管理 MongoDB および ApsaraDB for MongoDB のデフォルト。ログのプルが高速なため、遅延が少ない。 |
| 変更ストリーム | DROP DATABASE、DROP COLLECTION、RENAME COLLECTION、INSERT、UPDATE、DELETE | 非エラスティックな Amazon DocumentDB クラスターに必要。MongoDB 4.0 以降で利用可能。双方向同期はサポートしていません。 |
DTS がファイルの増分データを同期する場合、$set コマンドのみが同期的に実行できます。DTS は、タスク開始後に作成されたデータベースからの増分データを同期しません。必要な権限
| データベース | 必要な権限 | 付与方法 |
|---|---|---|
| ソース ApsaraDB for MongoDB | 同期対象のデータベース、および config、admin、local データベースに対する読み取り権限 | DMS を使用した MongoDB データベースユーザーの管理 |
| 宛先 ApsaraDB for MongoDB | dbAdminAnyDatabase 権限、宛先データベースに対する readWrite 権限、local データベースに対する read 権限、config データベースに対する read 権限 | DMS を使用した MongoDB データベースユーザーの管理 |
同期タスクの設定と開始
ステップ 1: データ同期ページへの移動
以下のいずれかの方法を使用します。
DTS コンソール
DMS コンソール
実際の操作は、DMS コンソールのモードおよびレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
ステップ 2: タスクの作成と接続の設定
[タスクの作成] をクリックします。
プロンプトが表示された場合、右上隅の[新しい設定ページ]をクリックします。
代わりに [以前のバージョンに戻る] が表示される場合は、このステップをスキップしてください。新しい設定ページを推奨します。
以下のパラメーターを使用して、ソースと宛先のデータベースを設定します。
タスク設定
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS タスクの説明的な名前。DTS は自動的に名前を生成しますが、説明的な名前は識別に役立ちます。名前は一意である必要はありません。 |
ソースデータベース
| パラメーター | 本例の値 |
|---|---|
| 既存の接続を選択 | データベース接続の管理Alibaba Cloud データベースインスタンスの登録任意。既存の接続を選択すると、DTS がパラメーターを自動的に入力します。新しいデータベースを登録する場合は、「(DTS コンソール)」または「(DMS コンソール)」をご参照ください。 |
| データベースタイプ | MongoDB |
| アクセス方法 | Alibaba Cloud インスタンス |
| インスタンスのリージョン | ソース ApsaraDB for MongoDB インスタンスのリージョン |
| Alibaba Cloud アカウント間でのデータ複製 | いいえ(同一アカウント内) |
| アーキテクチャ | レプリカセット。ソースがシャードクラスタアーキテクチャを使用している場合は、シャードクラスタ を選択してください。 |
| 移行方法 | 増分データを取得する方法です。Oplog(推奨)または ChangeStream を選択します。「Oplog と ChangeStream の選択について」をご参照ください。また、アーキテクチャ が シャードクラスタ に設定され、かつ 移行方法 が Oplog に設定されている場合、ソースに対して SSL 暗号化は利用できません。 |
| インスタンス ID | ソース ApsaraDB for MongoDB のインスタンス ID |
| 認証用データベース | アカウントが所属するデータベースです。デフォルト値:admin |
| データベースアカウント | 必要な権限を持つアカウント |
| データベースパスワード | アカウントのパスワード |
| 暗号化 | 暗号化なし、SSL 暗号化あり、または Mongo Atlas SSL を選択します。利用可能なオプションは、アクセス方法 および アーキテクチャ によって異なります。ソースが レプリカセット アーキテクチャを採用しており、かつ自己管理データベースで SSL 暗号化あり を選択している場合、接続の検証のために認証局(CA)証明書をアップロードできます。 |
ターゲットデータベース
| パラメーター | この例の値 |
|---|---|
| [既存の接続を選択] | オプション。ソース接続と同じ動作です。 |
| [データベースタイプ] | [MongoDB] |
| [アクセス方式] | [Alibaba Cloud インスタンス] |
| [インスタンスリージョン] | 送信先 ApsaraDB for MongoDB インスタンスのリージョンです。 |
| [Alibaba Cloud アカウント間でデータをレプリケート] | [いいえ] (同じアカウント) |
| [アーキテクチャ] | [シャードクラスター] |
| [インスタンス ID] | 送信先 ApsaraDB for MongoDB のインスタンス ID です。 |
| [認証データベース] | アカウントが属するデータベースです。デフォルト: admin |
| [データベースアカウント] | 必要な権限を持つアカウントです。 |
| [データベースパスワード] | アカウントのパスワードです。 |
| [暗号化] | [非暗号化]、[SSL 暗号化]、または [Mongo Atlas SSL] を選択します。送信先が ApsaraDB for MongoDB シャードクラスターの場合、SSL 暗号化は利用できません。 |
[接続性のテストと続行] をクリックします。
DTS サーバーの CIDR ブロックを、ソースおよびターゲットデータベースのセキュリティ設定に追加する必要があります。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。ソースまたはターゲットが、[Alibaba Cloud インスタンス]以外のアクセス方法で接続される自己管理データベースである場合、[接続テスト]を[DTS サーバーの CIDR ブロック]ダイアログボックスでクリックします。
ステップ 3: 同期オブジェクトの設定
[オブジェクトの設定] ステップで、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| 同期タイプ | [スキーマ同期]、[完全データ同期]、[増分データ同期] を選択します。完全データ同期は、増分同期の履歴ベースラインを提供します。 |
| 競合するテーブルの処理モード | [事前チェックとエラー報告] (推奨):送信先にソースコレクションと同じ名前のコレクションが存在する場合、事前チェックは失敗します。競合するコレクションを削除または名前変更できない場合は、オブジェクト名マッピング機能を使用して名前を変更します。[エラーを無視して続行]:競合チェックをスキップします。送信先レコードがソースレコードと同じプライマリキーまたは一意キーを共有している場合、DTS は送信先レコードを保持し、ソースレコードをスキップします。これにより、データの不整合が発生する可能性があります。 |
| 同期トポロジ | 一方向同期 |
| 宛先インスタンスでのオブジェクト名の大文字/小文字の区別 | デフォルト:[DTS のデフォルトポリシー]。特定の大文字/小文字の規則に合わせる必要がある場合は、これを変更します。詳細については、「宛先インスタンスでのオブジェクト名の大文字/小文字の指定」をご参照ください。 |
| ソースオブジェクト | 同期するデータベースまたはコレクションを選択し、矢印アイコンをクリックして [選択されたオブジェクト] に移動します。同期の粒度は、データベースまたはコレクションです。 |
| 選択されたオブジェクト | 送信先のデータベース名を変更するには、[選択されたオブジェクト] の下にあるデータベースを右クリックし、[スキーマの編集] ダイアログボックスで [スキーマ名] を更新します。コレクション名を変更するには、コレクションを右クリックし、[テーブルの編集] ダイアログボックスで [テーブル名] を更新します。オブジェクト名マッピングは、コレクションレベルでのみ利用可能です。オブジェクト名マッピングを使用すると、依存オブジェクトの同期に失敗する可能性があります。フィルター条件を追加するには (完全同期フェーズのみ)、[選択されたオブジェクト] 内のコレクションを右クリックしてフィルター条件を定義します。詳細については、「フィルター条件の設定」をご参照ください。 |
[次へ: 詳細設定] をクリックします。
ステップ 4: 詳細設定
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用専用クラスター | デフォルトでは、DTS は共有クラスターにスケジュールされます。タスクの安定性を高めるには、専用クラスターをご購入ください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| 接続失敗時の再試行時間 | DTS がタスクを失敗とマークする前に、接続失敗に対して再試行を行う時間を指定します。範囲:10~1440 分。デフォルト:720 分。最低でも 30 分以上に設定してください。複数のタスクで同じソースまたは送信先を共有している場合、最も短い再試行時間が適用されます。DTS は再試行期間中もインスタンスに対して課金されます。 |
| その他の問題発生時の再試行時間 | DDL または DML 操作の失敗に対して DTS が再試行を行う時間を指定します。範囲:1~1440 分。デフォルト:10 分。最低でも 10 分以上に設定してください。接続失敗時の再試行時間より短く設定する必要があります。 |
| フルデータ移行時のスロットリングを有効化 | フルデータ同期中に、ソースデータベースへの秒間クエリ数 (QPS)、1 秒あたりのレコード数 (RPS)、およびデータ移行速度 (MB/s) を制限し、データベース負荷を軽減します。フルデータ同期が選択されている場合にのみ表示されます。 |
| 単一テーブル内のプライマリキー _id のデータの型を 1 種類に限定 | はいアラート通知設定:DTS はフル同期中に _id のデータの型をスキャンしません(高速化)。いいえ:DTS は混合型コレクションについて _id のデータの型をスキャンします。フルデータ同期が選択されている場合にのみ表示されます。 |
| 増分データ同期時のスロットリングを有効化 | 増分同期中の RPS およびデータ同期速度 (MB/s) を制限し、ターゲットデータベースの負荷を軽減します。 |
| 環境タグ | 任意で設定可能です。インスタンスに環境(例:production や staging)に基づくタグを付与します。 |
| ETL の設定 | 抽出・変換・書き出し (ETL) 変換を適用するには、このオプションを有効にしてください。詳細については、「ETL とは」および「データ移行またはデータ同期タスクでの ETL 設定」をご参照ください。 |
| モニタリングとアラート機能 | タスクが失敗した場合や同期遅延がしきい値を超えた場合に通知を受け取るには、このオプションを有効にしてください。詳細については、「DTS タスク作成時のモニタリングとアラート設定」をご参照ください。 |
ステップ 5: データ検証の設定
[次へ: データ検証] をクリックして、データ検証を設定します。データ検証機能の使用方法について詳しくは、「データ検証タスクの設定」をご参照ください。
ステップ 6: シャードキーのデフォルト値の設定
この手順は、ソースが非シャードクラスターで、宛先がシャードクラスターである場合にのみ適用されます。DTS は自動的に [データベースおよびテーブルフィールドの設定] ステージに入ります。シャードキーのデフォルト値は、宛先のバージョンが 4.4 より低い場合にのみ有効になります。バージョン 4.4 以降を実行している宛先インスタンスでは、DTS が元のデータをそのまま書き込みます。
シャードキーが必要な同期範囲内の各コレクションについて:
対応する行で、[デフォルト値の設定] をクリックします。
「[シャードキー数]」がコレクションに対して[0]を示している場合、そのコレクションは送信先にシャードキーがなく、デフォルト値も不要です。
[シャードキーのデフォルト値タイプ] を選択します。サポートされているタイプ: [文字列] および [int]。
シャードキーの [デフォルト値] を入力してください。
重要同期範囲内のすべてのオブジェクトのすべてのシャードキーにデフォルト値を割り当ててください。値が欠落していると、事前チェック中にアラートがトリガーされ、タスクが失敗する可能性があります。
ステップ 7: タスクの保存と事前チェックの実行
[次へ: タスク設定の保存と事前チェック] をクリックします。
このタスク構成の API パラメーターをプレビューするには、ボタンにマウスを合わせて、[OpenAPI パラメーターのプレビュー] をクリックし、続行する前に実行してください。
DTS はタスクを開始する前に事前チェックを実行します。事前チェックが失敗した場合:
失敗した項目の場合: [詳細の表示] をクリックし、根本原因を修正してから、事前チェックを再実行します。
無視可能なアラート項目については、[アラートの詳細を確認] をクリックし、[詳細の表示] ダイアログボックスで [無視] をクリックし、[OK] で確認してから、[再度事前チェック] をクリックします。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 8: インスタンスの購入とタスクの開始
「成功率」が「100%」に達するまで待ってから、「次へ: インスタンスの購入」をクリックします。
[購入] ページで、次のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| 課金方法 | サブスクリプション:期間分を前払いします。長期利用の場合、コスト効率に優れています。期間オプション:1~9か月、1年、2年、3年、または5年。従量課金:1時間単位で課金されます。短期利用に適しています。ご利用のインスタンスが不要になった場合は、すぐにリリースして課金を停止してください。 |
| リソースグループ設定項目 | このインスタンスに割り当てるリソースグループです。デフォルト:default resource group。詳細については、「What is Resource Management? |
| インスタンスクラス | 同期速度を決定します。詳細については、「Instance classes of data synchronization instances」をご参照ください。 |
「[Data Transmission Service(従量課金)サービス利用規約]」を読み、選択します。
[購入して開始] をクリックし、確認ダイアログボックスで [OK] をクリックします。
タスクがタスクリストに表示されます。そこから進捗を監視します。
次のステップ
タスクが完了したら、アプリケーション トラフィックを宛先インスタンスに切り替えます。切り替え前にデータ整合性を確認するには、「データ検証タスクの設定」をご参照ください。