警告
mongosync は、ドキュメント化された制限への準拠の有無はチェックしません。アプリケーションが制限の影響を受けないことを確認してください。以下の制限のいずれかが課されている状態で mongosync を実行すると、対象クラスターで予期しない動作が発生する恐れがあります。
移行が一時停止または再開される場合に停止されるときを含め、移行の全期間にわたってこれらの制限に従う必要があります。
一般的な制限
注意
MongoDB サーバー の互換性の詳細については、 「 MongoDB Serverのバージョンの互換性 」を参照してください。
mongosyncは、移行中にメジャー バージョンまたはマイナー バージョンを変更するインプレースサーバーバージョン アップグレードをサポートしていません。mongosyncではパッチ バージョンのアップグレードは可能です。詳細については、サーバーのアップグレード手順を参照してください。mongosyncは、クラスターまたは環境が正しく構成されているかどうかを検証しません。mongosyncの実行中は、他のクライアントが宛先クラスターに書き込みを行わないでください。system.* コレクションは複製されません。
ドル記号(
$)のプレフィックスがついたフィールド名はサポートされていません。 「ピリオドとドル記号を含むフィールド名 」を参照してください。サーバーレス クラスターはサポートされていません。
MongoDB 共有階層はサポートされていません。
Queryable Encryptionはサポートされていません。
同じフィールドに一意なインデックスと一意でないインデックスが定義されているコレクションを同期することはできません。
Before you attempt to run
mongosyncwith anM10+Atlas cluster, disable the Require Indexes for All Queries option to setnotablescantofalseon both the source and destination clusters.mongosyncユーザーまたはロールは同期されません。mongosyncdoes not replicateapplyOpsoperations made on the source cluster during sync to the destination cluster.mongosyncは、primary読み込み設定 (read preference)を使用してソースクラスターから読み取る必要があります。mongosyncは、現在 MongoDB バージョンをアップグレードしているソースクラスターまたは宛先クラスターはサポートしていません。mongosyncでは、 Atlas Search インデックスの同期はサポートされていません。mongosyncは、 WiredTigerストレージエンジンを使用するクラスターのみをサポートします。タイムスタンプが空のドキュメントとコレクションを同期することはできません。たとえば、6.0 以前の
Timestamp(0,0)などです。 ソースクラスター。mongosyncはフィールド名が重複するドキュメントをサポートしていません。 詳細については、 「 MongoDB重複するフィールド名をサポートしていません 」を参照してください。8.0.20 より前のすべてのMongoDBバージョンでは、
replace操作によって$vという名前のフィールドがドキュメントに追加されると、変更イベントのアプリケーション中に回復不能な致命的なエラーが発生し、mongosyncが終了します。同期を再開すると、常に同じエラーで失敗します。この問題を解決するには、宛先で
mongosyncのメタデータデータベースを削除して同期をゼロから再開するか、ソースクラスターを 8.0.20+ にアップグレードします。
MongoDB コミュニティ エディション
MongoDB はMongosync with Community のビルドをテストしておらず、ほとんどの場合、 MongoDB はMongosync with Community の配置のサポートを提供していません。MongoDB Community Edition で Mongosync を使用する場合は、 MongoDB の営業担当者に 問い合わせて 、要件や個別のオプションについて説明してください。
サポートされていないコレクションのタイプ
時系列コレクションはサポートされていません。
expireAfterSecondsが設定されたクラスター化されたコレクションはサポートされていません。
シャーディングされたクラスター
mongosyncでは、シャーディングされたクラスターからレプリカセットへの同期はサポートされていません。mongosyncでは、1 つ以上のアービタを持つシャーディングされたクラスター トポロジーへの同期はサポートされていません。mongosyncdoesn't support sync to or from global clusters.レプリカセットからシャーディングされたクラスターへの同期には次の制限があります。
mongosyncを使用すると、同期中にsharding.shardingEntriesオプションに含まれるコレクションの名前を変更できます。 詳細については、「同期中の名前の変更 」を参照してください。sharding.createSupportingIndexesオプションを使用すると、同期中に宛先クラスターにインデックスが自動的に作成されます。 ソースクラスターでは、その後にこれらのインデックスを作成することはできません。シャードキーをサポートするインデックスを手動で作成する場合は、
mongosyncが開始する前、または移行が完了してmongosyncが停止した後にインデックスを作成する必要があります。
コレクション内では、
_idフィールドはクラスター内のすべてのシャードで一意である必要があります。 See Sharded Clusters and Unique Indexes for more details.The
movePrimarycommand cannot be used to reassign the primary shard while syncing.ゾーン構成のレプリケーションはありません。
mongosyncはデータをレプリケートしますが、ゾーンは継承しません。同期中にシャードを追加または削除することはできません。
mongosyncは、すべてのシャードに存在するインデックスのみを同期します。mongosyncは、すべてのシャードで一貫したインデックス仕様を持つインデックスのみを同期します。注意
インデックスの不一致を確認するには、「 シャード間で一貫性のないインデックスを検索する 」を参照してください。
mongosyncソースクラスターまたは宛先クラスターがシャーディングされたクラスターで、名前空間フィルタリングで を実行中いない場合は、 コマンドを実行中、コマンドが完了するまでbalancerStop15分間待機して、ソースクラスターのバランサーを無効にする必要があります。ソースクラスターまたは宛先クラスターがシャーディングされたクラスターで、名前空間フィルタリングを使用して
mongosyncを実行中いる場合は、ソースクラスターのバランサーをグローバルに有効にできますが、名前空間フィルター内のすべてのコレクションに対して無効にする必要があります。「 フィルタリングされた同期でコレクションのバランサーを無効にする 」を参照してください。ソースクラスターのバランサーを完全に無効にすることもできます。シャーディングされた宛先クラスターのバランサーは、常に
balancerStopを使用して無効にする必要があります。If you have enabled the source cluster's balancer, but disabled it for collections within the namespace filter, do not run
shardCollectionon collections within the namespace filter. If you runshardCollectionon collections within the namespace filter during the migration,mongosyncreturns an error and stops, which requires you to start the migration from scratch.mongosyncでは、実行中にコマンドtransitionFromDedicatedConfigServerの実行中をサポートしていません。同期中にシャードキーを調整することはできません。
reshardCollectionソースクラスターからの 操作は同期中はサポートされていません。mongosyncは、シャーディングされたクラスター上のデフォルト以外の照合順序を持つコレクションをサポートしません。これは、シャーディングされたコレクションとシャーディングされていないコレクションの両方に適用されます。mongosync一部のデータを含むシャードで、整合性や欠落しているインデックスについてのエラー。mongosyncfails if there is a balancing window configured on the source or destination cluster.
元に戻す
- 古いソースに、シャード間で部分的に分散された一意なインデックスがある場合、元に戻すと失敗する可能性があります。 元に戻す前に、すべてのシャードに一意なインデックスがあることを確認してください。
ソースクラスターと宛先クラスターは同じ数のシャードを持つ必要があります。クラスターのトポロジーが異なる場合、逆同期はできません。
ソースクラスターと宛先クラスターは同じMongoDBメジャー バージョンを実行する必要があります。
- In order to reverse direction,
mongosyncrequires that all unique indexes on the source cluster (except for_id) do not have legacy unique index keys.
複数のクラスター
mongosyncでは、1 つの宛先クラスターへの複数のソースクラスターの同期はサポートされていません。1 つのクラスターを同時に 1 つの
mongosyncインスタンスでソースクラスターにし、別のmongosyncインスタンスの宛先クラスターにすることはできません。
フィルタリングされた同期
フィルタリングは、元の同期ではサポートされていません。
/startを呼び出すときに preExistingDestinationData パラメータをtrueに設定しない限り、宛先クラスターには起動前にユーザー データが含まれていない必要があります。起動前に、宛先クラスターに
mongosync_reserved_for_internal_useシステムデータベースが含まれていない必要があります。使用中のフィルターは変更できません。 新しいフィルターを作成するには、「既存のフィルターの置き換え 」を参照してください。
コレクションの名前を変更できるのは、特定の状況のみです。 詳細については、「コレクションの追加と名前変更 」を参照してください。
フィルターにビューが含まれ、基本コレクションは含まれていない場合、ビュー メタデータのみが宛先クラスターに同期されます。 ビュー ドキュメントを含めるには、基本コレクションも同期する必要があります。
フィルターではシステム コレクションまたはシステム データベースを指定できません。
To use the
$outaggregation stage or themapReducecommand (when set to create or replace a collection) with filtering, you must configure the filter to use the entire database. You cannot limit the filter to collections within the database.詳細については、「 mapReduce と $out によるフィルタリング 」を参照してください。
フィルタリングでは、 二重書込みブロック をサポートしていません。宛先のみの書込みブロックを使用できます。
上限付きコレクション
1.3.0 以降、Mongosync は、Cappedコレクション を一部制限付きでサポートしています。
convertToCappedis not supported. If you runconvertToCapped,mongosyncexits with an error.cloneCollectionAsCappedはサポートされていません。
ソースクラスター上の上限付きコレクションは、同期中に正常に動作します。
同期中に、宛先クラスター上の上限付きコレクションに一時的な変更が加えられます。
ドキュメントの数に制限はありません。
最大コレクション サイズは 1 PB です。
mongosync は、コミット時に最大ドキュメント数と最大ドキュメント サイズの元の値を復元します。
システム コレクション
Mongosync は、システム コレクションを宛先クラスターにレプリケートしません。
If you issue a dropDatabase command on the source cluster, this change is not directly applied on the destination cluster. Instead, Mongosync drops user collections and views in the database on the destination cluster, but it does not drop system collections on that database.
たとえば、送信先クラスターでは、次のようになります。
The drop operation does not affect a user-created
system.jscollection.If you enable profiling, the
system.profilecollection remains.If you create views on the source cluster and then drop the database, replicating the drop removes the views, but leaves an empty
system.viewscollection.
このような場合、dropDatabase を複製すると、ユーザーが作成したコレクションはすべてデータベースから削除されますが、そのシステム コレクションは宛先クラスターに残ります。
インデックス構築
がbuildIndexes "afterDataCopy"に設定されている場合、mongosync Renameは DDL イベントを適用できない可能性があります。この問題が発生した場合は、buildIndexes を"beforeDataCopy" または に設定して、移行を最初から再開します。"never" buildIndexesbeforeDataCopyをbuildIndexes に設定すると移行時間が長くなる可能性があり、 をnever に設定すると、移行の完了後にインデックスを手動で構築する必要があります。
ローリング処理によるインデックスビルド
mongosync does not support rolling index builds during migration. To avoid building indexes in a rolling fashion during migration, use one of the following methods to ensure that your destination indexes match your source indexes:
移行する前に、ソースにインデックスをビルドします。
移行中にデフォルトのインデックス構築を使用してソースにインデックスをビルドします。
移行後に、宛先でインデックスをビルドします。
埋め込み検証子
1.9 以降、mongosync は埋め込み検証子を使用して、ソースクラスターから宛先クラスターへのコレクションの同期が成功したことを確認できます。
互換性
埋め込み検証子は mongosync 1.8 以前では使用できません。
別の検証方法については、「 データ転送の検証 」を参照してください。
制限
埋め込み検証子には次の制限があります。
mongosyncは検証子の状態をメモリに保存するため、大幅なメモリ オーバーヘッドが発生する可能性があります。 検証子を実行するには、mongosyncは約 10 GBのメモリに加えて、100 万ドキュメントごとに追加の 500 MB を必要とします。検証子は再開できません。 ユーザーが同期を停止または一時停止した後、何らかの理由で
mongosyncを再度開始した場合、検証プロセスは最初から再開されます。 これにより検証が移行より大幅に遅れる可能性があります。レプリカセットからシャーディングされたクラスターに移行する場合、シャーディングオプションで指定したソース コレクションの名前を変更することはできません。CEA フェーズ 中にシャーディングオプションに含まれるコレクションの名前を変更すると、検証子はシャーディングの不一致を報告します。
検証を有効にして同期を開始し、
buildIndexesをneverに設定している場合、mongosyncがソースクラスターで TTLコレクションを見つけると、移行は失敗します。 これは、/startエンドポイントを呼び出した後に発生する可能性があり、移行の進行中にユーザーがソースクラスターに TTLインデックスを作成する場合などです。宛先クラスターでインデックスを構築せずに TTL コレクションを同期するには、 検証子を無効にして同期を開始する必要があります。
サポートされていない検証チェック
検証子は、次の名前空間はチェックしません。
上限付きコレクション
TTL インデックスを持つコレクション(移行中に追加または削除される TTL インデックスを含む)
デフォルトの照合を使用しないコレクション
サポートされていないコレクションを確認するには、コレクションを確認するための追加のスクリプトコードを追加します。詳細については、データ転送を確認する を参照してください。
永続的なクエリ設定
mongosync は、 MongoDB 8.0 で導入された永続的クエリ設定(PQS)を移行しません。ソースクラスターがPQS を使用している場合は、それらを手動で移行する必要があります。
6.0 より前の移行
1.10 以降、mongosync は、6.0 より古いバージョンのMongoDBサーバーを実行中ソースクラスターからの移行をサポートしています。 サポートされている移行パスの詳細については、 「 MongoDB Server のバージョンの互換性 」を参照してください。
次の制限は、6.0 より前に 次の移行:
ソースクラスターには孤立したドキュメントを含めることはできません。孤立したドキュメントをクリーンアップするには、ソースクラスター上のすべてのシャードのプライマリノードで
cleanupOrphanedインスタンスに対してmongodコマンドを実行します。このコマンドがステータス{ok:1}で完了するのを待ってから、移行を開始します。移行中に、ソースクラスターでは DDL イベントを生成する書込み (write) が発生しません。次のイベントは発生しません。
collModcreatecreateIndexesdropdropDatabasedropIndexesrefineCollectionShardKeyrenamereshardCollectionshardCollection
mapReduceこれには、 、$out、$mergeなどの新しいコレクションを作成する可能性のある操作が含まれます。これには、挿入から暗黙的に作成されたコレクションも含まれます。移行中にCRUDイベントを生成する書込み (write) のみが実行できます。注意
名前空間フィルターの外部のソース コレクションで DDL イベントを生成する書込み (write) は許可されます。
geoHaystackインデックスはサポートされていません。/reverse エンドポイントはサポートされていません。
reversible/startリクエストでは オプションは有効にできません。/startリクエストでenableUserWriteBlockingオプションを"sourceAndDestination"に設定できないため、二重書込みブロックはサポートされていません。 宛先のみの書込みブロックがサポートされます。/commitエンドポイントを呼び出した後、ソースクラスターに書込み (write) が行われていないことを確認します。createSupportingIndexesシャーディングパラメータ は有効にできません。代わりに、ソースクラスターでシャードキー をサポートするインデックスを作成します。仕様が一貫していないインデックスや、1 つ以上のシャードで欠落しているインデックスがある場合、
mongosyncはエラーを返します。インデックスの不一致を確認するには、シャード間で一貫性のないインデックスを検索する を参照してください。