Docs Menu
Docs Home
/
MongoDB Cluster-to-Cluster Sync
/ /

reverse

コミットされた同期操作の方向を逆にします。

以下に例を挙げます。

  • COMMITTED同期操作があります。

  • cluster0 がソースで、 cluster1が宛先です。

  • 同期操作がCOMMITTED後、新しい書込み (write) は宛先クラスターでのみ発生します。 ソースクラスターは新しい書込み (write) を受け入れません。

このシナリオでは、 reverseエンドポイントを使用して、 cluster1からcluster0への書込み(write)を同期できます。これには、 mongosynccanWrite=trueに達した後にcluster1で発生した書込みも含まれます。 同期中にcanWriteステータスを確認するには、 /progressエンドポイントを使用します。

reverseエンドポイントの使用に関する詳細とチュートリアルについては、「 逆同期方向 」を参照してください。

reverseエンドポイントを使用するには:

  • mongosync 最初の同期を開始するときに構成する必要があります。 /start API エンドポイントの呼び出しでは、以下を設定する必要があります。

    • reversible 次の行動をします: true

    • enableUserWriteBlocking "sourceAndDestination" に設定されている場合にのみ使用できます。

注意

二重書込みブロックは reverseを実行中ための前提条件です。

同期の開始後に、これらのオプションを更新することはできません。

  • mongosyncCOMMITTED状態である必要があります。

  • 宛先クラスターの oplog は、 mongosynccanWrite=trueに達してから/reverseリクエストの受信までの間、ロールオーバーされないようにする必要があります。

警告

ソースクラスター上のユニークインデックスでは、レガシー形式を使用してはなりません。

ソースクラスターのコレクションインデックスが適切な形式を使用していることを検証するには、「 一意なインデックスの検証 」を参照してください。

  • ソースクラスターと宛先クラスターは同じ数のシャードを持つ必要があります。 クラスターのトポロジーまたはメジャー バージョンが異なる場合、逆同期はできません。

  • mongosync接続文字列で指定されたユーザーには、ソースクラスターと宛先クラスターで必要な権限が必要です。 権限は、書込みブロック設定を変更するか、逆同期を使用するかによって、環境によって異なります。

注意

シャーディングされたクラスター間で同期するように複数のmongosyncインスタンスを構成する場合は、各mongosyncインスタンスに同一の API エンドポイント コマンドを送信する必要があります。

詳細については、「複数の Mongosync を元に戻す 」を参照してください。

方向を逆にするには、mongosync ではソースクラスター上のすべての一意のインデックス(_id を除く)にレガシーユニークインデックスキーが ない 必要があります。

集計ステージを使用すると、ソースクラスター上で _id$collStats以外の一意のインデックスが正しい形式で使用されるようにします。コレクションでこの集計パイプラインを実行するには、例コードをコピーして貼り付け、<collection> をコレクション名に、 をインデックスフィールドの名前に置き換えます。一意なインデックスを持つすべてのコレクションの、すべてのノードでこれを実行する必要があります。非<field_name>_id 一意なインデックスのみにformatVersion13 または が必要であることに注意してください。14

db.<collection>.aggregate( [
{ $collStats: { storageStats: { } } },
{ $project: { "storageStats.indexDetails.<field_name>.metadata.formatVersion": 1 } }
] )
[
{
storageStats: {
indexDetails: { <field_name>: { metadata: { formatVersion: 14 } } }
}
}
]

formatVersion 13 または 14 を持つ一意のインデックスには、レガシーキーがないことが保証されます。

異なる形式Versionの一意のインデックスがある場合は、db.collection.validate()full = false メソッドを使用して、レガシーインデックスキーがあるかどうかを確認することもできます。これは、一意なインデックスを持つすべてのコレクションのすべてのノードで実行する必要があります。validate() は、レガシー形式のインデックスキーが検出された場合に警告を返します。

mongosyncとの互換性があるインデックスの形式バージョンを更新するには、 元のソースクラスター内のすべてのノードを再同期する必要があります。すべてのノードを再同期するには:

1

ノードの再同期のチュートリアルについては、「レプリカセットのノードの再同期 」を参照してください。

2
3
POST /api/v1/reverse

このエンドポイントは、HTTP リクエスト本体のパラメータを使用しません。 ただし、空のオブジェクト{ }を使用して--dataオプションを指定する必要があります。

フィールド
タイプ
説明

success

ブール値

リクエストが成功した場合、この値はtrueになります。

error

string

エラーが発生した場合、 はエラーの名前を示します。 このフィールドは、 successtrueの場合、応答から省略されます。

errorDescription

string

発生したエラーの詳細な説明。 このフィールドは、 successtrueの場合、応答から省略されます。

次の例では、コミットされた同期操作の方向を逆にします。

curl localhost:27182/api/v1/reverse -XPOST --data '{ }'
{"success":true}

reverse エンドポイントにより REVERSING 状態が開始されます。 mongosync はソースクラスターと宛先クラスターをスワップし、変更イベントの適用を再開します。

reverseの同期が成功すると、 mongosyncRUNNING状態になります。 同期は、元の同期ジョブとは逆方向に続行されます。 元のデータをコピーするために、同期プロセス全体を再起動する必要はありません。

ソースクラスターと宛先クラスターの同期のマッピング方向を表示するには、進行状況エンドポイントを使用し、 directionMappingオブジェクトを確認します。

レプリカセットの移行に対して埋め込み検証子はデフォルトで有効になっています。

mongosync は、 reverseエンドポイントを保護しません。 ただし、デフォルトでは、API は localhost のみにバインドされ、他のソースからの呼び出しは受け入れません。 さらに、 reverse呼び出しでは接続認証情報やユーザー データは公開されません。

reverse エンドポイントは次のサポートをサポートしていません。

戻る

コミット

項目一覧