mongosync バイナリは Mongosync で使用されるプライマリ プロセスです。mongosync は、あるクラスターから別のクラスターにデータを移行します。
mongosyncプロセスの概要については、「 mongosyncについて 」を参照してください。
mongosync を使い始めるには、「クイック スタート ガイド」を参照してください。
詳細については、状況に応じてインストールまたはmongosyncの接続のページを参照してください。
埋め込み検証子無効化
1.9 以降、mongosync には、宛先クラスターでサポートされているすべてのコレクションに対して一連の検証チェックを実行し、ソースクラスターから宛先へのドキュメントの転送が成功したことを確認するための埋め込み検証子が含まれています。
mongosync プロセスを開始すると、次の資格が提供されます。
Embedded verification is enabled by default. Verification checks for data consistency between the source and destination clusters. Verification will cause mongosync to fail if any inconsistencies are detected, but it does not check for all possible data inconsistencies. Please see the documentation at https://www.mongodb.com/ja-jp/docs/cluster-to-cluster-sync/current/reference/verification/embedded for more details. Verification requires approximately 0.5 GB of memory per 1 million documents on the source cluster and will fail if insufficient memory is available. Accepting this disclaimer indicates that you understand the limitations and memory requirements for this tool. To skip this disclaimer prompt, use –-acceptDisclaimer. To disable the embedded verifier, specify 'verification: false' when starting mongosync. Please see https://www.mongodb.com/ja-jp/docs/cluster-to-cluster-sync/current/reference/verification/ for alternative verification methods. Do you want to continue? (y/n):
すでに読み取りを完了してから、ディスクの区切り文字をスキップするために、 オプションを使用してmongosync --acceptDisclaimerを起動することで、この通知をスキップできます。
設定
クラスターの独立性
mongosync は、ソースクラスターと宛先クラスター間で収集データを同期します。mongosync ユーザーまたはロールを同期しません。そのため、各クラスターで異なるアクセス権限を持つユーザーを作成できます。
構成ファイル
mongosyncのオプションは、YAML 構成ファイルで設定できます。 --configオプションを使用します。 例:
mongosync --config /etc/mongosync.conf
利用可能な設定の詳細については、「構成」を参照してください。
クラスターとコレクションのタイプ
シャーディングされたクラスター
Mongosync はシャーディングされたクラスター間のレプリケーションをサポートしています。mongosync は、ソースクラスターから宛先クラスターに個々のシャードを並列に複製します。ただし、mongosync はソースクラスターのシャーディング構成を保持しません。
重要
You must always disable the balancer on a sharded destination cluster by using balancerStop. After stopping the balancer, wait fifteen minutes before starting mongosync. This gives the cluster time to finish any in-progress chunk migrations.
mongosyncソースクラスターまたは宛先クラスターがシャーディングされたクラスターで、名前空間フィルタリングで を実行中いない場合は、 コマンドを実行中、コマンドが完了するまでbalancerStop 15分間待機して、ソースクラスターのバランサーを無効にする必要があります。
ソースクラスターまたは宛先クラスターがシャーディングされたクラスターで、名前空間フィルタリングを使用して mongosync を実行中いる場合は、ソースクラスターのバランサーをグローバルに有効にできますが、名前空間フィルター内のすべてのコレクションに対して無効にする必要があります。「 フィルタリングされた同期でコレクションのバランサーを無効にする 」を参照してください。ソースクラスターのバランサーを完全に無効にすることもできます。
During migration, do not run the moveChunk or moveRange commands. If you have enabled the source cluster's balancer, but disabled it for collections within the namespace filter, do not run shardCollection on collections within the namespace filter. If you run shardCollection on collections within the namespace filter during the migration, mongosync returns an error and stops, which requires you to start the migration from scratch.
オートバランサーの無効化
バージョン 1.17 以降、mongosync は、バランサーが無効になっていないことを検出すると、初期化中にソースクラスターと宛先クラスターのバランサーを無効にします。
これは初期化中にのみ適用されます。移行の開始後に mongosync がいずれかのバランサーが有効になっていることが検出されると、mongosync は失敗します。
バランサーを無効にした後、mongosync は 15 分間待機して、進行中のチャンク移行が完了したことを確認してから、移行を続行します。
移行が元に戻すことができず、mongosync が初期化中にソースまたは宛先のバランサーを無効にした場合、コミットが成功した後に mongosync によって無効になっているバランサーが再度有効になります。移行が元に戻すことが可能な場合、mongosync はバランサーを再度有効にせず、ユーザーに 15 分待機させないようにします。
IMPORTANT: If mongosync disables the balancer for either cluster and then fails before commit, you must re-enable the balancer(s) manually by using the balancerStart database command if you do not plan to run mongosync again.
フィルタリングされた同期でのコレクションのバランサーの無効化
名前空間フィルターを使用していて、名前空間フィルター外のコレクションに対してソースクラスターのバランサーを有効にする場合は、mongosync を起動する前に以下の手順に従ってください。
ソースクラスターのバランサーを有効にします。
Before starting mongosync with a namespace filter, enable the balancer for the source cluster by running the sh.startBalancer() method in mongosh.
各コレクションのバランサーを無効にします。
Disable the balancer for each collection within the namespace filter by running the setAllowMigrations command:
db.adminCommand( { setAllowMigrations: “<db>.<collection>”, allowMigrations: false } )
名前空間フィルター 内のすべてのコレクションに対して上記のコマンドを実行します。
重要
ソースクラスターのバランサーを有効にするが名前空間フィルターを使用しない場合、または名前空間フィルター内のすべてのコレクションのバランサーを無効にしない場合、mongosync は失敗します。
事前分割 チャンク
mongosync がシャーディングされた宛先クラスターに同期する場合、宛先クラスター上のシャーディングされたコレクション用にチャンクが事前に分割されます。シャーディングされたコレクションごとに、mongosync は 90 チャンクの作成を試みます。
チャンク分散
重要
Even if the source cluster is balanced, mongosync doesn't ensure balance of the destination cluster. Because mongosync doesn't support the execution of sharding operations during migration, you must wait until it is safe to accept writes to rebalance the destination cluster. See Sharded Cluster Balancer for guidance on how to rebalance the cluster and sharded cluster limitations for information on sharded cluster limitations in mongosync.
mongosync では、mongosync インスタンスが複数ある場合でも、ソースから宛先へのチャンク分散は保持されません。 宛先クラスターのソースクラスターから、特定の事前分割されたチャンクを複製することはできません。
mongosyncシャーディング構成のうちソースクラスターから宛先クラスターまで保持するシャーディング構成は、シャーディングキーのみです。移行が完了したら、宛先クラスターのバランサーを有効にして、ソースクラスターのディストリビューションとは独立してドキュメントを分散できます。
プライマリシャード
シャーディングされた宛先クラスターに同期する場合、mongosync は 1 つのラウンドログを使用して各データベースにプライマリシャードを割り当てます。
警告
Running movePrimary on the source or destination cluster during migration may result in a fatal error or require you to restart the migration from the start. For more information, see Sharded Clusters.
コンフィギュレーションシャード クラスター
8.0 以降、MongoDB、埋め込みコンフィギュレーションサーバークラスターとも呼ばれるコンフィギュレーションシャードクラスターのサポートが導入されています。
mongosync は、専用コンフィギュレーションサーバーのシャーディングされたクラスターから埋め込みコンフィギュレーションサーバーのシャーディングされたクラスターへの同期をサポートしており、その逆も同様です。さらに、mongosync はレプリカセットから構成シャーディングされたクラスターへの同期をサポートしていますが、その逆はサポートされていません。
埋め込みコンフィギュレーションサーバーの詳細については、コンフィギュレーションシャードを参照してください。
複数のクラスター
ソースクラスターを複数の宛先クラスターと同期するには、宛先クラスターごとに 1 つの mongosync インスタンスを使用します。詳細については、「複数クラスターの制限事項」を参照してください。
上限付きコレクション
1.3.0 以降、Mongosync は、Cappedコレクション を一部制限付きでサポートしています。
convertToCappedis not supported. If you runconvertToCapped,mongosyncexits with an error.cloneCollectionAsCappedはサポートされていません。
ソースクラスター上の上限付きコレクションは、同期中に正常に動作します。
同期中に、宛先クラスター上の上限付きコレクションに一時的な変更が加えられます。
ドキュメントの数に制限はありません。
最大コレクション サイズは 1 PB です。
mongosync は、コミット時に最大ドキュメント数と最大ドキュメント サイズの元の値を復元します。
読み取りと書込み
書き込みブロッキング
デフォルトでは 、mongosync は宛先クラスターで宛先のみの書込みブロックを有効にします。 mongosync/progress canWriteエンドポイントが をtrue であると報告する直前に、 は書込みブロックを解除します。/start enableUserWriteBlockingエンドポイントを使用して を"destinationOnly" に設定することで、宛先専用書込みブロックを明示的に有効にすることができます。
二重書込み (write) ブロックを有効にできます。 二重書込みブロックを有効にすると、mongosync は以下の書込みをブロックします。
移行中の宛先クラスターで。
mongosyncは、canWriteをtrueに設定する直前に書込みのブロックを解除します。次を呼び出した後のソースクラスターで:
/commit
二重書込みブロックを有効にするには、 /start enableUserWriteBlockingを使用して を"sourceAndDestination" に設定します。
/start enableUserWriteBlockingを使用して、 を"none" に設定できます。
同期開始後に、二重書込みブロックを有効にしたり、書込みブロックを無効にしたりすることはできません。
後で逆同期を使用する場合は、mongosync を起動するときに二重書込みブロックを有効にする必要があります。
ユーザー権限
enableUserWriteBlockingを設定するには、mongosync ユーザーに、setUserWriteBlockMode およびbypassWriteBlockingMode のアクションタイプを含むロールが必要です。
注意
enableUserWriteBlockingを使用する場合、書込み (write) は ActionType を持たないユーザーに対してのみブロックされます。この ActionTypebypassWriteBlockingMode を持つユーザーは書き込みを実行できます。
許容される読み取り
ソースクラスターでの読み取り操作は常に許可されます。
/progress エンドポイントから canWrite が true というレポートがあった場合、ソースクラスターと宛先クラスターのデータはコンシステントです。
許容される書込み
mongosyncの状態を確認するには、 /progress API エンドポイントを呼び出します。/progress出力には、ブール値 canWriteが含まれます。
canWriteがtrueの場合、宛先クラスターは安全に書込み可能です。canWriteがfalseの場合、宛先クラスターには書込みを行わないでください。
mongosyncの同期中、ソースクラスターには安全に書込み可能です。canWriteがtrueである場合を除き、宛先クラスターには書込みを行わないでください。
読み取りと書き込み保証
By default, mongosync sets the read concern level to "majority" for reads on the source cluster. For writes on the destination cluster, mongosync sets the write concern level to "majority" with j: true.
読み取り保証と書込み保証の構成と動作の詳細については、「読み取り保証(read concern)」と「書込み保証(write concern)」を参照してください。
読み込み設定 (read preference)
mongosync requires the primary read preference when connecting to the source and destination clusters. For more information, see Read Preference Options.
レガシーインデックスの取り扱い
mongosync 0 や空の文字列などのレガシーインデックス値を宛先の 1 に書き換えます。 mongosync は宛先の無効なインデックスオプションも排除します。
同期中の考慮事項
mongosync replication is different from replication of data within a Replica Set. mongosync combines and reorders writes from the source to destination cluster during the sync, and also temporarily modifies various collection characteristics.
その結果、同期が一時停止されているときを含め、同期の実行中の任意の点で宛先がソースクラスターと一致することが保証されません。切り替える前に宛先クラスターとソースクラスターが一致していることを確認するには、コミットエンドポイントを呼び出します。
逆機能を使用しない限り、ソースクラスターと宛先クラスター間の関係は、コミット時に終了します。同期中の制約の詳細については、制限については、「 制限 」を参照してください。
重要
mongosync で commit を呼び出し、canWrite が true を正常に返すまで、宛先クラスター上の移行されたコレクションは、アプリケーションの読み取りまたは書き込みトラフィックを受け入れるために使用できません。障害復旧、分析、またはその他の同様のユースケースのセカンダリ クラスターを維持するために、mongosync を使用しないでください。
コレクションの特性に対する一時的な変更
mongosync は、同期中に次のコレクションの特性を一時的に変更します。 元の値はコミット プロセス中に復元されます。
変更 | 説明 |
|---|---|
Unique Indexes | ソースクラスター上のユニークインデックスは、デスティネーションクラスターでは非一意なインデックスとして同期されます。 |
TTL Indexes | 同期により、宛先クラスターの |
Hidden Indexes | 同期では、非表示のインデックスを非表示でないものとして複製します。 |
書き込みブロッキング | 二重書込みブロックを有効にすると、
To learn more, see Write Blocking. |
上限付きコレクション | 同期により、Cappedコレクションが最大許容サイズに設定されます。 |
ダミー インデックス | 場合によっては、シャーディングされたコレクションや照合されたコレクションへの書込みをサポートするために、同期によって宛先にダミーのインデックスが作成される場合があります。 |
ローリング処理によるインデックスビルド
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:
移行する前に、ソースにインデックスをビルドします。
移行中にデフォルトのインデックス構築を使用してソースにインデックスをビルドします。
移行後に、宛先でインデックスをビルドします。
mongosync Metadata
mongosync は、移行中にデータベースつまたは複数のデータベースにメタデータを保存します。メタデータデータベースには、次のいずれかの名前を付けることができます。
mongosync_reserved_for_internal_useで始まるのもの
mongosync_internal_で始まるのもの
mongosync_reserved_for_verification_
移行を成功させた後、すべてのメタデータデータベースを削除する必要があります。メタデータを削除した後は、移行 を元に戻すことはできません。
宛先クラスター
整合性
mongosync は、宛先クラスターで結果整合性をサポートします。コミットするまで、宛先クラスターでは読み取り整合性が保証されません。コミットする前に、ソースクラスターと宛先クラスターは特定の点で異なる場合があります。詳細については、同期中の考慮事項 を参照してください。
mongosyncが同期している間に、 mongosyncはソースから宛先に中継されるときに、書き込みの順序を変更したり、まとめたりすることができます。 特定のドキュメントの場合、書込みの合計数がソースと宛先で異なる場合があります。
トランザクションは、宛先クラスター上でアトミックに表示されない場合があります。 再試行可能な書き込みは、宛先クラスターでは再試行できない場合があります。
プロファイリング
ソースデータベースでプロファイリングが有効になっている場合、 MongoDB<db>.system.profile という名前の特別なコレクションが作成されます。同期が完了した後、ソースデータベースが後で削除された場合であっても、Mongosyncは宛先から<db>.system.profileコレクションを削除しません。<db>.system.profileコレクションによって宛先のユーザー データの精度が変わることはありません。
ビュー
ビューを含むデータベースをソース上で削除すると、宛先では当該のデータベースに空の system.views コレクションが表示される場合があります。空のsystem.viewsコレクションによって宛先のユーザー データの精度が変わることはありません。
システム コレクション
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 を複製すると、ユーザーが作成したコレクションはすべてデータベースから削除されますが、そのシステム コレクションは宛先クラスターに残ります。
UUID
mongosync creates collections with new UUIDs on the destination cluster. There is no relationship between UUIDs on the source cluster and the destination cluster. If applications contain hard-coded UUIDs (which MongoDB does not recommend), you may need to update those applications before they work properly with the migrated cluster.
ソート
mongosync 未定義の順序で宛先クラスターにドキュメントを挿入します。ソースクラスターからの自然なソート順序は保持されません。アプリケーションがドキュメントの順序に依存するにもかかわらずソート方法が未定義の場合、移行したクラスターで正しく動作させるには、当該のアプリケーションを更新して、期待されるソート順序を指定しなければならない場合があります。
MongoDB Atlas内部データベース
MongoDB Atlasやその他のクラウドサービスでは、クラスター内の専用の内部データベースに重要なデータを保存します。これらのデータベースは __mdb_internal1で始まります。. 以降、18 はmongosync __mdb_internalで始まるすべてのデータベースを無視します。
パフォーマンス
回復力
mongosync 回復力があり、致命的でないエラーを処理できます。"error" ないしは "failure"という単語を含むログは、 mongosyncの障害やデータの破損を示すものではありません。たとえば、ネットワーク エラーが発生した場合、 mongosyncログに”error”という単語が含まれることがありますが、 mongosyncの同期は完了可能です。同期が完了しない場合は、mongosyncによって致命的なログエントリが書込まれます。
データ定義言語(DDL)操作
Using DDL operations (operations that act on collections or databases such as db.createCollection() and db.dropDatabase()) during sync increase the risk of migration failure and may negatively impact mongosync performance. For best performance, refrain from performing DDL operations on the source cluster while the sync is in progress.
DDL 操作について詳しくは、「保留中の DDL 操作とトランザクション」を参照してください。
ネットワーク レイテンシ
移行コンポーネント間のネットワークレイテンシや物理的な距離が長い場合、同期速度に悪影響を与える可能性があります。
mongosyncと宛先シャード間のレイテンシ- ソースクラスターの各操作では、
mongosyncは宛先サーバーへの 2 回の往復を実行します。 レイテンシ が大きいほど、同期は遅くなります。 - 宛先シャード間のレイテンシ
mongosyncは、宛先クラスターのトランザクション内で操作を実行し、独自のメタデータをバッチで更新します。 これにより、クロスシャード トランザクションが発生する可能性があり、シャードが離れている場合はコストが高くなる可能性があります。- ソースクラスターまたは宛先クラスター上のレプリカセットのノード間のレイテンシ
mongosyncuses"majority"writes and"majority"reads, which require acknowledgement from multiple nodes in a replica set, including shard-backing replica sets. If the majority of these nodes aren't in the same region, there will be negative performance implications.
同期中の中断
mongosync プロセス中の中断に関連する以下の考慮事項。
エラーとクラッシュ
同期中に mongosync でエラーが発生したり、使用できなくなった場合は、停止した場所から mongosync操作を再開できます。 mongosync バイナリはステートレスで、宛先クラスターの再起動用メタデータを保存します。
同期を続行するには、mongosync が再度利用可能になったら再起動し、中断した同期と同じパラメータを使用します。 mongosync を再起動すると、プロセスは停止した場所から再開されます。
クラスターの可用性
ソースクラスターまたは宛先クラスターが予期せずクラッシュした場合は、中断された場所からmongosyncを安全に再起動できます。 クラスターが再度使用可能になったら、mongosync を再起動し、中断した同期と同じパラメータを使用します。
一時停止した同期
mongosyncが一時停止状態にある場合、mongosync は次のアクションをサポートしていません。
ソースクラスターまたは宛先クラスターのMongoDBバージョンのアップグレード
バランサーを有効にしてから無効にする
PAUSED 状態のときに mongosync をアップグレードできます。