ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs Menu

start

ソースクラスターと宛先クラスター間の同期を開始します。

startエンドポイントを使用するには、 mongosyncIDLE状態である必要があります。

mongosync 接続stringで指定されたユーザーには、ソースクラスターと宛先クラスターで必要な権限が必要です。 「ユーザー権限」を参照して、ユーザーが同期を開始するための適切な権限を持っていることを確認します。

mongosyncを起動するときに、 cluster0またはcluster1設定の接続文字列で構成済みのmongosyncユーザーを使用していることを確認します。

注意

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

詳しくは、「複数の Mongosync を開始する 」を参照してください。

POST /api/v1/start
Parameter
タイプ
必要性
説明

source

string

必須

ソースクラスターの名前。

destination

string

必須

宛先クラスターの名前。

buildIndexes

string

任意

同期中のインデックスビルドを構成します。

サポートされているオプション:

  • beforeDataCopy (デフォルト)では、 mongosyncは宛先クラスターにインデックスを構築します。 これらには、既存のインデックスと、ソースクラスターで移行中に作成されたインデックスの両方が含まれます。

  • never により、同期中に mongosync が不要なインデックスのビルドをスキップするようになります。 これにより、特にインデックス負荷の高いワークロードにおいて、移行のパフォーマンスが向上します。

    検証を有効にして同期を開始し、buildIndexesnever に設定している場合、mongosync がソースクラスターで TTLコレクションを見つけると、移行は失敗します。 これは、/start エンドポイントを呼び出した後に発生する可能性があり、移行の進行中にユーザーがソースクラスターに TTLインデックスを作成する場合などです。

    宛先クラスターでインデックスを構築せずに TTL コレクションを同期するには、 検証子を無効にして同期を開始する必要があります。

    警告: mongosyncが移行を実行している間は、インデックスを手動でビルドしないでください。 移行が完全にコミットされるまで待ちます。

    ビルドが構築するインデックスの詳細については、「 必要なインデックス 」を参照してください。

/startbuildIndexesneverが に設定され、かつ がreversible に設定されている場合、true はエラーを返します。

buildIndexesオプションを指定せずに/startを呼び出すと、 mongosyncは宛先クラスターにインデックスを構築します。

バージョン 1.3.0 の新機能

enableUserWriteBlocking

string またはブール値

任意

重要: 6.0 より前のバージョンから移行している場合ソースクラスターでは、このパラメーターは設定できません。

サポートされているオプション:

  • "sourceAndDestination":移行の進行中に宛先クラスターへの書込みをブロックし、/progress エンドポイントが canWritetrue であることを報告する前に書込みのブロックを解除します。mongosync/commit エンドポイントを呼び出した後、ソースクラスターへの書込みをブロックします。

    下位互換性のために true を使用することもできます。

  • "none": 書込みブロックは発生しません。下位互換性のために false を使用することもできます。

  • "destinationOnly":移行の進行中に宛先クラスターへの書込みをブロックし、canWritetrue になる前に書込みのブロックを解除します。

逆同期するには、 enableUserWriteBlockingフィールドを"sourceAndDestination"に設定する必要があります。 移行テストを実行した後など、ソースクラスターが再度書込み (write) を受け入れられるようにするには、次のコマンドを実行します。

db.adminCommand( { setUserWriteBlockMode: 1, global: false } )

デフォルト値は"destinationOnly"です。

includeNamespaces

配列

任意

同期に含めるデータベースまたはコレクションをフィルタリングします。

複数のデータベースを持つソースクラスターでフィルターを構成する場合、 mongosyncはフィルター定義で指定されたデータベースのみを同期します。 mongosyncは既存の他のデータベースを同期しません。

フィルターを変更して新しいデータベースを追加する場合は、フィルタリングされた同期を最初から再開する必要があります。

詳しくは、「フィルタリングされた同期 」を参照してください。

現在の制限については、「フィルタリングされた同期 」を参照してください。

