AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

シャーディングされたクラスターの同期

There are two ways to synchronize sharded clusters. You can use either one mongosync or several mongosync instances. For best performance with large or heavily loaded clusters, use one mongosync instance for each shard on the source cluster.

重要

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.

To configure a single mongosync, follow the connection instructions for your cluster architecture to connect to the mongos instance in your cluster.

When you connect a single mongosync to a sharded cluster do not use the replicaSet option or the id option.

このページの残りの部分では、複数のmongosyncインスタンスを使用したクラスター間の同期について説明します。

mongosyncインスタンスの数は、ソースクラスター上のシャードの数と一致する必要があります。 すべての インスタンス間で同じバージョンのmongosyncを使用する必要があります。 レプリカセット ソースの場合、使用できるmongosyncインスタンスは 1 つだけです。

シャーディングされたクラスター間で同期するように複数のmongosyncインスタンスを構成する場合は、各mongosyncインスタンスに同一の API エンドポイント コマンドを送信する必要があります。

複数のmongosyncインスタンスを設定するには:

1

mongosync 1.1 以降では、シャードの数が異なるクラスター間で同期できます。 ただし、同期を元に戻す場合は、ソースクラスターと宛先クラスターは同じ数のシャードを持っている必要があります。

2

To get the shard IDs, connect to the source cluster mongos and run the listShards command.

db.adminCommand( { listShards: 1 } )

情報はshards配列にあります。

shards: [
{
_id: 'shard01',
host: 'shard01/localhost:27501,localhost:27502,localhost:27503',
state: 1,
topologyTime: Timestamp({ t: 1656612236, i: 2 })
},
{
_id: 'shard02',
host: 'shard02/localhost:27504,localhost:27505,localhost:27506',
state: 1,
topologyTime: Timestamp({ t: 1656612240, i: 4 })
}
]
3

これらの手順では、汎用の接続文字列を使用します。 クラスター アーキテクチャの接続文字列を変更するには、アーキテクチャ固有の接続の詳細を参照してください。

Tip

1 つのホストサーバーで複数のmongosyncインスタンスを実行できます。 パフォーマンスを向上させるには、複数のホストサーバーでmongosyncを実行します。

最初のmongosyncインスタンスを実行します。

mongosync \
--cluster0 "mongodb://user:password@cluster0host:27500" \
--cluster1 "mongodb://user:password@cluster1host:27500" \
--id shard01 --port 27601

複数のmongosyncインスタンスを実行する場合、インスタンスの数はシャードの数と等しくなっている必要があります。 複製するシャードを指定するには、各mongosyncインスタンスを--idオプションまたはid設定で起動する必要があります。

ソースクラスター内の各シャードに対して新しいmongosyncインスタンスを実行します。 --id--port追加のmongosync インスタンスごとに、 フィールドと フィールドを編集します。

mongosync \
--cluster0 "mongodb://user:password@cluster0host:27500" \
--cluster1 "mongodb://user:password@cluster1host:27500" \
--id shard02 --port 27602

--cluster0 } オプションと--cluster1オプションの接続文字列はmongosインスタンスを指す必要があります。 この例では、同じmongosインスタンスを使用しています。

mongosyncインスタンス:

  • ソースクラスター内のmongosインスタンスに接続します。

  • 宛先クラスターのmongosインスタンスに接続します。

  • --idオプションで識別されるソースクラスターから単一のシャードを複製します。

  • 同期中に使用する一意のポートを指定します。Mongosync 操作のスクリプトを簡素化するために、ポートの範囲を指定することを検討してください。

curlまたは別の HTTP クライアントを使用して、 mongosyncインスタンスの各に起動コマンドを発行します。

curl mongosync01Host:27601/api/v1/start -XPOST --data \
'{ "source": "cluster0", "destination": "cluster1", \
"reversible": false }'
curl mongosync02Host:27602/api/v1/start -XPOST --data \
'{ "source": "cluster0", "destination": "cluster1", \
"reversible": false }'

startコマンド オプションは、すべてのmongosyncインスタンスで同じである必要があります。

特定のシャードの同期の進行状況を確認するには、 curlまたは別の HTTP クライアントを使用して、そのシャードを同期しているmongosyncインスタンスに進行状況コマンドを発行します。

