Docs Menu

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

項目一覧

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

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

注意

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

1

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

  • canCommittrueです。

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

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

  • verification.source埋め込み検証子を使用する場合は、verification.destination と が返すドキュメントの両方を確認します。両方のドキュメントの lagTimeSeconds フィールドは 0 に近く、phase フィールドには "stream hashing" が表示される必要があります。

    検証子がストリーム ハッシュ フェーズにない場合、カットオーバー プロセスに長い時間がかかる可能性があります。

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

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"
},
"verification":
{
"source":
{
"estimatedDocumentCount": 42,
"hashedDocumentCount": 42,
"lagTimeSeconds": 2,
"totalCollectionCount": 42,
"scannedCollectionCount": 10,
"phase": "stream hashing"
},
"destination": {
"estimatedDocumentCount": 42,
"hashedDocumentCount": 42,
"lagTimeSeconds": 2,
"totalCollectionCount": 42,
"scannedCollectionCount": 10,
"phase": "stream hashing"
}
}
},
"success": true
}
2
  • ソースクラスター上のすべてのトランザクションがコミットまたは中止されるまで待機します。

  • mongosync では、宛先のみの書込みブロックがデフォルトで有効になります。これを明示的に有効にするには、enableUserWriteBlocking"destinationOnly" に設定して mongosync を起動します。mongosync は宛先への書込みのブロックのみを行い、canWritetrue に設定される 直前 にブロックを解除します。

  • enableUserWriteBlocking"sourceAndDestination" に設定して mongosync を起動すると、mongosync は宛先クラスターのすべての書込み操作のブロックを解除し、canWritetrue に設定される直前にブロックを解除します。 /commit を呼び出した後、mongosync はソースへの書込みをブロックします。

  • enableUserWriteBlocking"none" に設定して 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であることを確認します。

このステップが完了すると、mongosync はソースクラスターへの書込みをブロックします。

ソースクラスターに永続クエリ設定(PQS)が含まれている場合は、PQS を宛先クラスターに手動で移行する必要があります。

以前に enableUserWriteBlockingtrue に設定した場合、この手順が完了すると、mongosync はソースクラスターへの書込みをブロックします。

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
}
)

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

mongosyncenableUserWriteBlocking/start エンドポイントで オプションを使用して書込みブロックで を起動した場合は、この手順を完了する必要はありません。

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 状態に達するまでに長い時間がかかる可能性があります。

項目一覧