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

カットオーバー プロセスの終了

項目一覧

  • 手順
  • 動作
  • 詳細

mongosyncカットオーバー プロセスを使用して、移行を完了し、ソースクラスターから宛先クラスターにアプリケーション ワークロードを転送できます。

mongosync は、 COMPUTED状態に達するまでアクティブなままである必要があります。これにより、 mongosyncは移行中に発生する追加の書込みを同期できるようになります。

注意

アプリケーションのワークロードを宛先クラスターに切り替える前に、常に同期が成功していることを確認する必要があります。詳細については、「データ転送を確認する 」を参照してください。

1

カットオーバー プロセスを開始する前に、プログレスエンドポイントを呼び出して、 mongosyncのステータスを判断します。 mongosyncプロセス ステータスが次の値を示していることを確認します。

  • canCommittrue です。

  • lagTimeSeconds は小さい値( 0に近い値)です。

    カットオーバーの開始時にlagTimeSeconds0に近くない場合、カットオーバーに長い時間がかかる可能性があります。

次の例では、同期プロセスのステータスを返します。

curl localhost:27182/api/v1/progress -XGET
{
"progress":
{
"state":"RUNNING",
"canCommit":true,
"canWrite":false,
"info":"change event application",
"lagTimeSeconds":0,
"collectionCopy":
{
"estimatedTotalBytes":694,
"estimatedCopiedBytes":694
},
"directionMapping":
{
"Source":"cluster0: localhost:27017",
"Destination":"cluster1: localhost:27018"
}
},
"success": true
}
2
  • enableUserWriteBlockingtrueに設定してmongosyncを起動した場合、 mongosyncはコミット中にソースクラスター全体のすべての書込み操作をブロックします(ステップ4 )。

  • enableUserWriteBlockingを使用してmongosyncを起動しなかった場合は、書込みが無効になっていることを確認してください。 たとえば、ソースクラスターで setUserWriteBlockModeコマンドを実行します。

    db.adminCommand( {
    setUserWriteBlockMode: 1,
    global: true
    } )
  • mongosyncがフィルタリングされた同期を使用する場合、ソースクラスター全体への書込みを無効にする必要はありません。 ただし、フィルターによって含まれるコレクションの書込み (write) 操作が停止していることを確認する必要があります。

3

移行用に複数のmongosyncインスタンスを起動した場合は、 mongosyncインスタンスごとにコミット リクエストを発行する必要があります。

curl localhost:27182/api/v1/commit -XPOST --data '{ }'
{"success":true}

注意

commitリクエストを送信した後、 progressエンドポイントを呼び出して、 mongosyncの状態がCOMMITTINGまたはCOMMITTEDであることを確認します。

4

progressエンドポイントを呼び出して、 canWritetrueであるかどうかを確認します。 canWritefalseの場合は、 progresscanWritetrueであることを示すまで待ちます。

curl -sS localhost:27182/api/v1/progress -XGET | jq ".progress.canWrite"
true
5

ソースクラスターから宛先クラスターへのデータの同期が成功したことを確認します。

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

6

書込みを有効にするには、 setUserWriteBlockModeを更新します。

db.adminCommand(
{
setUserWriteBlockMode: 1,
global: false
}
)

その後、アプリケーションワークロードを宛先クラスターに転送します。

7

mongosync進行状況応答がmongosync状態がCOMMITTEDであることを示している場合、カットオーバー プロセスは完了します。

curl -sS localhost:27182/api/v1/progress -XGET | jq ".progress.state"
"COMMITTED"

mongosync は、 COMMITTED状態よりも前の段階で宛先クラスターへの書込みを許可します。

最初の同期では、 mongosyncはソースクラスター上の一意のインデックスを宛先クラスターの非一意のインデックスとして複製します。コミット中、宛先クラスター上の関連する非一意のインデックスはprepareUniqueに設定されます。これが完了すると、 /progressエンドポイントはcanWrite: trueを返し始める。 prepareUniqueインデックスを持つコレクションは、ユニークインデックス制約に違反する新しいドキュメントを拒否します。 mongosyncは 次に、 prepareUniqueインデックスを一意のインデックスに変換します。これが完了すると、 mongosyncは状態をCOMMITTEDに変わります。

注意

大規模なコレクションを同期する場合、 prepareUniqueインデックスから一意のインデックスへの変換はリソースを集中的に消費する可能性があります。これにより、 /progressエンドポイントがcanWrite: trueを返してからmongosyncCOMMITTED状態に達するまでに長い時間がかかる可能性があります。

戻る

oplog のサイジング

項目一覧