mongosyncカットオーバー プロセスを使用して、移行を完了し、ソースクラスターから宛先クラスターにアプリケーション ワークロードを転送できます。
mongosync は、 COMPUTED 状態に達するまでアクティブなままである必要があります。これにより、mongosync は移行中に発生する追加の書込みを同期できるようになります。
注意
アプリケーションのワークロードを宛先クラスターに切り替える前に、常に同期が成功していることを確認する必要があります。 詳細については、「 データ転送を確認する 」を参照してください。
手順
mongosync のステータスを確認します。
カットオーバー プロセスを開始する前に、プログレスエンドポイントを呼び出して、 mongosyncのステータスを判断します。 mongosyncプロセス ステータスが次の値を示していることを確認します。
canCommitはtrueです。lagTimeSecondsは小さい値(0に近い値)です。カットオーバーの開始時に
lagTimeSecondsが0に近くない場合、カットオーバーに長い時間がかかる可能性があります。
次の例では、同期プロセスのステータスを返します。
リクエスト
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 }
ソース上の同期されたコレクションへの書込み操作を停止します。
ソースクラスター上のすべてのトランザクションがコミットまたは中止されるまで待機します。
enableUserWriteBlockingをtrueに設定してmongosyncを起動すると、mongosyncはコミット中にソースクラスター全体のすべての書込み操作をブロックします(ステップ 4)。enableUserWriteBlockingで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 } )
その後、アプリケーションワークロードを宛先クラスターに転送します。
mongosyncenableUserWriteBlocking/start エンドポイントで オプションを使用して書込みブロックで を起動した場合は、この手順を完了する必要はありません。
動作
canWrite と Committed
mongosync は、COMMITTED 状態よりも前の段階で宛先クラスターへの書込みを許可します。
最初の同期では、mongosync はソースクラスター上の一意のインデックスを宛先クラスターの非一意のインデックスとして複製します。コミット中、宛先クラスター上の関連する非一意のインデックスは prepareUnique に設定されます。これが完了すると、/progress エンドポイントは canWrite:
true を返し始める。prepareUnique インデックスを持つコレクションは、ユニークインデックス制約に違反する新しいドキュメントを拒否します。mongosync は 次に、prepareUnique インデックスを一意のインデックスに変換します。これが完了すると、mongosync は状態を COMMITTED に変わります。
注意
大規模なコレクションを同期する場合、prepareUnique インデックスから一意のインデックスへの変換はリソースを集中的に消費する可能性があります。これにより、/progress エンドポイントが canWrite: true を返してから mongosync が COMMITTED 状態に達するまでに長い時間がかかる可能性があります。