のシャーディングされたクラスターを同期するには、2 つの方法があります。 mongosyncまたは複数のmongosyncインスタンスを使用できます。 大規模な、または負荷が高いクラスターで最高のパフォーマンスを得るには、ソースクラスター上の各シャードに対して 1 つのmongosyncインスタンスを使用します。
重要
シャーディングされた宛先クラスターのバランサーは、常に balancerStop を使用して無効にする必要があります。バランサーを停止した後、15 分間待ってから mongosync を起動します。これにより、進行中の チャンク移行 を完了するためのクラスター時間が得られます。
ソースクラスターまたは宛先クラスターがシャーディングされたクラスターで、かつmongosync 名前空間フィルタリングbalancerStop 15で を実行中いない場合は、 コマンドを実行中、コマンドが完了するまで 分間待機して、ソースクラスターのバランサーを無効にする必要があります。 。
ソースクラスターまたは宛先クラスターがシャーディングされたクラスターで、名前空間フィルタリングを使用して mongosync を実行中いる場合は、ソースクラスターのバランサーをグローバルに有効にできますが、名前空間フィルター内のすべてのコレクションに対して無効にする必要があります。「 フィルタリングされた同期でコレクションのバランサーを無効にする 」を参照してください。ソースクラスターのバランサーを完全に無効にすることもできます。
移行中は、moveChunk または moveRange コマンドを実行しないでください。ソースクラスターのバランサーを有効にしているが、名前空間フィルター内のコレクションに対して無効にした場合は、名前空間フィルター内のコレクションに対して を実行 しないでくださいshardCollection 。移行中に名前空間フィルター内のコレクションに対して shardCollection を実行すると、mongosync はエラーを返して停止します。その場合、移行を最初から開始する必要があります。
単一のmongosync インスタンスを構成する
単一のmongosyncを構成するには、クラスター アーキテクチャの接続手順に従って、クラスター内のmongosインスタンスに接続します。
単一のmongosyncをシャーディングされたクラスターに接続する場合は、 replicaSetオプションまたはidオプションを使用しないでください。
このページの残りの部分では、複数のmongosyncインスタンスを使用したクラスター間の同期について説明します。
複数の インスタンスを設定するmongosync
mongosyncインスタンスの数は、ソースクラスター上のシャードの数と一致する必要があります。 すべての インスタンス間で同じバージョンのmongosyncを使用する必要があります。 レプリカセット ソースの場合、使用できるmongosyncインスタンスは 1 つだけです。
シャーディングされたクラスター間で同期するように複数のmongosyncインスタンスを構成する場合は、各mongosyncインスタンスに同一の API エンドポイント コマンドを送信する必要があります。
複数のmongosyncインスタンスを設定するには:
シャード ID の決定
シャード ID を取得するには、ソースクラスターmongosに接続し、 listShardsコマンドを実行します。
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 }) } ]
インスタンスを接続するmongosync
これらの手順では、汎用の接続文字列を使用します。 クラスター アーキテクチャの接続文字列を変更するには、アーキテクチャ固有の接続の詳細を参照してください。
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 操作のスクリプトを簡素化するために、ポートの範囲を指定することを検討してください。
複数のmongosync インスタンスの開始
curlまたは別の HTTP クライアントを使用して、 mongosyncインスタンスの各に起動コマンドを発行します。
curl mongosync01Host:27601/api/v1/start -XPOST --data \ '{ "source": "cluster0", "destination": "cluster1", \ "reversible": false, "enableUserWriteBlocking": "none" }' curl mongosync02Host:27602/api/v1/start -XPOST --data \ '{ "source": "cluster0", "destination": "cluster1", \ "reversible": false, "enableUserWriteBlocking": "none" }'
startコマンド オプションは、すべてのmongosyncインスタンスで同じである必要があります。
進行状況の確認
特定のシャードの同期の進行状況を確認するには、 curlまたは別の HTTP クライアントを使用して、そのシャードを同期しているmongosyncインスタンスに進行状況コマンドを発行します。
curl mongosync02Host:27602/api/v1/progress -XGET
このコマンドは、 mongosync02Hostで実行され、同期にport 27602を使用しているmongosyncインスタンスの進行状況を確認します。 他のシャードの進行状況を確認するには、ホストとポート番号を更新し、各mongosyncインスタンスに対して API 呼び出しを繰り返します。
mongosyncインスタンスの一時停止
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 呼び出しを繰り返します。
複数の インスタンスからの同期をコミットmongosync
同期を完了する場合は、 gressコマンドを実行し、 canCommitとlagTimeSecondsの値を確認します。
ソースクラスターでの書込みブロックを最小限に抑えるには、 LakeTimeSecondsの値がアプリケーションで十分に小さい場合にのみcommitコマンドを実行する必要があります。
lagTimeSecondsの値が十分に小さく、 canCommitがtrueである場合は、 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インスタンスでprogressとcommitへの追加の呼び出しを行います。
データ検証
アプリケーションの負荷をソースクラスターから宛先に転送する前に、データをチェックして、同期が成功していることを確認してください。
詳細については、「データ転送を確認する 」を参照してください。
同期方向の逆
注意
同期方向の逆方向に関する詳細なチュートリアルについては、「 同期方向の逆 」を参照してください。
元の宛先クラスターがソースクラスターとして機能するように同期を逆にするには、以下の手順を行います。
まだ行っていない場合は、各
mongosyncインスタンスにcommitコマンドを発行し、すべてのコミットが完了するまで待ちます。 同期プロセスがコミットされたかどうかを確認するには、すべてのmongosyncインスタンスに対してプログレスコマンドを発行し、各応答のstateフィールドに値COMMITTEDが含まれているかどうかを確認します。各
mongosyncインスタンスに逆方向の コマンドを発行します。
reverse操作はブロックしています。 すべてのmongosyncインスタンスでreverseが呼び出されるまで、 reverseコマンドは返されません。
curl mongosync01Host:27601/api/v1/reverse -XPOST --data '{}'
このコマンドは、 mongosync01Hostで実行され、 port
27601を使用しているmongosyncインスタンスの同期を逆にします。 実行中の他のmongosyncインスタンスで、 reverseへの追加の呼び出しを行います。
注意
逆同期は、開始 APIがmongosyncを開始するときに、 reversibleとenableUserWriteBlockingの両方が"sourceAndDestination"に設定されている場合にのみ可能です。