Overview
Mongosync は、同期が 終了する まで、データを複製し、あるクラスターから別のクラスターに書込みます。このツールを使用すると、 MongoDBクラスター間で 1 回限りのデータ移行を最小限のダウンタイムで実行できます。
実行中の mongosync と宛先クラスターの動作の詳細については、中間同期に関する考慮事項 を参照してください。
mongosync バイナリは、Mongosync で使用されるプライマリ プロセスです。
- 各クラスターは、レプリカセットとシャーディングされたクラスターにすることができます。 いずれかがシャーディングされたクラスターである場合は、 - mongosyncのシャーディングされたクラスターの制限を参照してください。
- シャーディングされたクラスターは、同じ数のシャードを持つ必要はありません。 
- 宛先クラスターは、ソースクラスターと同じバージョンまたは最大 2 つのバージョンが必要です。 パッチ バージョンは、最小のパッチバージョン要件を満たしている限り、重要ではありません。 
- ソースクラスターはコミットまでアクティブのままになることができます。これは、コミットが呼び出されるまで、 - mongosyncが移行中にソースクラスターの書込みを同期するためです。
重要
mongosync で commit を呼び出し、canWrite が正常に true を返すまで、デスティネーションクラスターはアプリケーションの読み取りまたは書き込みトラフィックを受け付けることができません。障害復旧クラスターの維持にはmongosyncを使用しないでください。
以下の手順に従って、Mongosync を設定し、クラスターに接続して、データを同期します。
セットアップ
ソースクラスターと宛先クラスターの定義
自己管理型またはMongoDB Atlasでホストされている MongoDB クラスターがすでに存在する場合は、そのクラスターをソースクラスターとして使用します。 操作するクラスターがない場合は、作成する必要があります。
このクイックスタートは、宛先クラスターとソースクラスターの両方がレプリカセットである場合に機能します。
レプリカセットからシャーディングされたクラスターに同期するには、「 シャーディングされたクラスターにレプリカセットを同期する」を参照してください。 シャーディングされたクラスター間で同期するには、「 シャーディングされたクラスターの同期 」を参照してください。
Tip
同じまたは異なるバージョンの MongoDB 上のクラスターを移行できます。 MongoDB サーバーのバージョンの互換性またはバージョン間の移行の詳細については、「 MongoDB Server のバージョンの互換性 」を参照してください。
宛先レプリカセット内のノードの数は、ソース レプリカセット内のノードの数と等しくなっている必要はありません。
重要
宛先クラスターには、移行される論理データ サイズと最初の同期の宛先oplogエントリーに十分対応できるディスクストレージが必要です。 例、10 GBのデータを移行するには、宛先クラスターでデータには少なくとも 10 GBが使用可能であり、最初の同期からの挿入oplogエントリ用にはさらに 10 GB が必要です。
埋め込み検証 を使用するには、宛先のoplogがより大きくなければなりません。埋め込み検証子を有効にして宛先oplogのサイズを減らすと、埋め込み検証子が追いつけない可能性があり、mongosync がエラーを発生させる可能性があります。
宛先oplogエントリのオーバーヘッドを減らす必要があり、埋め込み検証子が無効になっている場合は、次の操作を実行できます。
- oplogSizeMB宛先クラスターのoplogサイズを小さくするには、 設定を使用します。
- oplogMinRetentionHoursを使用して 設定を解除し、宛先クラスターの最小oplog保持期間を短縮または削除します。
クラスターが自己管理型の場合は、 MongoDB Enterpriseクラスターである必要があります。Mongosync はMongoDB Community Edition では、限られた場合にのみサポートされます。MongoDB Community Edition で Mongosync を使用する方法の詳細については、 MongoDB の営業担当者に問い合わせてください。
クラスターの作成は、このガイドの範囲外です。 サポートが必要な場合は、ドキュメントを参照してAtlas クラスターを作成するか、自己管理型クラスターを作成 してください。
管理ユーザーを定義する
いずれかのクラスターが Atlas でホストされている場合、またはいずれかに認証が必要な場合は、両方のクラスターで 権限を持つデータベースユーザーを作成する必要があります。
ソースクラスターの認証要件
ソース ユーザーは、次のロールを持っている必要があります。
- readAnyDatabaseロール
- clusterMonitorロール
- backupロール
さらに、ソース ユーザーは次の操作を実行できる必要があります。
- getParameterコマンドを実行
ソースクラスターが Atlas でホストされている場合、ユーザーにはAtlas 管理者ロールが必要です。 また、ユーザーはクラスターの変更ストリームも読み取ることができる必要があります。
宛先クラスターの認証要件
宛先クラスターが Atlas でホストされている場合、ユーザーにはAtlas 管理者ロールが必要です。
クラスター認証ノート
- Atlas userを追加 するには、「データベースユーザーの設定 」を参照してください。 
- 自己管理型クラスターにユーザーを追加するには、「 自己管理型配置でユーザーを作成する 」を参照してください。 
- ユーザー権限を確認するには、 - db.getUser()を実行します。
ダウンロードとインストール mongosync
mongosync は、ソースクラスターと宛先クラスターを接続するツールです。 mongosyncは専用のハードウェアでホストできます。 mongosyncは、MongoDB クラスターをホストするハードウェアで実行する必要がありません。
mongosyncをインストールするには次の手順に従います。
- ソースクラスターと宛先クラスターへのネットワーク接続を持つ - mongosync実行可能ファイルのホストサーバーを見つけます。
- ホスト システム用の - mongosyncパッケージをダウンロードします。
- mongosyncパッケージを解凍します。- mongosync実行可能ファイルは- binディレクトリにあります。
オペレーティング システム固有のインストール手順については、「インストール 」を参照してください。
クラスターの接続
接続文字列の形式を設定する
接続文字列には、mongosync がソースクラスターと宛先クラスターに接続するために必要なネットワークと認証の詳細が含まれています。
ソースクラスターと宛先クラスターのホスト名または IP アドレスとポートを決定します。 この情報とユーザー認証の詳細を使用して接続文字列を構築します。
標準の URI 接続スキームの形式は次のとおりです。
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]] 
接続文字列は次のようになります。
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 
詳細については、「 mongosyncの接続 」を参照してください。
mongosync を初期化
mongosync は、データの同期を開始する前に、ソースクラスターと宛先クラスターへの初期接続を作成する必要があります。 初期接続を作成するには、接続文字列を 1 行につき次のコマンドを実行します(コマンドは明確にするために再フォーマットされています)。
./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" 
初期化ノート
クラスター間でのデータの移行
開始エンドポイントは、データ同期を開始します。 同期を開始するには、 curlまたは同様のプログラムを使用して開始リクエストを発行します。
curl localhost:27182/api/v1/start -XPOST \ --data '    {       "source": "cluster0",       "destination": "cluster1"    } ' 
開始リクエストが成功した場合、 mongosyncは{ "success": true }を返し、ソースクラスター上の既存のデータと宛先クラスターの同期を開始します。 この時点で、 mongosyncはRUNNING状態になり、後続のソースクラスターの書込みを宛先クラスターに適用します。
同期のステータスを確認するには、進行状況エンドポイントを呼び出します。
curl localhost:27182/api/v1/progress -XGET 
progress 応答にフィールドcanCommit: true が含まれている場合は、/commit エンドポイントを呼び出せます。「カットオーバー プロセスの終了」を参照してください。
mongosyncのコマンドインターフェースは、HTTP API を公開する HTTP サーバーです。 mongosyncを制御するには、 API エンドポイントを使用します。 API ドキュメントには、次のエンドポイントの使用に関する詳細が記載されています。
カットオーバー プロセスの終了
mongosyncカットオーバー プロセスを使用して移行を完了し、アプリケーション ワークロードをソース クラスターから宛先クラスターに転送できます。
詳細については、「カットオーバー プロセスの終了 」を参照してください。
ノート
- HTTP API のデフォルト ポートは - 27182です。 別のポートを構成するには、- --portオプションと- mongosyncを併用します。
- mongosyncでは、ソースクラスターと宛先クラスターをスワップして、逆同期を有効にできます。- 詳細については、 - reverseエンドポイントを参照してください。
- mongosync接続文字列で指定されたユーザーには、ソースクラスターと宛先クラスターで必要な権限が必要です。権限は、環境と、書込み同期を実行するか、逆同期を実行するかによって異なります。- ユースケースに適したユーザー権限を決定するには、「ユーザー権限 」を参照してください。 
- mongosyncを実行しているホストでファイル記述子- ulimitsを増やす必要がある場合があります。 これはすべての UNIX のようなシステムに適用されますが、macOS のデフォルト値は特に低くなります。 UNIX ulimit 設定を参照してください。
- 最初の同期に必要な - oplogのサイズを見積もるには、 oplog サイズ設定 を参照してください。