Docs Menu
Docs Home
/ /
mongosync API エンドポイント

start

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

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

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

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

注意

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

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

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

source

string

必須

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

destination

string

必須

宛先クラスターの名前。

buildIndexes

string

任意

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

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

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

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

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

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

/start は、 buildIndexesneverに設定され、かつreversibletrueに設定されている場合にエラーを返します。

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

バージョン 1.3.0 の新機能

enableUserWriteBlocking

ブール値

任意

trueに設定すると、同期の進行中に宛先クラスターへの書込みがブロックされます。 同期が宛先クラスターにコミットされた後、元のソースクラスターは書込みをブロックし、宛先クラスターは書込みを受け入れます。

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

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

デフォルト値はfalseです。

includeNamespaces

配列

任意

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

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

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

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

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

バージョン 1.1 の新機能

excludeNamespaces

配列

任意

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

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

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

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

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

バージョン 1.6 の新機能.

reversible

ブール値

任意

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

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

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

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

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

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

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

デフォルト値はfalseです。

sharding

ドキュメント

任意

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

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

バージョン 1.1 の新機能

バージョン 1.1 の新機能

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

mongosync レプリカセットからシャーディングされたクラスターに同期するときにshardingオプションが設定されていない場合、 はエラーをスローします。 また、 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の場合、応答から省略されます。

次の例では、 cluster0cluster1の間で同期ジョブを開始しています。 ソースクラスターはcluster0で、宛先クラスターはcluster1です。

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

次の例では、 cluster0cluster1の間で同期ジョブを開始しています。 ソースクラスターはcluster0で、宛先クラスターはcluster1です。

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

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

次の例では、 cluster0cluster1の間で同期ジョブを開始しています。 ソースクラスターは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}

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はコミット後にこのインデックスを保持します。

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

戻る

mongosync API エンドポイント

項目一覧