AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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

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

mongosync は、 COMPUTED 状態に達するまでアクティブなままである必要があります。これにより、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"
},
"source":
{
"pingLatencyMs":250
},
"destination":
{
"pingLatencyMs":-1
},
"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 はソースへの書込みをブロックします。

  • If you start mongosync with enableUserWriteBlocking set to "none", ensure that you disable writes. For example, run the setUserWriteBlockMode command on the source cluster:

    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であることを確認します。

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

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

If you previously set enableUserWriteBlocking to sourceAndDestination and mongosync crashes during this step, you must manually unblock writes on the source cluster by using setUserWriteBlockMode.

4

progress エンドポイントとなる接続されたデバイスを呼び出して、canWritetrue であるかどうかを確認します。canWritefalse の場合は、progresscanWritetrue であることを示すまで待ちます。複数の mongosync インスタンス を実行中いる場合は、最初の mongosync プロセスで canWrite が true であることのみを確認してください。後続の mongosync プロセスの canWrite ステータスが無効です。

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

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

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

6

To enable writes, update 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 状態よりも前の段階で宛先クラスターへの書込みを許可します。

enableUserWriteBlocking"sourceAndDestination" または "destinationOnly" のいずれかに設定しているか、検証子がオンになっている場合、/progresscanWrite: true を報告した後に宛先への書き込みが可能です。それ以外の場合は、状態が COMMITTED になるまで待ちます。mongosync の複数のインスタンスを実行中いる場合は、最初の mongosync プロセスの canWrite ステータスのみを使用します。

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

注意

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

アプリケーションは canWrite: true が返された後に書き込みを発行できますが、インデックスのビルドなどの排他ロックを必要とする操作は、インデックスの変換が完了した後にのみ続行できます。さらに、リソースの競合により、この時間中に書込み (write) 操作のレイテンシが増加する可能性があります。

このページを評価

項目一覧