バージョン 1.1 の新機能

excludeNamespaces

配列

任意

同期から除外するデータベースまたはコレクションをフィルタリングします。

複数のデータベースを持つソースクラスターでフィルターを構成する場合、 mongosyncはフィルター定義で指定されたデータベースのみを同期します。 mongosyncは既存の他のデータベースを同期しません。

フィルターを変更して新しいデータベースを追加する場合は、フィルタリングされた同期を最初から再開する必要があります。

詳しくは、「フィルタリングされた同期 」を参照してください。

現在の制限については、「フィルタリングされた同期 」を参照してください。

バージョン 1.6 の新機能.

reversible

ブール値

任意

trueに設定すると、同期操作を元に戻すことができます。

逆同期するには、 enableUserWriteBlockingフィールドをtrueに設定する必要があります。

このオプションは、次の構成ではサポートされていません。

  • レプリカセットからシャーディングされたクラスターへの同期

  • シャードの数が異なるシャーディングされたクラスターの同期

  • buildIndexesneverに設定されている場合は、元に戻すことができます。

重要: より前のバージョンから移行している場合6.0ソースクラスター、reversibletrue に設定することはできません。

詳細については、「のエンドポイント 」を参照してください。

デフォルト値はfalseです。

sharding

ドキュメント

任意

レプリカセットとシャーディングされたクラスターとの間の同期を構成します。 レプリカセットからシャーディングされたクラスターへの同期にはこのオプションが必要です。

詳細については、「 シャーディング パラメータ 」を参照してください。

バージョン 1.1 の新機能

verification

ドキュメント

任意

埋め込み検証子を構成します。

詳細については、「 埋め込み検証子 」を参照してください。

バージョン 1.9 の新機能

verification.enabled

ブール

任意

埋め込み検証子を有効にします。 検証ツールは、宛先クラスターでサポートされているコレクションに対して一連の検証チェックを実行し、移行が成功したことを確認します。

検証子でエラーが検出されない場合、mongosyncCOMMITTED 状態に移行します。 エラーが発生した場合、移行 は失敗します。

検証子はデフォルトで有効になっています。

警告 : 検証子は、すべてのコレクションまたはデータをチェックするわけではありません。詳細については、「 埋め込み検証子 」を参照してください。

バージョン 1.9 の新機能

バージョン 1.1 の新機能

レプリカセットからシャーディングされたクラスターに同期するには、 shardingオプションを設定して、宛先クラスターのコレクションをシャードします。

レプリカセットから シャーディングシャーディングされたクラスターにレプリカセットときに sharding オプションが設定されていない場合、mongosync はエラーをスローします。 また、sharding オプションが他の構成で設定されている場合、mongosync ではエラーがスローされます。

shardingオプションには次のパラメーターがあります。

Parameter
タイプ
説明

createSupportingIndexes

ブール値

任意。 同期がシャードキーのサポートインデックスを作成するかどうかを設定します(存在しない場合)。 デフォルトはfalse です。

詳細と制限については、「 インデックスのサポート 」を参照してください。

shardingEntries

ドキュメントの配列

必須。 同期中にシャードするコレクションの名前空間とキーを設定します。

この配列に含まれていないコレクションは、宛先クラスター上のシャーディングされていないコレクションに同期されます。 空の配列に設定されている場合、コレクションはシャーディングされません。

shardingEntries
.collection

string

コレクションをシャードに設定します。

shardingEntries
.database

string

コレクションのデータベースをシャードに設定します。

shardingEntries
.shardCollection

ドキュメント

宛先クラスターで生成するシャードキーを設定します。

shardingEntries
.shardCollection
.key

配列

シャードキーに使用するフィールドを設定します。

詳しくは、「シャードキー 」を参照してください。

フィールド
タイプ
説明

success

ブール値

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

error

string

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

errorDescription

string

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

The following example starts a sync job between cluster0 and cluster1. ソースクラスターはcluster0で、宛先クラスターはcluster1です。

