説明
ソースクラスターと宛先クラスター間の同期を開始します。
要件
状態
start
エンドポイントを使用するには、 mongosync
がIDLE
状態である必要があります。
権限
mongosync
接続文字列で指定されたユーザーには、ソースクラスターと宛先クラスターで必要な権限が必要です。 ユーザーに同期を開始するための適切な権限があることを確認するには、 ユーザー権限を参照してください。
複数のmongosync
インスタンス
mongosync
を起動するときに、 cluster0
またはcluster1
設定の接続文字列で構成済みのmongosync
ユーザーを使用していることを確認します。
注意
シャーディングされたクラスター間で同期するように複数のmongosync
インスタンスを構成する場合は、各mongosync
インスタンスに同一の API エンドポイント コマンドを送信する必要があります。
リクエスト
POST /api/v1/start
リクエスト ボディ パラメータ
Parameter | タイプ | 必要性 | 説明 | |||||
---|---|---|---|---|---|---|---|---|
| string | 必須 | ソースクラスターの名前。 | |||||
| string | 必須 | 宛先クラスターの名前。 | |||||
| string | 任意 | 同期中のインデックスビルドを構成します。 サポートされているオプション:
バージョン 1.3.0 の新機能。 | |||||
| string またはブール値 | 任意 | 重要: 6.0 より前のバージョンから移行している場合ソースクラスターでは、このパラメーターは設定できません。 サポートされているオプション:
逆同期するには、
デフォルト値は | |||||
| 配列 | 任意 | 同期に含めるデータベースまたはコレクションをフィルタリングします。 複数のデータベースを持つソースクラスターでフィルターを構成する場合、 フィルターを変更して新しいデータベースを追加する場合は、フィルタリングされた同期を最初から再開する必要があります。 詳しくは、「フィルタリングされた同期 」を参照してください。 現在の制限については、「フィルタリングされた同期 」を参照してください。 バージョン 1.1 の新機能。 | |||||
| 配列 | 任意 | 同期から除外するデータベースまたはコレクションをフィルタリングします。 複数のデータベースを持つソースクラスターでフィルターを構成する場合、 フィルターを変更して新しいデータベースを追加する場合は、フィルタリングされた同期を最初から再開する必要があります。 詳しくは、「フィルタリングされた同期 」を参照してください。 現在の制限については、「フィルタリングされた同期 」を参照してください。 バージョン 1.6 の新機能. | |||||
| ブール値 | 任意 | 重要This feature is currently in Public Preview. Please review the behavior and limitations in this section in order to use this feature in production environments. デフォルト値は
| |||||
| ブール値 | 任意 |
逆同期するには、 このオプションは、次の構成ではサポートされていません。
重要: より前のバージョンから移行している場合6.0ソースクラスター、 詳細については、「逆のエンドポイント 」を参照してください。 デフォルト値は | |||||
| ドキュメント | 任意 | レプリカセットとシャーディングされたクラスターとの間の同期を構成します。 レプリカセットからシャーディングされたクラスターへの同期にはこのオプションが必要です。 詳細については、「 シャーディング パラメータ 」を参照してください。 バージョン 1.1 の新機能。 | |||||
| ドキュメント | 任意 | ||||||
| ブール | 任意 | 埋め込み検証子を有効にします。 検証ツールは、宛先クラスターでサポートされているコレクションに対して一連の検証チェックを実行し、移行が成功したことを確認します。 検証子でエラーが検出されない場合、 検証子はデフォルトで有効になっています。 警告 : 検証子は、すべてのコレクションまたはデータをチェックするわけではありません。詳細については、「 埋め込み検証子 」を参照してください。 バージョン 1.9 の新機能。 |
シャーディング パラメータ
バージョン 1.1 の新機能。
レプリカセットからシャーディングされたクラスターに同期するには、 sharding
オプションを設定して、宛先クラスターのコレクションをシャードします。
mongosync
レプリカセットからシャーディングされたクラスターに同期するときにsharding
オプションが設定されていない場合、 はエラーをスローします。 また、 sharding
オプションが他の構成で設定されている場合、 mongosync
ではエラーがスローされます。
sharding
オプションには次のパラメーターがあります。
Parameter | タイプ | 説明 |
---|---|---|
| ブール値 | 任意。 同期がシャードキーのサポートインデックスを作成するかどうかを設定します(存在しない場合)。 デフォルトは このパラメータを 詳細と制限については、「 インデックスのサポート 」を参照してください。 |
| ドキュメントの配列 | 必須。 同期中にシャードするコレクションの名前空間とキーを設定します。 この配列に含まれていないコレクションは、宛先クラスター上のシャーディングされていないコレクションに同期されます。 空の配列に設定されている場合、コレクションはシャーディングされません。 |
shardingEntries .collection | string | コレクションをシャードに設定します。 |
shardingEntries .database | string | コレクションのデータベースをシャードに設定します。 |
shardingEntries .shardCollection | ドキュメント | 宛先クラスターで生成するシャードキーを設定します。 |
shardingEntries .shardCollection .key | 配列 | シャードキーに使用するフィールドを設定します。 詳しくは、「シャードキー 」を参照してください。 |
応答
フィールド | タイプ | 説明 |
---|---|---|
| ブール値 | リクエストが成功した場合、この値は |
| string | エラーが発生した場合、 はエラーの名前を示します。 このフィールドは、 |
| string | 発生したエラーの詳細な説明。 このフィールドは、 |
例
同期ジョブの開始
次の例では、ソースクラスターcluster0
と宛先クラスター cluster1
の間で同期ジョブを開始します。
リクエスト:
curl localhost:27182/api/v1/start -XPOST \ --data ' { "source": "cluster0", "destination": "cluster1" } '
応答:
{"success":true}
可用性同期ジョブの開始
次の例では、ソースクラスターcluster0
と宛先クラスター cluster1
の間で同期ジョブを開始します。
reversible
とenableUserWriteBlocking
フィールドでは同期を元に戻すことができます。 同期方向を逆にするには、「逆 」を参照してください。
リクエスト:
curl localhost:27182/api/v1/start -XPOST \ --data ' { "source": "cluster0", "destination": "cluster1", "reversible": true, "enableUserWriteBlocking": "sourceAndDestination" } '
応答:
{"success":true}
フィルタリングされた同期ジョブの開始
次の例では、ソースクラスターcluster0
と宛先クラスター cluster1
の間で同期ジョブを開始します。
cluster0
には、 sales
、 marketing
、およびengineering
データベースが含まれています。
sales
データベースには、 EMEA
、 APAC
、 AMER
のコレクションが含まれています。
この例のincludeNamespaces
配列は、 sales
とmarketing
の 2 つのデータベースに対するフィルターを定義しています。
sales
EMEA
データベースは、APAC
コレクションと コレクションでもフィルタリングします。
"includeNamespaces" : [ { "database" : "sales", "collections": [ "EMEA", "APAC" ] }, { "database" : "marketing" } ]
/start
このフィルターを使用して API を呼び出すと、mongosync
は次のようになります。
marketing
データベース内のすべてのコレクションを同期しますengineering
データベースをフィルタリング除外しますEMEA
APAC
データベースから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}
レプリカセットからシャーシャードクラスタへの同期の開始
次の例では、ソースレプリカセットcluster0
と宛先のシャーディングされたクラスターcluster1
の間で同期ジョブを開始します。この例の key
配列は、シャードキー{"location": 1, "region": 1 }
を定義しています。
リクエスト:
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.enabled
を false
に設定します。
リクエスト:
curl localhost:27182/api/v1/start -XPOST \ --data ' { "source": "cluster0", "destination": "cluster1", "verification": { "enabled": false } } '
応答:
{"success":true}
アプリケーションの負荷を宛先クラスターに転送する前に、移行が成功したことを確認する必要があります。 何らかの理由で検証子を無効にする必要がある場合は、別の方法を使用して同期を検証してください。
動作
埋め込み検証子
1.9 以降、mongosync
は、ソースクラスターから宛先へのデータ転送が成功したかどうかを判断するための埋め込み検証子を提供します。
有効にすると、検証ツールは宛先クラスターに対して一連の検証チェックを実行します。 これらのチェックのいずれかでエラーが返された場合、検証子は移行を失敗します 。 すべてのチェックが成功すると、mongosync
は COMMITTED
状態に移行します。
検証子を無効にするには、「 検証子を無効にして起動する 」を参照してください。
ソースクラスターまたは宛先クラスターでサポートされていない検証チェックを有効にした場合、またはメモリが不足している場合、/start
エンドポイントはエラーを返します。
状態
start
リクエストが成功すると、 mongosync
はRUNNING
状態になります。
レプリカセットのシャーディング
レプリカセットからシャーディングされたクラスターへの同期にはsharding
オプションが必要です。 このオプションは、 mongosync
がコレクションをシャーディングする方法を構成します。
sharding.shardingEntries
配列は、シャーディングするコレクションを指定します。 この配列にリストされていないコレクションは、シャーディングされていないコレクションとして複製されます。
サポートインデックス
mongosync
は、ソースクラスターから宛先クラスターにインデックスを同期します。 レプリカセットからシャーディングされたクラスターに同期する場合、mongosync
はシャードキー をサポートするために追加のインデックスが必要になる場合があります。このインデックスはソースクラスターに存在しない場合があります。
mongosync
は、同期中にシャーディングされたコレクション用のサポート インデックスを作成できます。 そのためには、 sharding.createSupportingIndexes
オプションを設定します。
sharding.createSupportingIndexes
がfalse
(デフォルト)の場合
sharding.shardingEntries
オプションに指定する各シャードキーには、ソースクラスターに既存のインデックスが必要です。コレクションで他の照合を使用する場合、シャードキーに使用されるインデックスの 1 つは単純照合が必要です。
シャードキーで一意のインデックスを使用するには、ソースクラスターでインデックスを作成するときに、その一意性を指定する必要があります。
宛先クラスターのリクエストされたシャードキーと互換性のないソースクラスターのユニークインデックス(宛先のプレフィックスとして、リクエストされたシャードキーを含まないソースクラスターのユニークインデックスなど)では、
mongosync
が失敗する可能性があります。
sharding.createSupportingIndexes
がtrue
の場合:
サポートするインデックスがソースクラスターに存在する場合、
mongosync
はインデックスを宛先クラスターに同期し、シャードキーとして使用します。サポート インデックスが存在しない場合、
mongosync
は宛先クラスターにそれらを作成します。
sharding.createSupportingIndexes
オプションは、すべてのシャーディングされたコレクションに影響します。
同期中の名前変更
レプリカセットからシャーディングされたクラスターに同期されたときにsharding.shardingEntries
配列にリストされているコレクションは、宛先クラスターでシャーディングされたコレクションになります。
start
を呼び出した後、 mongosync
がコレクションのコピーを開始する前に、ソースクラスターでコレクションの名前を変更すると( renameCollection
コマンドなど)、宛先でコレクションがシャーディングできなくなる可能性があります。
注意
レプリカセットからシャーディングされたクラスターへの同期中に別のデータベースを使用するようにコレクションの名前を変更することはサポートされていません。
コレクションの名前を変更しても安全かどうかを確認するには、 progress
エンドポイントを呼び出し、返されたドキュメントのcollectionCopy.estimatedCopiedBytes
フィールドの値を確認します。
値が 0 の場合、
mongosync
によるコレクションのコピーが開始されていないことを示します。この時点でコレクションの名前を変更すると、ソースで名前変更が有効になる前にコピーへの移行が行われる可能性があるため、宛先クラスターでシャーディングされないコレクションが作成される可能性があります。
値が 0 より大きい場合は、
mongosync
がコピーを開始したことを示します。 この時点からコレクションの名前を変更しても、クラッシュが発生した場合でも、宛先クラスターでのシャーディングはブロックされません。
必要なインデックス
buildIndexes
オプションをnever
に設定して/start
を呼び出すと、 mongosync
は不要なインデックスの構築をスキップします。
常に構築されるインデックスには、次のものが含まれます。
mongosync
は、コピーしたすべてのコレクションの_id
フィールドにインデックスを構築します。mongosync
は、宛先クラスターでシャードキーをサポートするためのインデックスがない各シャーディングされたコレクションに対してダミーのインデックスを構築します。buildIndexes
がnever
に設定されている場合、mongosync
はコミット後にこのインデックスを保持します。
エンドポイント保護
mongosync
は、 start
エンドポイントを保護しません。 ただし、デフォルトでは、API は localhost のみにバインドされ、他のソースからの呼び出しは受け入れません。 さらに、 start
呼び出しでは接続認証情報やユーザー データは公開されません。