Data Transmission Service (DTS) を使用して、セルフマネージド MongoDB レプリカセットから、レプリカセットまたはシャードクラスターアーキテクチャの ApsaraDB for MongoDB インスタンスにデータを移行します。DTS は、スキーマ移行、完全データ移行、および増分データ移行をサポートし、ダウンタイムを最小限に抑えた移行が可能です。
前提条件
開始する前に、以下の前提条件を満たしていることを確認してください。
移行先の ApsaraDB for MongoDB インスタンス (レプリカセットまたはシャードクラスターアーキテクチャ) が作成されていること。詳細については、「レプリカセットインスタンスの作成」および「シャードクラスターインスタンスの作成」をご参照ください。
移行先のストレージ容量が、ソースデータベースが使用するストレージ容量より 10% 以上大きいこと。
ソースデータベースが稼働するサーバーで十分なアウトバウンド帯域幅が確保されていること。
ソースデータベースで oplog 機能が有効になっており、操作ログが少なくとも 7 日間保持されていること。または、変更ストリームが有効になっており、DTS が過去 7 日間のデータ変更をサブスクライブできること (増分データ移行に必要)。
(移行先がシャードクラスターの場合のみ) 移行先インスタンスで、シャーディング用のデータベースとコレクションを作成し、データシャーディングを設定し、バランサーを有効化し、事前シャーディングを実行しておくこと。詳細については、「データシャーディングを設定してシャードのパフォーマンスを最大化する」および「シャードクラスター MongoDB インスタンスにおけるデータ分散の不均衡への対処」をご参照ください。
データシャーディングを設定することで、すべてのデータが単一のシャードにルーティングされるのを防ぎます。バランサーを有効にして事前シャーディングを実行すると、データスキューを防ぐのに役立ちます。
oplog 機能を使用して、ソースデータベースからデータ変更を取得します。変更ストリームは、ソースデータベースで MongoDB V4.0 以降が実行されている場合にのみ使用できます。
課金
移行タイプ | インスタンス構成料金 | インターネットトラフィック料金 |
スキーマ移行および全量データ移行 | 無料 | アクセス方法が[パブリック IP アドレス]に設定されている場合にのみ課金されます。 詳細については、「課金の概要」をご参照ください。 |
増分データ移行 | 有料です。「課金概要」をご参照ください。 | — |
移行タイプ
Data Transmission Service (DTS) は、以下の移行タイプをサポートしており、ビジネス要件に合わせて組み合わせることができます。
移行タイプ | サポート対象 | 説明 |
スキーマ移行 | DATABASE、COLLECTION、INDEX | ソースのスキーマをターゲットに移行します。 |
完全データ移行 | DATABASE、COLLECTION | 既存のすべてのデータを移行します。 |
増分データ移行 | — | 完全データ移行の完了後、継続的に差分を移行します。 Oplog増分移行は、タスク開始後に作成されたデータベースをサポートしません。以下の増分更新がサポートされています:
Change Stream以下の増分更新がサポートされています:
|
ダウンタイムを最小限に抑えて移行するには、スキーマ移行、完全データ移行、増分データ移行の 3 種類すべてを選択してください。
増分データ移行でキャプチャされる内容
Oplog を使用する場合、DTS は以下をキャプチャします:
CREATE COLLECTIONおよびCREATE INDEXDROP DATABASE、DROP COLLECTION、およびDROP INDEXRENAME COLLECTIONドキュメントの挿入、更新、削除操作(
$setによる更新のみ)
DTS は、移行タスクの開始後に作成されたデータベースの増分データは移行しません。
変更ストリームを使用する場合、DTS は以下をキャプチャします:
DROP DATABASEとDROP COLLECTIONRENAME COLLECTIONドキュメントに対する挿入、更新、削除操作 (更新は
$setのみ)
必要な権限
移行タスクを開始する前に、以下の権限を持つデータベースアカウントを設定してください。
データベース | スキーマ移行 | 完全データ移行 | 増分データ移行 |
ソースのセルフマネージド MongoDB | 移行対象のデータベースと | 移行対象のデータベース、 | 変更ストリームを使用する場合、 |
移行先の ApsaraDB for MongoDB |
| — | — |
アカウントの作成手順については、以下をご参照ください。
セルフマネージド MongoDB:db.createUser()
ApsaraDB for MongoDB:MongoDB データベースのユーザー権限の管理
増分移行方法として ChangeStream を使用する場合、ソースデータベースアカウントにはインスタンス全体の Change Stream 読み取り権限 (例:readAnyDatabase) が必要です。ソースがカスタムアカウントを持つ ApsaraDB for MongoDB インスタンスの場合、アカウントに admin データベースに対する読み取り権限も付与する必要があります。詳細については、「インスタンス作成時に指定されたルートアカウントの権限」をご参照ください。
制限事項
移行タスクを設定する前に、これらの制限事項を確認してください。移行先アーキテクチャに適用されない制限事項はスキップしてください。
ソースデータベース
Azure Cosmos DB for MongoDB クラスターおよび Amazon DocumentDB Elastic クラスター: 全量データ移行のみをサポートしています。
コレクションの要件: コレクションには、すべてのフィールドが一意であるプライマリキーまたは UNIQUE 制約が必要です。そうでない場合、移行先に重複レコードが発生する可能性があります。
コレクション数: 個々のコレクションを選択して移行する場合、タスクあたり最大 1,000 コレクションです。この制限を超えると、リクエストエラーが発生します。代わりに、バッチで移行するか、データベース全体を選択してください。
ドキュメントサイズ: 1 つのドキュメントは 16 MB を超えることはできません。この制限を超えると、タスクは失敗します。
TTL インデックス: 移行後、ソースと移行先の間でデータの不整合が発生する可能性があります。
スキーマの変更: スキーマ移行および全量データ移行中は、スキーマを変更しないでください (配列型の更新を含む)。変更すると、タスクの失敗やデータの不整合が発生します。
全量移行のみの場合の書き込み: 増分移行なしで全量データ移行のみを実行する場合、移行中にソースデータベースへの書き込みを行わないでください。書き込みを行うと、データの不整合が発生します。
プライマリ/セカンダリ切り替え: 移行中にソースでプライマリ/セカンダリ切り替えが発生した場合、タスクは失敗します。
移行遅延の精度: DTS は、移行された最新データのタイムスタンプと現在のソースのタイムスタンプを比較して移行遅延を計算します。ソースに最近の更新がない場合、表示される遅延が不正確になることがあります。ソースで更新を実行して、遅延を更新してください。
データベース全体を移行する場合は、ハートビートテーブルを作成します。DTS はハートビートテーブルを 1 秒ごとに更新するため、遅延の読み取り値が正確に保たれます。
移行先がシャードクラスターの場合
孤立ドキュメント: 移行前に孤立ドキュメントを削除してください。移行元と移行先のドキュメント間での
_idの競合は、データ不整合やタスク失敗の原因となる可能性があります。シャードキー: タスクを開始する前に、ソースのデータにシャードキーを追加してください。ソースにシャードキーを追加できない場合は、「シャーディングキーのない MongoDB インスタンスから MongoDB シャードクラスターインスタンスへのデータ移行」をご参照ください。
移行中の挿入: 挿入されるデータにはシャードキーが含まれている必要があります。
移行中の更新: シャードキーは変更できません。
移行先がレプリカセットの場合
Express Connect、VPN Gateway、Smart Access Gateway、パブリック IP アドレス、または Cloud Enterprise Network (CEN) 経由の接続の場合: [ドメイン名または IP] と [ポート番号] をプライマリノードの IP アドレスとポートに設定するか、高可用性エンドポイントを設定します。 「ソースデータベースまたは宛先データベースが高可用性の MongoDB データベースである DTS タスクを作成する」をご参照ください。
ECS 上のセルフマネージドデータベースへの接続では、[ポート番号] をプライマリノードのポートに設定します。
全般
DTS は SRV エンドポイント経由で MongoDB データベースに接続できません。
移行先の MongoDB バージョンは、ソースのバージョンと同じか、それ以降である必要があります。移行先のバージョンが古いと、互換性の問題が発生する可能性があります。
DTS は
admin、config、またはlocalデータベースからデータを移行できません。移行先で一意のインデックスを持つか、
capped: trueが設定されているコレクションは、増分移行中にシングルスレッド書き込みのみをサポートし、同時リプレイはサポートしません。これにより、移行レイテンシーが長くなる可能性があります。トランザクションは保持されません。移行中、トランザクションは個別のレコードに変換されます。
プライマリキーまたは一意のキーの競合が発生した場合、DTS は競合する書き込み操作をスキップし、移行先の既存データを保持します。
DTS は
ROUND(COLUMN, PRECISION)を使用して FLOAT 値および DOUBLE 値を取得します。デフォルトの精度は FLOAT で 38 桁、DOUBLE で 308 桁です。これらのデフォルトがお客様の要件を満たしていることを確認してください。全量データ移行中に同時に書き込みを行うと、移行先のコレクションで断片化が発生します。全量移行後、移行先のストレージ容量がソースのストレージ容量を 5〜10% 上回ることがあります。
DTS は、失敗したタスクを最大 7 日間再試行します。ワークロードを移行先に切り替える前に、失敗したタスクを停止または解放してください。または、タスクが再開した後にソースが移行先を上書きするのを防ぐために、移行先データベースに対する DTS アカウントの書き込み権限を取り消してください。
db.$table_name.aggregate([{ $count:"myCount"}])を使用して、移行先の行数をクエリします。移行先データベースに、移行元と同じ
_id値が存在しないことを確認してください。競合が存在する場合は、タスクを開始する前に、移行先から競合するデータを削除してください。DTS インスタンスに障害が発生した場合、DTS ヘルプデスクは 8 時間以内に復旧を試みます。復旧操作には、インスタンスの再起動やパラメーターの調整が含まれる場合があります。変更される可能性のあるパラメーターについては、「インスタンスパラメーターの変更」をご参照ください。
移行タスクの設定と実行
ステップ 1: データ移行ページへの移動
Data Transmission Service (DTS) コンソール経由:
DTS コンソールにログインします。
左側のナビゲーションペインで、[データ移行] をクリックします。
左上隅で、移行インスタンスがあるリージョンを選択します。
Data Management (DMS) コンソール経由:
実際の手順は、DMS コンソールのモードとレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
DMS コンソールにログインします。
上部のナビゲーションバーで、ポインターを [Data + AI] > [DTS (DTS)] > [データ移行] に合わせます。
[データ移行タスク] の右側にあるドロップダウンリストから、移行インスタンスがあるリージョンを選択します。
ステップ 2: タスクの作成とソースデータベースおよびターゲットデータベースの設定
タスクの作成 をクリックします。
次の表のパラメーターを使用して、ソースデータベースとターゲットデータベースを設定します。
ソースデータベースとターゲットデータベースを設定した後、ページの上部に表示される [制限] を確認してください。このステップをスキップすると、タスクが失敗したり、データ不整合が発生したりする可能性があります。
ソースデータベースのパラメーター
パラメーター | 説明 |
[タスク名] | タスクの名前。DTS は自動的に名前を生成します。タスクを簡単に識別できるように、わかりやすい名前を指定してください。タスク名は一意である必要はありません。 |
[既存の接続を選択] | ソースデータベースが DTS に登録されている場合は、ドロップダウンリストから選択します。DTS は残りのパラメーターを自動的に入力します。それ以外の場合は、以下のパラメーターを手動で設定します。 |
[データベースタイプ] | [MongoDB] を選択します。 |
[アクセス方法] | ソースデータベースの場所に基づいて接続タイプを選択します。このトピックでは、例として [パブリック IP アドレス] を使用します。別の接続タイプを選択した場合は、必要な準備を完了してください。 |
[インスタンスリージョン] | ソースデータベースがあるリージョンを選択します。リージョンがリストにない場合は、地理的に最も近いリージョンを選択します。 |
[アーキテクチャ] | [レプリカセット] を選択します。 |
[移行方法] | 増分データを移行する方法として、Oplog (推奨) または ChangeStream を選択します。Oplog は、ソースで oplog 機能が有効になっている場合に使用できます。ChangeStream は、チェンジストリームが有効になっている場合に使用できます。ソースが非エラスティックな Amazon DocumentDB クラスターである場合、[ChangeStream] を選択し、[アーキテクチャ] パラメーターを シャードクラスター に設定する必要があります。[アーキテクチャ] パラメーターに [シャードクラスター] を選択した場合、[シャードアカウント] パラメーターと シャードパスワード パラメーターを設定する必要はありません。 |
[エンドポイントタイプ] | [スタンドアロン] または [マルチノード] を選択します。 [アクセス方法] が [Express Connect、VPN Gateway、または Smart Access Gateway]、[パブリック IP アドレス]、または [Cloud Enterprise Network (CEN)] の場合に利用できます。 |
[ドメイン名または IP] | ソースデータベースのドメイン名または IP アドレス。 [エンドポイントタイプ] が [スタンドアロン] の場合に利用可能です。 |
[ポート番号] | ソースデータベースのサービスポート。[エンドポイントタイプ] が [スタンドアロン] の場合に利用可能です。 |
[エンドポイント] | ソースデータベースのエンドポイントは、 |
[認証データベース] | ソースアカウントが属するデータベース。デフォルト: |
[データベースアカウント] | ソースデータベースへの接続に使用するアカウント。必要な権限については、「必要な権限」をご参照ください。[アクセス方法] が [ECS 上の自己管理データベース] または [データベースゲートウェイ] の場合、シャードノードのアカウントを入力します。 |
[データベースパスワード] | データベースアカウントのパスワード。 |
[暗号化] | 接続の暗号化方式: [暗号化なし]、[SSL 暗号化]、または [Mongo Atlas SSL]。 使用可能なオプションは、[アクセス方法] と [アーキテクチャ] によって異なります。 [アーキテクチャ] が [シャーディングクラスター] で、[移行方法] が [Oplog] の場合、SSL 暗号化は使用できません。 [アーキテクチャ] が [レプリカセット] で、[アクセス方法] が [Alibaba Cloud インスタンス] ではなく、[暗号化] が [SSL 暗号化] の場合、接続を検証するために CA 証明書をアップロードする必要があります。 |
ターゲットデータベースのパラメーター
パラメーター | 説明 |
[既存の接続を選択] | ターゲットインスタンスが DTS に登録されている場合は、ドロップダウンリストから選択します。それ以外の場合は、以下のパラメーターを手動で設定します。 |
[データベースタイプ] | [MongoDB] を選択します。 |
[アクセス方法] | [Alibaba Cloud インスタンス] を選択します。 |
[インスタンスリージョン] | ターゲットの ApsaraDB for MongoDB インスタンスがあるリージョンを選択します。 |
[Alibaba Cloud アカウント間でのデータレプリケーション] | 現在のアカウントのインスタンスを使用するには、[いいえ] を選択します。 |
[アーキテクチャ] | ターゲットインスタンスのアーキテクチャを選択します。 |
[インスタンス ID] | ターゲットインスタンスの ID を選択します。 |
[認証データベース] | ターゲットアカウントが属するデータベース。デフォルト: |
[データベース名] | 移行されたオブジェクトが格納されるターゲットインスタンス内のデータベースの名前。 |
[データベースアカウント] | ターゲットインスタンスへの接続に使用するアカウント。必要な権限については、「必要な権限」をご参照ください。 |
[データベースパスワード] | データベースアカウントのパスワード。 |
[暗号化] | 接続の暗号化方法。ターゲットがシャードクラスターアーキテクチャを使用している場合、SSL 暗号化は利用できません。 |
ステップ 3: 接続性のテスト
[接続をテストして続行] をクリックし、次に [DTS サーバーの CIDR ブロック] ダイアログボックスで [接続テスト] をクリックします。
DTS サーバーの CIDR ブロックがソースデータベースとターゲットデータベースの許可リストに追加されていることを確認してください。詳細については、「DTS サーバーの IP アドレスをホワイトリストに追加する」をご参照ください。
ステップ 4: 移行オブジェクトの設定
[オブジェクトの設定] ページで、次のパラメーターを使用して移行オブジェクトを設定します。
パラメーター | 説明 |
[移行タイプ] | 移行タイプを選択します: [スキーマ移行]、[完全データ移行]、およびオプションで [増分データ移行]。ゼロダウンタイム移行の場合は、3 つすべてを選択します。[スキーマ移行] をスキップする場合は、開始前にターゲットデータベースとコレクションをターゲットで作成してください。[増分データ移行] をスキップする場合は、移行中にソースへの書き込みを行わないでください。 |
[競合するテーブルの処理モード] | [事前チェックとエラー報告]: ターゲットにソースと同じ名前のコレクションが含まれている場合、事前チェックは失敗します。既存のコレクションを削除できない場合は、オブジェクト名マッピングを使用して移行されたコレクションの名前を変更してください。[エラーを無視して続行]: 事前チェックをスキップします。DTS は、既存の移行先レコードと同じプライマリキーを持つレコードを移行しません。データの一貫性は保証されません。 |
[ターゲットインスタンスのオブジェクト名の大文字/小文字] | ターゲットでのデータベース名とコレクション名の大文字/小文字のポリシー。デフォルト: [DTS のデフォルトポリシー]。詳細については、「移行先インスタンスのオブジェクト名の大文字/小文字の指定」をご参照ください。 |
[ソースオブジェクト] | 移行するデータベースまたはコレクションを選択します。 |
[選択したオブジェクト] | オブジェクトを右クリックして、ターゲットでの名前を変更 (オブジェクト名マッピング)、増分移行モードを設定、または完全移行のデータフィルタリングのための WHERE 条件を指定します。オブジェクトを削除するには、オブジェクトをクリックしてから |
ステップ 5: 詳細設定の構成
[次へ: 詳細設定] をクリックし、以下のパラメーターを設定します。
パラメーター | 説明 |
[タスクスケジューリング用の専用クラスター] | デフォルトでは、DTS は共有クラスターでタスクをスケジュールします。分離されたリソースのために専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
[接続失敗時の再試行時間] | 接続失敗時の再試行期間。有効な値: 10~1,440 分。デフォルト: 720 分。この値は少なくとも 30 分に設定してください。異なるタスクが同じソースまたはターゲットデータベースを共有する場合、最後に設定された値が優先されます。 |
[その他の問題に対する再試行時間] | DDL または DML 操作の失敗に対する再試行期間。有効な値: 1~1,440 分。デフォルト: 10 分。この値は少なくとも 10 分に設定してください。この値は [接続失敗時の再試行時間] より小さくする必要があります。 |
[完全データ移行のスロットリングを有効にする] | 完全移行中のソースとターゲットの読み取り/書き込み負荷を制限します。ソースデータベースへの QPS、完全データ移行の RPS、およびデータ移行速度を設定します。[完全データ移行] が選択されている場合にのみ利用できます。 |
[同期対象データのテーブルにおけるプライマリキー | [はい]: DTS は、すべての型をスキャンせずに、コレクションごとに 1 つのデータ型の |
[増分データ移行のスロットリングを有効にする] | 増分移行中の負荷を制限します。増分データ移行の RPS とデータ移行速度を設定します。[増分データ移行] が選択されている場合にのみ利用できます。 |
[環境タグ] | インスタンスを識別するためのオプションのタグ。 |
[ETL の設定] | 抽出、変換、ロード (ETL) 機能を有効にすることで、移行中にデータを変換できます。詳細については、「データ移行またはデータ同期タスクでの ETL の設定」をご参照ください。 |
[監視とアラート] | タスクの失敗や高い移行遅延に対するアラートを設定できます。有効にした場合は、アラートのしきい値と通知先を設定してください。詳細については、「監視とアラートの設定」をご参照ください。 |
ステップ 6: データ検証の設定 (オプション)
[次のデータ検証] をクリックしてデータ検証タスクを設定します。詳細については、「データ検証タスクを設定する」をご参照ください。
ステップ 7: 事前チェックの実行
[次へ: タスク設定の保存と事前チェック] をクリックします。
このタスク設定の API パラメーターをプレビューするには、ポインターを [次へ: タスク設定の保存と事前チェック] の上に移動し、[OpenAPI パラメーターのプレビュー] をクリックします。
DTS は、移行を開始する前に事前チェックを実行します。タスクは、事前チェックに合格した後にのみ開始されます。
チェック項目が失敗した場合は、[詳細を表示] をクリックして問題を解決し、[再チェック] をクリックします。
無視できるチェック項目でアラートが発生した場合は、[アラート詳細の確認] > [無視] > [OK] > [再度事前チェック] をクリックします。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 8: インスタンスの購入と開始
成功率が 100% に達するのを待ってから、[次へ:インスタンスの購入] をクリックします。
[インスタンスの購入] ページで、次のパラメーターを設定します。
パラメーター | 説明 |
[リソースグループ] | 移行インスタンスのリソースグループ。デフォルト: デフォルトのリソースグループ。詳細については、「リソース管理とは」をご参照ください。 |
[インスタンスクラス] | インスタンスクラスは移行速度を決定します。データ量とタイミングの要件に基づいて選択してください。詳細については、「データ移行インスタンスのインスタンスクラス」をご参照ください。 |
[Data Transmission Service (従量課金) サービス利用規約] を読み、同意する場合はチェックボックスを選択します。
[購入して開始] をクリックし、次に確認ダイアログボックスで [OK] をクリックします。
移行進捗の監視
[データ移行] ページで進捗を追跡します。
増分移行を実行しないタスクは、完全移行が完了すると自動的に停止します。ステータスは 完了 に変わります。
増分移行を実行するタスクは継続的に実行されます。タスクを停止するまで、ステータスは 実行中 のままです。
移行の健全性を評価するために、次の主要なメトリックを監視してください:
メトリック | 説明 |
移行のレイテンシー | ソースでの変更からターゲットへの適用までの遅延時間です。レイテンシーが 0 秒に近い場合、ターゲットはソースと同期しています。 |
タスクのステータス | 移行タスクの現在の状態 (実行中、完了、失敗) です。 |
移行速度 | 完全移行中のデータ転送速度です。速度が大幅に低下した場合は、ソースの帯域幅とスロットリング設定を確認してください。 |
ソースに更新がない状態でレイテンシーが継続的に高い場合は、ソースで書き込み操作を実行して、表示されるレイテンシーの値を更新してください。
ターゲットへのカットオーバー
増分移行遅延が 0 秒付近で安定した後、ターゲットはソースと同期されます。次の順序でカットオーバーを完了してください。
ソースデータベースへの書き込みを停止します。
移行遅延が 0 秒に達するまで待機します。
DTS 移行タスクを停止します。
アプリケーションの接続文字列を、ターゲットの ApsaraDB for MongoDB インスタンスを指すように更新します。
アプリケーションがターゲットで正しく動作していることを確認します。
ワークロードを切り替える前に、DTS タスクを停止またはリリースしてください。タスクが失敗後も実行中の場合、再開してターゲットのデータを上書きする可能性があります。または、ターゲットデータベースの DTS アカウントから書き込み権限を取り消してください。