リクエスト:

curl localhost:27182/api/v1/start -XPOST \
--data '
{
"source": "cluster0",
"destination": "cluster1"
} '

応答:

{"success":true}

The following example starts a sync job between cluster0 and cluster1. ソースクラスターはcluster0で、宛先クラスターはcluster1です。

reversibleenableUserWriteBlockingフィールドでは同期を元に戻すことができます。 同期方向を逆にするには、「逆 」を参照してください。

リクエスト:

curl localhost:27182/api/v1/start -XPOST \
--data '
{
"source": "cluster0",
"destination": "cluster1",
"reversible": true,
"enableUserWriteBlocking": true
} '

応答:

{"success":true}

The following example starts a sync job between cluster0 and cluster1. ソースクラスターはcluster0で、宛先クラスターはcluster1です。

cluster0にはsalesmarketing 、およびengineeringデータベースが含まれています。

salesデータベースには、 EMEAAPACAMERのコレクションが含まれています。

この例のincludeNamespaces配列は、 salesmarketingの 2 つのデータベースに対するフィルターを定義しています。

salesEMEAデータベースは、APAC コレクションと コレクションでもフィルタリングします。

"includeNamespaces" : [
{
"database" : "sales",
"collections": [ "EMEA", "APAC" ]
},
{
"database" : "marketing"
}
]

/startこのフィルターを使用して API を呼び出すと、mongosync は次のようになります。

  • marketingデータベース内のすべてのコレクションを同期します

  • engineeringデータベースをフィルタリング除外します

  • EMEAAPACデータベースからsales コレクションと コレクションを同期します

  • AMERコレクションをフィルタリングで除外します

includeNamespacesオプションはフィルターを作成します。 同期をフィルタリングするには、「 フィルタリングされた同期」を参照してください。

リクエスト:

curl -X POST "http://localhost:27182/api/v1/start" --data '
{
"source": "cluster0",
"destination": "cluster1",
"includeNamespaces": [
{
"database": "sales",
"collectionsRegex": {
"pattern": "^accounts_.+$",
"options": "i"
}
}, {
"database": "marketing"
}
]
} '

応答:

{"success":true}

リクエスト:

curl localhost:27182/api/v1/start -XPOST \
--data '
{
"source": "cluster0",
"destination": "cluster1",
"sharding": {
"createSupportingIndexes": true,
"shardingEntries": [
{
"database": "accounts",
"collection": "us_east",
"shardCollection": {
"key": [
{ "location": 1 },
{ "region": 1 }
]
}
}
]
}
} '

応答:

{"success":true}

1.9 以降では、移行を開始すると 埋め込み検証子がデフォルトで実行されます。 無効にする必要がある場合は、verification.enabledfalse に設定します。

リクエスト:

curl localhost:27182/api/v1/start -XPOST \
--data '
{
"source": "cluster0",
"destination": "cluster1",
"verification": {
"enabled": false
}
} '

応答:

{"success":true}

アプリケーションの負荷を宛先クラスターに転送する前に、移行が成功したことを確認する必要があります。 何らかの理由で検証子を無効にする必要がある場合は、別の方法を使用して同期を検証してください。

1.9 以降、mongosync は、ソースクラスターから宛先へのデータ転送が成功したかどうかを判断するための埋め込み検証子を提供します。

有効にすると、検証ツールは宛先クラスターに対して一連の検証チェックを実行します。 これらのチェックのいずれかでエラーが返された場合、検証子は移行を失敗します 。 すべてのチェックが成功すると、mongosyncCOMMITTED 状態に移行します。

検証子を無効にするには、「 検証子を無効にして起動する 」を参照してください。

ソースクラスターまたは宛先クラスターでサポートされていない検証チェックを有効にした場合、またはメモリが不足している場合、/start エンドポイントはエラーを返します。

startリクエストが成功すると、 mongosyncRUNNING状態になります。