curl mongosync02Host:27602/api/v1/progress -XGET

このコマンドは、 mongosync02Hostで実行され、同期にport 27602を使用しているmongosyncインスタンスの進行状況を確認します。 他のシャードの進行状況を確認するには、ホストとポート番号を更新し、各mongosyncインスタンスに対して API 呼び出しを繰り返します。

pauseコマンドは、単一のシャード上の同期プロセスを一時的に停止します。 実行中の他のmongosyncインスタンスは一時停止されません。 curlまたは別の HTTP クライアントを使用して、 mongosyncインスタンスにpauseコマンドを発行します。

curl mongosync01Host:27601/api/v1/pause -XPOST --data '{}'

このコマンドは、 mongosync01Hostで実行され、同期にport 27601を使用しているmongosyncインスタンスを一時停止します。 他のシャードでの同期を一時停止するには、ホストとポート番号を更新し、各mongosyncインスタンスに対して API 呼び出しを繰り返します。

1 つ以上のmongosyncインスタンスが一時停止されている場合は、 resumeコマンドを使用して同期を再開できます。 一時停止した各mongosyncインスタンスに対して個別のresumeコマンドを実行し、同期を続行します。

curlまたは別の HTTP クライアントを使用して、各mongosyncインスタンスに再開コマンドを発行します。

curl mongosync01Host:27601/api/v1/resume -XPOST --data '{}'

このコマンドは、 mongosync01Hostで実行され、 port 27601を使用しているmongosyncインスタンスの同期を再開します。 他のシャードでの同期を再開するには、ホストとポート番号を更新し、各mongosyncインスタンスに対して API 呼び出しを繰り返します。

同期を完了する場合は、 gressコマンドを実行し、 canCommitlagTimeSecondsの値を確認します。

ソースクラスターでの書込みブロックを最小限に抑えるには、 LakeTimeSecondsの値がアプリケーションで十分に小さい場合にのみcommitコマンドを実行する必要があります。

lagTimeSecondsの値が十分に小さく、 canCommittrueである場合は、 commitコマンドを発行して同期をコミットします。 Repeat the process on all of the mongosync instances.

commit操作はブロックしています。 すべてのmongosyncインスタンスでcommitが呼び出されるまで、 commitコマンドは返されません。

// Check progress
curl mongosync01Host:27601/api/v1/progress -XGET
// Commit
curl mongosync01Host:27601/api/v1/commit -XPOST --data '{}'

これらのコマンドは、 mongosync01Hostで実行され、 port 27601を使用しているmongosyncインスタンスの進行状況をチェックし、同期をコミットします。 すべてのシャードを同期するには、実行中の他のmongosyncインスタンスでprogresscommitへの追加の呼び出しを行います。

アプリケーションの負荷をソースクラスターから宛先に転送する前に、データをチェックして、同期が成功していることを確認してください。

注意

mongosyncコミット中に canWrite: trueが停止した場合、/progress エンドポイントが を報告する前に、移行全体を再開して、確実に検証されるようにする必要があります。

詳細については、「データ転送を確認する 」を参照してください。

注意

同期方向の逆方向に関する詳細なチュートリアルについては、「 同期方向の逆 」を参照してください。

元の宛先クラスターがソースクラスターとして機能するように同期を逆にするには、以下の手順を行います。

  • まだ行っていない場合は、各mongosyncインスタンスにcommitコマンドを発行し、すべてのコミットが完了するまで待ちます。 同期プロセスがコミットされたかどうかを確認するには、すべてのmongosyncインスタンスに対してプログレスコマンドを発行し、各応答のstateフィールドに値COMMITTEDが含まれているかどうかを確認します。

  • mongosyncインスタンスに逆方向の コマンドを発行します。

reverse操作はブロックしています。 すべてのmongosyncインスタンスでreverseが呼び出されるまで、 reverseコマンドは返されません。

curl mongosync01Host:27601/api/v1/reverse -XPOST --data '{}'

このコマンドは、 mongosync01Hostで実行され、 port 27601を使用しているmongosyncインスタンスの同期を逆にします。 実行中の他のmongosyncインスタンスで、 reverseへの追加の呼び出しを行います。

注意

逆同期は、開始APImongosync を開始するときに reversibletrue に設定されている場合にのみ可能です。