Docs Menu
Docs Home
/
MongoDB Cluster-to-Cluster Sync
/

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

項目一覧

  • 単一の mongosyncインスタンスを構成する
  • 複数のmongosyncインスタンスを設定する
  • 複数のmongosyncインスタンスの開始
  • 進行状況の確認
  • mongosyncインスタンスの一時停止
  • 同期の再開
  • 複数のmongosyncインスタンスからの同期をコミット
  • データ検証
  • 同期方向の逆

のシャーディングされたクラスターを同期するには、2 つの方法があります。 mongosyncまたは複数のmongosyncインスタンスを使用できます。 大規模な、または負荷が高いクラスターで最高のパフォーマンスを得るには、ソースクラスター上の各シャードに対して 1 つのmongosyncインスタンスを使用します。

重要

ソースクラスターまたは宛先クラスターがシャーディングされたクラスターである場合は、両方のクラスターのバランサーを停止し、移行期間全体でmoveChunk } コマンドまたはmoveRangeコマンドを実行しないでください。 バランサーを停止するには、 balancerStopコマンドを実行し、コマンドが完了するまで待ちます。

単一のmongosyncを構成するには、クラスター アーキテクチャの接続手順に従って、クラスター内のmongosインスタンスに接続します。

単一のmongosyncをシャーディングされたクラスターに接続する場合は、 replicaSetオプションまたはidオプションを使用しないでください。

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

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

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

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

  1. クラスター構成を確認します

  2. シャード ID の決定

  3. インスタンスを接続する

1

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

2

シャード 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 })
}
]
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オプションで識別されるソースクラスターから単一のシャードを複製します。

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

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 呼び出しを繰り返します。

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

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

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

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

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

注意

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

戻る

シャーディングされたクラスターへのレプリカセットの同期