レプリカセットからシャーディングされたクラスターへの同期にはshardingオプションが必要です。 このオプションは、 mongosyncがコレクションをシャーディングする方法を構成します。

sharding.shardingEntries配列は、シャーディングするコレクションを指定します。 この配列にリストされていないコレクションは、シャーディングされていないコレクションとして複製されます。

詳しくは、「シャードクラスタの動作 」を参照してください。

mongosync は、ソースクラスターから宛先クラスターにインデックスを同期します。 レプリカセットからシャーディングされたクラスターに同期する場合、mongosync はソースクラスターに存在しない場合があるシャードキーをサポートするために追加のインデックスが必要になる場合があります。

mongosyncは、同期中にシャーディングされたコレクション用のサポート インデックスを作成できます。 これは、 sharding.createSupportingIndexesオプションを設定することで可能です。

sharding.createSupportingIndexesfalse (デフォルト)の場合

  • sharding.shardingEntriesオプションに指定する各シャードキーには、ソースクラスターに既存のインデックスが必要です。

  • コレクションで他の照合を使用する場合、シャードキーに使用されるインデックスの 1 つは単純照合が必要です。

  • シャードキーで一意のインデックスを使用するには、ソースクラスターでインデックスを作成するときに、その一意性を指定する必要があります。

  • 宛先クラスターのリクエストされたシャードキーと互換性のないソースクラスターのユニークインデックス(宛先のプレフィックスとして、リクエストされたシャードキーを含まないソースクラスターのユニークインデックスなど)では、 mongosyncが失敗する可能性があります。

sharding.createSupportingIndexestrueの場合:

  • サポートするインデックスがソースクラスターに存在する場合、 mongosyncはインデックスを宛先クラスターに同期し、シャードキーとして使用します。

  • サポート インデックスが存在しない場合、 mongosyncは宛先クラスターにそれらを作成します。

sharding.createSupportingIndexesオプションは、すべてのシャーディングされたコレクションに影響します。

レプリカセットからシャーディングされたクラスターに同期されたときにsharding.shardingEntries配列にリストされているコレクションは、宛先クラスターでシャーディングされたコレクションになります。

startを呼び出した後、 mongosyncがコレクションのコピーを開始する前に、ソースクラスターでコレクションの名前を変更すると( renameCollectionコマンドなど)、宛先でコレクションがシャーディングできなくなる可能性があります。

注意

レプリカセットからシャーディングされたクラスターへの同期中に別のデータベースを使用するようにコレクションの名前を変更することはサポートされていません。

コレクションの名前を変更しても安全かどうかを確認するには、 progressエンドポイントを呼び出し、返されたドキュメントのcollectionCopy.estimatedCopiedBytesフィールドの値を確認します。

  • 値が 0 の場合、 mongosyncによるコレクションのコピーが開始されていないことを示します。

    この時点でコレクションの名前を変更すると、ソースで名前変更が有効になる前にコピーへの移行が行われる可能性があるため、宛先クラスターでシャーディングされないコレクションが作成される可能性があります。

  • 値が 0 より大きい場合は、 mongosyncがコピーを開始したことを示します。 この時点からコレクションの名前を変更しても、クラッシュが発生した場合でも、宛先クラスターでのシャーディングはブロックされません。

buildIndexesオプションをneverに設定して/startを呼び出すと、 mongosyncは不要なインデックスの構築をスキップします。

常に構築されるインデックスには、次のものが含まれます。

  • mongosyncは、コピーしたすべてのコレクションの_idフィールドにインデックスを構築します。

  • mongosyncは、宛先クラスターでシャードキーをサポートするためのインデックスがないシャーディングされたコレクションごとにダミーのインデックスを構築します。 buildIndexesneverに設定されている場合、 mongosyncはコミット後にこのインデックスを保持します。

mongosyncstartエンドポイントを保護しません。 However, by default the API binds to localhost only and does not accept calls from other sources. さらに、 start呼び出しでは接続認証情報やユーザー データは公開されません。