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

埋め込み検証子による検証

項目一覧

  • このタスクについて
  • 手順
  • 動作
  • 詳細

mongosync には、サポートされているコレクションの同期を検証するために宛先クラスターで一連のチェックを実行するための埋め込み検証子が含まれています。

注意

mongosyncprimary 読み込み設定 (read preference)を使用して読み取りを行うため、ソースクラスターの プライマリノードからドキュメントフィールドの順序が保持されます。埋め込み検証子は、ソースクラスターの プライマリノードに基づいてドキュメントもチェックしますが、mongosync がドキュメントを読み取るタイミングとは異なります。このため、まれに、ソースクラスターのノード間でドキュメントフィールドの順序に不一致があるため、mongosync がドキュメントを正しくコピーした場合でも、埋め込み検証子が移行を失敗させることがあります。

バージョン 1.9 の新機能

埋め込み検証子は mongosync 1.8 以前では使用できません。

別の検証方法については、「 データ転送の検証 」を参照してください。

埋め込み検証子には次の制限があります。

  • mongosync は検証子の状態をメモリに保存するため、大幅なメモリ オーバーヘッドが発生する可能性があります。検証子を実行するには、mongosync は約 10 GBのメモリに加えて、100 万ドキュメントごとに追加の 500 MB を必要とします。

  • 検証子は再開できません。ユーザーが同期を停止または一時停止した後、何らかの理由で mongosync を再度開始した場合、検証プロセスは最初から再開されます。これにより検証が移行より大幅に遅れる可能性があります。

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

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

検証子は、次の名前空間はチェックしません。

  • 上限付きコレクション

  • TTL インデックスを持つコレクション(移行中に追加または削除される TTL インデックスを含む)

  • デフォルトの照合を使用しないコレクション

  • ビュー

検証子は、次のコレクション機能をチェックしません。

  • コレクションメタデータ

  • Indexes

上記のデータとメタデータデータ を確認するには、これらのコレクションとコレクション機能の追加チェックをスクリプト化します。詳細については、「 データ転送を確認する 」を参照してください。

注意

バージョン1.10 以降、検証子は、移行中に 前のソースクラスターで発生した DDLイベントからのデータの不整合をチェックします。これは、 6.06.0より前の移行では DDL イベントがサポートされていないためです。

詳細については、「 6.0以前の移行制限 」を参照してください。

1

mongosync プロセスを初期化します。

./bin/mongosync \
--logPath /var/log/mongosync \
--cluster0 "mongodb://clusterAdmin:superSecret@clusterOne01.fancyCorp.com:20020,clusterOne02.fancyCorp.com:20020,clusterOne03.fancyCorp.com:20020" \
--cluster1 "mongodb://clusterAdmin:superSecret@clusterTwo01.fancyCorp.com:20020,clusterTwo02.fancyCorp.com:20020,clusterTwo03.fancyCorp.com:20020"
2

ソースクラスターから宛先クラスターへのデータの同期を開始するには、 /start エンドポイントを使用します。

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

出力例:

{"success":true}

レプリカセットの移行では 検証子はデフォルトで有効になっていることに注意してください。

3

同期のステータスを調べるには、 /progress エンドポイントを使用します。

curl localhost:27182/api/v1/progress -XGET

出力例:

{
"progress":
{
"state":"RUNNING",
"canCommit":true,
"canWrite":false,
"info":"change event application",
"lagTimeSeconds":0,
"collectionCopy":
{
"estimatedTotalBytes":694,
"estimatedCopiedBytes":694
},
"directionMapping":
{
"Source":"cluster0: localhost:27017",
"Destination":"cluster1: localhost:27018"
},
"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
}

埋め込み検証子のステータスに関する情報については、verification レスポンスフィールドを調べます。

埋め込み検証子は、宛先クラスターに対して一連のチェックを実行します。サポートされているすべてのコレクションをチェックして、mongosync がソースクラスターから宛先にドキュメントを正常に転送したことを確認します。

検証子が エラーを発生させると、エラーとなり移行は失敗します。検証子がエラーを 見つけられない場合/progresscanWrite: true エンドポイントは を返します。canWrite フィールドの詳細については、 canWrite と Committed を参照してください。

検証の問題を調べるには、 サポートにお問い合わせください 。

検証には、10 GBのメモリと、移行内の 100 万ドキュメントごとに追加の 500 MB が必要です。

使用可能なメモリが不足している場合、/start エンドポイントはエラーを返します。この状況が発生した場合、 検証子とともに mongosync を使用するには、まずサーバーのメモリを増やして移行を再開 する必要があります。

サーバーメモリの増加がオプションでない場合は、検証子を無効にしてmongosync を再起動します。

戻る

データ転送検証