カットオーバー プロセスの終了
mongosyncカットオーバー プロセスを使用して、移行を完了し、アプリケーション ワークロードをソース クラスターから宛先クラスターに転送できます。
mongosync
は、COMMITTED 状態に達するまでアクティブのままである必要があります。これにより、mongosync
は移行中に発生する追加の書込みを同期できるようになります。
注意
アプリケーションのワークロードを宛先クラスターに切り替える前に、常に同期が成功していることを確認する必要があります。 詳細については、「 データ転送を確認する 」を参照してください。
手順
mongosync のステータスを確認します。
カットオーバー プロセスを開始する前に、プログレスエンドポイントを呼び出して、 mongosync
のステータスを判断します。 mongosync
プロセス ステータスが次の値を示していることを確認します。
canCommit
はtrue
です。lagTimeSeconds
は小さいです(0
に近い)。カットオーバーの開始時に
lagTimeSeconds
が0
に近くない場合、カットオーバーに長い時間がかかる可能性があります。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 }
ソース上の同期されたコレクションへの書込み操作を停止します。
ソースクラスター上のすべてのトランザクションがコミットまたは中止されるまで待機します。
mongosync
では、宛先のみの書込みブロックがデフォルトで有効になります。これを明示的に有効にするには、enableUserWriteBlocking
を"destinationOnly"
に設定してmongosync
を起動します。mongosync
は宛先への書込みのブロックのみを行い、canWrite
がtrue
に設定される 直前 にブロックを解除します。enableUserWriteBlocking
を"sourceAndDestination"
に設定してmongosync
を起動すると、mongosync
は宛先クラスターのすべての書込み操作のブロックを解除し、canWrite
がtrue
に設定される直前にブロックを解除します。/commit
を呼び出した後、mongosync
はソースへの書込みをブロックします。enableUserWriteBlocking
を"none"
に設定してmongosync
を起動する場合は、書込みが無効になっていることを確認します。例、ソースクラスターでsetUserWriteBlockMode
コマンドを実行します。db.adminCommand( { setUserWriteBlockMode: 1, global: true } ) mongosync
がフィルタリングされた同期を使用する場合、ソースクラスター全体への書込みを無効にする必要はありません。 ただし、フィルターに含まれるコレクションの書込み (write) 操作は、必ず停止する必要があります。
に commit mongosync
リクエストを送信します。
移行のために複数の mongosync
インスタンスを起動する場合は、mongosync
インスタンスごとにコミットリクエストを発行する必要があります。
リクエスト
curl localhost:27182/api/v1/commit -XPOST --data '{ }'
応答
{"success":true}
注意
commit
リクエストを送信した後、 progress
エンドポイントを呼び出して、 mongosync
の状態がCOMMITTING
またはCOMMITTED
であることを確認します。
このステップが完了すると、mongosync
はソースクラスターへの書込みをブロックします。
ソースクラスターに永続クエリ設定(PQS)が含まれている場合は、PQS を宛先クラスターに手動で移行する必要があります。
以前に enableUserWriteBlocking
を true
に設定した場合、この手順が完了すると、mongosync
はソースクラスターへの書込みをブロックします。
データ転送を確認します。
ソースクラスターから宛先クラスターへのデータの同期が成功したことを確認します。
詳細については、「データ転送を確認する 」を参照してください。
setUserWriteBlockMode
を使用して宛先クラスターでの書込みを手動でブロックした場合は、宛先クラスターでアプリケーション書込みを有効にします。
書込みを有効にするには、 setUserWriteBlockMode
を更新します。
db.adminCommand( { setUserWriteBlockMode: 1, global: false } )
その後、アプリケーションワークロードを宛先クラスターに転送します。
mongosync
enableUserWriteBlocking
/start エンドポイントで オプションを使用して書込みブロックで を起動した場合は、この手順を完了する必要はありません。
動作
canWrite と Committed
mongosync
は、COMMITTED
状態よりも前の段階で宛先クラスターへの書込みを許可します。
最初の同期では、mongosync
はソースクラスター上の一意のインデックスを宛先クラスターの非一意のインデックスとして複製します。コミット中、宛先クラスター上の関連する非一意のインデックスは prepareUnique
に設定されます。これが完了すると、/progress
エンドポイントは canWrite:
true
を返し始める。prepareUnique
インデックスを持つコレクションは、ユニークインデックス制約に違反する新しいドキュメントを拒否します。mongosync
は 次に、prepareUnique
インデックスを一意のインデックスに変換します。これが完了すると、mongosync
は状態を COMMITTED
に変わります。
注意
大規模なコレクションを同期する場合、prepareUnique
インデックスから一意のインデックスへの変換はリソースを集中的に消費する可能性があります。これにより、/progress
エンドポイントが canWrite: true
を返してから mongosync
が COMMITTED
状態に達するまでに長い時間がかかる可能性があります。