制限
項目一覧
警告
mongosync
は、ドキュメント化された制限に準拠しているかは確認しません。 アプリケーションが制限の影響を受けないことを確認してください。 以下の制限 のいずれかが課されている状態でmongosync
を実行すると、対象クラスターで予期しない動作が発生する恐れがあります。
移行が一時停止または再開される場合に停止されるときを含め、移行の全期間にわたってこれらの制限に従う必要があります。
一般的な制限
注意
MongoDB サーバー の互換性の詳細については、 「 MongoDB Serverのバージョンの互換性 」を参照してください。
mongosync
は、移行中にメジャー バージョンまたはマイナー バージョンを変更するインプレースサーバーバージョン アップグレードをサポートしていません。mongosync
ではパッチ バージョンのアップグレードは可能です。 詳細については、サーバーのアップグレード手順 を参照してください。宛先クラスターは空である必要があります。
mongosync
は、クラスターまたは環境が適切に構成されているかどうかを検証しません。mongosync
の実行中は、他のクライアントが宛先クラスターに書き込みを行わないでください。コミット プロセスを開始し、
enableUserWriteBlocking
"sourceAndDestination"
start
エンドポイントを使用したときに を に設定しなかった場合は、コミット プロセスを開始する前にソースクラスターへの書込みを防ぐ必要があります。system.* コレクションは複製されません。
ドル記号(
$
)のプレフィックスがついたフィールド名はサポートされていません。 「ピリオドとドル記号を含むフィールド名 」を参照してください。サーバーレス クラスターはサポートされていません。
MongoDB 共有階層はサポートされていません。
Queryable Encryptionはサポートされていません。
同じフィールドに一意なインデックスと一意でないインデックスが定義されているコレクションを同期することはできません。
M10+
Atlas クラスターでmongosync
を実行する前に、 Require Indexes for All Queriesオプションを無効にします。mongosync
ではユーザーまたはロールは同期されません。mongosync
は、宛先クラスターへの同期中にソースクラスターで行われたapplyOps
操作を複製しません。mongosync
は、primary
読み込み設定(read preference)を使用してソースクラスターから読み取る必要があります。mongosync
では、現在 MongoDB バージョンをアップグレードしているソースクラスターまたは宛先クラスターはサポートされていません。mongosync
はAtlas Search インデックスの同期をサポートしていません。mongosync
は、 WiredTigerストレージ エンジンを使用するクラスターのみをサポートします。タイムスタンプが空のドキュメントとコレクションを同期することはできません。たとえば、6.0 以前の
Timestamp(0,0)
などです。 ソースクラスター。mongosync
はフィールド名が重複するドキュメントをサポートしていません。 詳細については、 「 MongoDB重複するフィールド名をサポートしていません 」を参照してください。
MongoDB コミュニティ エディション
MongoDB は、Community のビルドを使用した Cluster-to-Cluster Sync をテストしておらず、ほとんどの場合、MongoDB は Community を使用した Cluster-to-Cluster Sync のサポートを提供していません。 MongoDB Community Edition で Cluster-to-Cluster Sync を使用する場合は、MongoDB の営業担当者に問い合わせて、要件や個別のオプションについて説明してください。
サポートされていないコレクションのタイプ
時系列コレクションはサポートされていません。
expireAfterSecondsが設定されたクラスター化されたコレクションはサポートされていません。
シャーディングされたクラスター
mongosync
では、シャーディングされたクラスターからレプリカセットへの同期はサポートされていません。mongosync
では、1 つ以上のアービタを持つシャーディングされたクラスター トポロジーへの同期はサポートされていません。mongosync
はグローバルクラスターとの間の同期をサポートしていません。レプリカセットからシャーディングされたクラスターへの同期には次の制限があります。
mongosync
では、一部制限付きで、同期中にsharding.shardingEntries
オプションに含まれるコレクションの名前を変更できます。 詳細については、「同期中の名前の変更 」を参照してください。sharding.createSupportingIndexes
オプションを使用すると、同期中に宛先クラスターにインデックスが自動的に作成されます。 ソースクラスターでは、その後にこれらのインデックスを作成することはできません。シャードキーをサポートするインデックスを手動で作成する場合は、
mongosync
が開始する前、または移行が完了してmongosync
が停止した後にインデックスを作成する必要があります。
コレクション内では、
_id
フィールドはクラスター内のすべてのシャードで一意である必要があります。 See Sharded Clusters and Unique Indexes for more details.同期中にプライマリシャードを再割り当てするために、
movePrimary
コマンドは使用できません。ゾーン構成のレプリケーションはありません。
mongosync
はデータをレプリケートしますが、ゾーンは継承しません。同期中にシャードを追加または削除することはできません。
mongosync
は、すべてのシャードに存在するインデックスのみを同期します。mongosync
は、すべてのシャードで一貫したインデックス仕様を持つインデックスのみを同期します。注意
インデックスの不一致を確認するには、「シャード間で一貫性のないインデックスを検索する 」を参照してください。
mongosync
ソースクラスターまたは宛先クラスターがシャーディングされたクラスターで、名前空間フィルタリング 付きで を実行中いない場合は、 コマンドを実行中、コマンドが完了するまでbalancerStop
15分間待機して、ソースクラスターのバランサーを無効にする必要があります。mongosync
ソースクラスターまたは宛先クラスターがシャーディングされたクラスターで、名前空間フィルタリングを使用して を実行中いる場合は、ソースクラスターのバランサーをグローバルに有効にできますが、名前空間フィルター内のすべてのコレクションに対して無効にする必要があります。 「 フィルタリングされた同期でコレクションのバランサーを無効にする 」を参照してください。ソースクラスターのバランサーを完全に無効にすることもできます。シャーディングされた宛先クラスターのバランサーは常に
balancerStop
を使用して無効にする必要があります。
ソースクラスターのバランサーを有効にしているが、名前空間フィルター内のコレクションに対して無効にした場合は、名前空間フィルター内のコレクションに対して
shardCollection
を実行しないでください。移行中に名前空間フィルター内のコレクションに対してshardCollection
を実行すると、mongosync
はエラーを返して停止します。その場合、移行を最初から開始する必要があります。ソースクラスターまたは宛先クラスターでは、
moveChunk
} コマンドとmoveRange
コマンドは実行しないでください。同期中にシャードキーを調整することはできません。
ソースクラスターからの
reshardCollection
操作は同期中はサポートされていません。シャーディングされたコレクションあたりのインデックスの最大数は63で、デフォルトの上限である64より 1 つ下です。
mongosync
は、デフォルトの照合設定を持つシャーディングされたコレクションの同期のみをサポートします。
元に戻す
古いソースに、シャード間で部分的に分散された一意なインデックスがある場合、元に戻すと失敗する可能性があります。 元に戻す前に、すべてのシャードに一意なインデックスがあることを確認してください。
ソースクラスターと宛先クラスターは同じ数のシャードを持つ必要があります。 クラスターのトポロジーまたはメジャー バージョンが異なる場合、逆同期はできません。
複数のクラスター
mongosync
では、1 つの宛先クラスターへの複数のソースクラスターの同期はサポートされていません。1 つのクラスターを同時に 1 つの
mongosync
インスタンスでソースクラスターにし、別のmongosync
インスタンスの宛先クラスターにすることはできません。
フィルタリングされた同期
フィルタリングは、元の同期ではサポートされていません。
起動前に、宛先クラスターにはユーザー データが含まれていない必要があります。
起動前に、宛先クラスターに
mongosync_reserved_for_internal_use
システムデータベースが含まれていない必要があります。使用中のフィルターは変更できません。 新しいフィルターを作成するには、「既存のフィルターの置き換え 」を参照してください。
コレクションの名前を変更できるのは、特定の状況のみです。 詳細については、「コレクションの追加と名前変更 」を参照してください。
フィルターにビューが含まれ、基本コレクションは含まれていない場合、ビュー メタデータのみが宛先クラスターに同期されます。 ビュー ドキュメントを含めるには、基本コレクションも同期する必要があります。
フィルターではシステム コレクションまたはシステム データベースを指定できません。
フィルタリングとともに
$out
集計ステージまたはmapReduce
コマンド(コレクションを作成または置換するように設定されている場合)を使用するには、データベース全体を使用するようにフィルターを構成する必要があります。 フィルターを データベース内のコレクションに制限することはできません。詳細については、「 mapReduce と $out によるフィルタリング 」を参照してください。
フィルタリングでは、 二重書込みブロック をサポートしていません。宛先のみの書込みブロックを使用できます。
上限付きコレクション
1.3.0 以降、Cluster-to-Cluster Sync では、上限付きコレクションが一部制限付きでサポートされます。
convertToCapped
はサポートされていません。convertToCapped
を実行すると、mongosync
はエラーで終了します。cloneCollectionAsCapped
はサポートされていません。
ソースクラスター上の上限付きコレクションは、同期中に正常に動作します。
同期中に、宛先クラスター上の上限付きコレクションに一時的な変更が加えられます。
ドキュメントの数に制限はありません。
最大コレクション サイズは 1 PB です。
mongosync
は、コミット時に最大ドキュメント数と最大ドキュメント サイズの元の値を復元します。
システム コレクション
Cluster-to-Cluster Sync では、システム コレクションは宛先クラスターにレプリケートされません。
ソース クラスターで dropDatabase
コマンドを発行しても、この変更が宛先クラスターに直接適用されることはありません。代わりに、Cluster-to-Cluster Sync により、宛先クラスターのデータベース内のユーザー コレクションとビューが削除されます。ただし、そのデータベース上のシステム コレクションは削除されません。
たとえば、送信先クラスターでは、次のようになります。
削除操作は、ユーザーが作成した
system.js
コレクションには影響しません。プロファイリングを有効にすると、
system.profile
コレクションは残ります。ソースクラスターでビューを作成してからデータベースを削除すると、レプリケートされた削除操作によりビューが削除されますが、空の
system.views
コレクションが残ります。
このような場合、dropDatabase
を複製すると、ユーザーが作成したコレクションはすべてデータベースから削除されますが、そのシステム コレクションは宛先クラスターに残ります。
ローリング処理によるインデックスビルド
mongosync
は、移行中にローリングインデックスのビルドをサポートしていません。移行中にローリング方式でインデックスをビルドしないようにするには、次のいずれかの方法を使用して、宛先インデックスがソース インデックスと一致することを確認します。
移行する前に、ソースにインデックスをビルドします。
移行後に、宛先でインデックスをビルドします。
埋め込み検証子
1.9 以降、mongosync
は埋め込み検証子を使用して、ソースクラスターから宛先クラスターへのコレクションの同期が成功したことを確認できます。
互換性
埋め込み検証子は mongosync 1.8 以前では使用できません。
別の検証方法については、「 データ転送の検証 」を参照してください。
制限
埋め込み検証子には次の制限があります。
mongosync
は検証子の状態をメモリに保存するため、大幅なメモリ オーバーヘッドが発生する可能性があります。 検証子を実行するには、mongosync
には約 10 GBのメモリに加えて、100 万ドキュメントごとに追加の 500 MB が必要です。検証子は再開できません。 ユーザーが同期を停止または一時停止した後、何らかの理由で
mongosync
を再度開始した場合、検証プロセスは最初から再開されます。 これにより検証が移行より大幅に遅れる可能性があります。検証を有効にして同期を開始し、
buildIndexes
をnever
に設定している場合、mongosync
がソースクラスターで TTLコレクションを見つけると、移行は失敗します。 これは、/start
エンドポイントを呼び出した後に発生する可能性があり、移行の進行中にユーザーがソースクラスターに TTLインデックスを作成する場合などです。宛先クラスターでインデックスを構築せずに TTL コレクションを同期するには、 検証子を無効にして同期を開始する必要があります。
サポートされていない検証チェック
検証子は、次の名前空間はチェックしません。
上限付きコレクション
TTL インデックスを持つコレクション(移行中に追加または削除される TTL インデックスを含む)
デフォルトの照合を使用しないコレクション
ビュー
検証子は、次のコレクション機能をチェックしません。
コレクションメタデータ
Indexes
上記のデータとメタデータを確認するには、これらのコレクションとコレクション機能の追加チェックをスクリプト。 詳細については、「 データ転送を確認する 」を参照してください。
注意
バージョン1.10 以降、検証子は、 より前に発生した DDLイベントからのデータの不整合をチェックします。6.0移行中のソースクラスター。 これは、6.0 より前に 移行は DDL イベントをサポートしていません。
詳細については、「 6.0以前の移行制限 」を参照してください。
永続的なクエリ設定
mongosync
は、 MongoDB 8.0 で導入された永続的クエリ設定(PQS)を移行しません。ソースクラスターがPQS を使用している場合は、それらを手動で移行する必要があります。
6.0 より前の移行
1.10 以降、mongosync
は、6.0 より古いバージョンのMongoDBサーバーを実行中ソースクラスターからの移行をサポートしています。 サポートされている移行パスの詳細については、 「 MongoDB Server のバージョンの互換性 」を参照してください。
次の制限は、6.0 より前に 次の移行:
移行中に、ソースクラスターでは DDL イベントを生成する書込み (write) が発生しません。次のイベントは発生しません。
collMod
create
createIndexes
drop
dropDatabase
dropIndexes
refineCollectionShardKey
rename
reshardCollection
shardCollection
mapReduce
これには、 、$out
、$merge
などの新しいコレクションを作成する可能性のある操作が含まれます。これには、挿入から暗黙的に作成されたコレクションも含まれます。 移行中にCRUDイベントを生成する書込み (write) のみが実行できます。注意
名前空間フィルターの外部のソース コレクションで DDL イベントを生成する書込み (write) は許可されます。
geoHaystack
インデックスはサポートされていません。/reverse エンドポイントはサポートされていません。
reversible
/startリクエストでは オプションは有効にできません。/start
リクエストでenableUserWriteBlocking
オプションを"sourceAndDestination"
に設定できないため、二重書込みブロックはサポートされていません。 宛先のみの書込みブロックがサポートされます。/commit
エンドポイントを呼び出した後、ソースクラスターに書込み (write) が行われていないことを確認します。createSupportingIndexes
シャーディングパラメータ は有効にできません。代わりに、ソースクラスターでシャードキー をサポートするインデックスを作成します。仕様が一貫していないインデックスや、
mongosync
が欠落しているインデックスがある場合、 はエラーを返します。 インデックスの不一致を確認するには、「 シャード間で一貫性のないインデックスを検索する 」を参照してください。MongoDB 4.4を実行中ソースクラスターの場合、 SRV 接続文字列はサポートされていません。標準の接続文字列を使用する必要があります。