シャーディングされたクラスターの同期
項目一覧
のシャーディングされたクラスターを同期するには、2 つの方法があります。 mongosync
または複数のmongosync
インスタンスを使用できます。 大規模な、または負荷が高いクラスターで最高のパフォーマンスを得るには、ソースクラスター上の各シャードに対して 1 つのmongosync
インスタンスを使用します。
重要
ソースクラスターまたは宛先クラスターがシャーディングされたクラスターである場合は、両方のクラスターのバランサーを停止し、移行期間全体でmoveChunk
} コマンドまたはmoveRange
コマンドを実行しないでください。 バランサーを停止するには、 balancerStop
コマンドを実行し、コマンドが完了するまで待ちます。
単一の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
オプションで識別されるソースクラスターから単一のシャードを複製します。同期中に使用する一意のポートを指定します。 Cluster-to-Cluster Sync 操作のスクリプトを簡素化するために、ポートの範囲の指定を検討してください。
複数のmongosync
インスタンスの開始
curl
または別の HTTP クライアントを使用して、 mongosync
インスタンスの各に起動コマンドを発行します。
curl mongosync01Host:27601/api/v1/start -XPOST --data \ '{ "source": "cluster0", "destination": "cluster1", \ "reversible": false, "enableUserWriteBlocking": false }' curl mongosync02Host:27602/api/v1/start -XPOST --data \ '{ "source": "cluster0", "destination": "cluster1", \ "reversible": false, "enableUserWriteBlocking": false }'
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
の両方がtrue
に設定されている場合にのみ可能です。