説明
ソースクラスターと宛先クラスター間の同期を終了します。
詳細については、「カットオーバー プロセスの終了 」を参照してください。
要件
commitエンドポイントを使用する前に
警告
移行 をコミットする前に書込みを確実に停止するには、以下の手順を実行する必要があります。
"majority"移行を通じてソースクラスター上の同期されたコレクションに書き込まれるすべてのアプリケーション書き込みに 書込み保証 (write concern)を使用します。同期されたコレクションへのすべての書き込みを正常にシャットダウンします。
それ以外の場合、カットオーバーが開始された後に書込み (write) を適用できます。
カットオーバーの進行中に書込み (write) が適用されると、
mongosyncは書込みを検出します。移行は永続的に失敗するため、再度実行する必要があります。カットオーバーが完了した後に書込み (write) が適用された場合、
mongosyncはそれらを検出しません。これらの書込み (write) は失われ、移行によって暗黙的にデータが破損します。
コミット中も、ソースクラスターから読み取ることができます。
進行状況エンドポイントを使用して、次の値を確認します。
lag.overallLagSeconds0に近い (推奨)注意
lag.overallLagSeconds
lag.overallLagSeconds最後に適用されたイベントと現在の最新イベントの時間の間の時間を示します。commitリクエストを送信すると、mongosyncはlag.overallLagSecondsによって報告された秒数だけCOMMITTING状態になり、その後COMMITTED状態に移行します。lag.overallLagSecondsが0の場合、ソースクラスターと宛先クラスターは一貫した状態になります。lagフィールドの詳細については、progressを参照してください。verification.source.lagTimeSecondsおよびverification.destination.lagTimeSecondsは0の近くにあります (推奨)state: "RUNNING"canCommit: trueバージョン1.21での変更:
canCommitmongosyncの場合、または組み込みのベリファイアが 30 秒を超える遅延を報告した場合、falseとなります。canCommitがfalseの場合に/commitを呼び出すと、エラーが返されます。
注意
シャーディングされたクラスター間で同期するように複数のmongosyncインスタンスを構成する場合は、各mongosyncインスタンスに同一の API エンドポイント コマンドを送信する必要があります。
リクエスト
POST /api/v1/commit リクエスト ボディ パラメータ
このエンドポイントは、HTTP リクエスト本体のパラメータを使用しません。 ただし、空のオブジェクト{ }を使用して--dataオプションを指定する必要があります。
応答
フィールド | タイプ | 説明 |
|---|---|---|
| ブール値 | リクエストが成功した場合、この値は |
| string | エラーが発生した場合、 はエラーの名前を示します。 このフィールドは、 |
| string | 発生したエラーの詳細な説明。 このフィールドは、 |
例
次の例では、宛先クラスターに同期操作をコミットします。
同期の準備ができていることを確認する
commitエンドポイントにリクエストを送信する前に、進行状況エンドポイントを使用して同期をコミットする準備ができていることを確認します。
リクエスト
curl localhost:27182/api/v1/progress -XGET応答
{ "progress": { "state":"RUNNING", "canCommit":true, "canWrite":false, "info":"change event application", "ceaStage":"steady state", "lag": { "overallLagSeconds": 0, "crudLagSeconds": 0, "ddlLagSeconds": null }, "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}progressエンドポイントは"canCommit":trueを返しました。つまり、 commitリクエストは正常に実行できます。
コミット リクエストの送信
次のコマンドは、 commitエンドポイントに リクエストを送信します。
リクエスト
curl localhost:27182/api/v1/commit -XPOST --data '{ }'応答
{"success":true}動作
状態
commitリクエストが成功すると、mongosync は COMMITTED 状態になります。mongosync が COMMITTED 状態になると、クラスター間のデータ移行が停止します。
データ検証
アプリケーションの負荷をソースクラスターから宛先に転送する前に、データをチェックして、同期が成功していることを確認してください。
詳細については、「データ転送を確認する 」を参照してください。
インデックス構築
/startを呼び出すときに buildIndexes を "afterDataCopy" または "excludeHashedAfterCopy" に設定すると、宛先クラスターにすべてのソース インデックスが構築されるまで、mongosync は commit リクエストをブロックします。
コレクションの特性変更
commit 同期中にmongosyncが一時的に変更したコレクションの特性を復元します。
次の表は、同期プロセス中にmongosyncが変更するコレクション特性へのcommitの影響を示しています。
コレクションの特性 | 影響 commit |
|---|---|
Unique Indexes |
|
TTL Indexes |
|
Hidden Indexes |
|
書き込みブロッキング | デフォルトでは、同期中に宛先クラスターで
|
上限付きコレクション |
|
エンドポイント保護
mongosync は、 commitエンドポイントを保護しません。 ただし、デフォルトでは、API は localhost のみにバインドされ、他のソースからの呼び出しは受け入れません。 さらに、 commit呼び出しでは接続認証情報やユーザー データは公開されません。