カットオーバー プロセスの終了
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
であることを確認します。
データ転送を確認します。
ソースクラスターから宛先クラスターへのデータの同期が成功したことを確認します。
詳細については、「データ転送を確認する 」を参照してください。
宛先クラスターでアプリケーション書込みを有効にします。
書込みを有効にするには、 setUserWriteBlockMode
を更新します。
db.adminCommand( { setUserWriteBlockMode: 1, global: false } )
その後、アプリケーションワークロードを宛先クラスターに転送します。
動作
canWrite と Committed
mongosync
は、 COMMITTED
状態よりも前の段階で宛先クラスターへの書込みを許可します。
最初の同期では、 mongosync
はソースクラスター上の一意のインデックスを宛先クラスターの非一意のインデックスとして複製します。コミット中、宛先クラスター上の関連する非一意のインデックスはprepareUnique
に設定されます。これが完了すると、 /progress
エンドポイントはcanWrite:
true
を返し始める。 prepareUnique
インデックスを持つコレクションは、ユニークインデックス制約に違反する新しいドキュメントを拒否します。 mongosync
は 次に、 prepareUnique
インデックスを一意のインデックスに変換します。これが完了すると、 mongosync
は状態をCOMMITTED
に変わります。
注意
大規模なコレクションを同期する場合、 prepareUnique
インデックスから一意のインデックスへの変換はリソースを集中的に消費する可能性があります。これにより、 /progress
エンドポイントがcanWrite: true
を返してからmongosync
がCOMMITTED
状態に達するまでに長い時間がかかる可能性があります。