Overview
MongoDB Cluster-to-Cluster Sync は、MongoDB クラスターを接続し、それら間でデータを同期する方法を提供します。 接続を行うツールは mongosyncです。 詳細については、「 Cluster-to-Cluster Sync 」ドキュメントの残りの部分を参照してください。
mongosync は 2 つのクラスター間でデータを同期します。
各クラスターは、レプリカセットとシャーディングされたクラスターにすることができます。 いずれかがシャーディングされたクラスターである場合は、
mongosyncのシャーディングされたクラスターの制限を参照してください。シャーディングされたクラスターは、同じ数のシャードを持つ必要はありません。
宛先クラスターは、ソースクラスターと同じバージョンまたは最大 2 つのバージョンが必要です。 パッチ バージョンは、最小のパッチバージョン要件を満たしている限り、重要ではありません。
重要
mongosync で commit を呼び出し、canWrite が正常に true を返すまで、デスティネーションクラスターはアプリケーションの読み取りまたは書き込みトラフィックを受け付けることができません。障害復旧クラスターの維持にはmongosyncを使用しないでください。
以下の手順に従って、Cluster-to-Cluster Syncを設定し、クラスターを接続して、データを同期します。
セットアップ
ソースクラスターと宛先クラスターの定義
自己管理型またはMongoDB Atlasでホストされている MongoDB クラスターがすでに存在する場合は、そのクラスターをソースクラスターとして使用します。 操作するクラスターがない場合は、作成する必要があります。
このクイックスタートは、宛先クラスターとソースクラスターの両方がレプリカセットである場合に機能します。
レプリカセットからシャーディングされたクラスターに同期するには、「 シャーディングされたクラスターにレプリカセットを同期する」を参照してください。 シャーディングされたクラスター間で同期するには、「 シャーディングされたクラスターの同期 」を参照してください。
Tip
同じまたは異なるバージョンの MongoDB 上のクラスターを移行できます。 MongoDB サーバーのバージョンの互換性またはバージョン間の移行の詳細については、「 MongoDB Server のバージョンの互換性 」を参照してください。
宛先レプリカセット内のノードの数は、ソース レプリカセット内のノードの数と等しくなっている必要はありません。
重要
宛先クラスターには、移行される論理データ サイズと最初の同期の宛先oplogエントリーに十分対応できるディスクストレージが必要です。 例、10 GBのデータを移行するには、宛先クラスターでデータには少なくとも 10 GBが使用可能であり、最初の同期からの挿入oplogエントリ用にはさらに 10 GB が必要です。
宛先oplogエントリのオーバーヘッドを軽減するには、次の操作を実行します。
oplogSizeMB宛先クラスターのoplogサイズを小さくするには、 設定を使用します。oplogMinRetentionHoursを使用して 設定を解除し、宛先クラスターの最小oplog保持期間を短縮または削除します。
クラスターが自己管理型である場合は、MongoDB Enterprise クラスターである必要があります。 Cluster-to-Cluster Sync は、MongoDB Community Edition では限られた場合にのみサポートされます。 MongoDB Community Edition で Cluster-to-Cluster Sync を使用する方法の詳細については、 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が含まれている場合、クラスターは同期され、宛先クラスターはソースクラスターからデータを継続的に複製します。
mongosyncのコマンドインターフェースは、HTTP API を公開する HTTP サーバーです。 mongosyncを制御するには、 API エンドポイントを使用します。 API ドキュメントには、次のエンドポイントの使用に関する詳細が記載されています。
カットオーバー プロセスの終了
mongosyncカットオーバー プロセスを使用して移行を完了し、アプリケーション ワークロードをソース クラスターから宛先クラスターに転送できます。
詳細については、「カットオーバー プロセスの終了 」を参照してください。
ワンタイム同期
データ同期を初期化した後、同期プロセスのステータスを確認するには、進行状況エンドポイントを呼び出します。
curl localhost:27182/api/v1/progress -XGET
1 回限りの同期の場合は、 progress応答に次のフィールド値が含まれていることを確認します。
state: "RUNNING"canCommit: truelagTimeSecondsは0に近いです(推奨されていますが、必須ではありません)
次に、コミットエンドポイントを呼び出して、同期操作を宛先クラスターにコミットし、継続的なレプリケーションを停止します。
curl localhost:27182/api/v1/commit -XPOST --data '{ }'
commitリクエストが成功した場合、 mongosyncは{ "success": true }を返し、 COMMITTING状態になります。 同期が完了すると、 mongosyncはCOMMITTED状態になり、クラスターの継続的な同期は行われなくなります。
データ検証
アプリケーションの負荷をソースクラスターから宛先に転送する前に、データをチェックして、同期が成功していることを確認してください。
詳細については、「データ転送を確認する 」を参照してください。
同期ノート
HTTP API のデフォルト ポートは
27182です。 別のポートを構成するには、--portオプションとmongosyncを併用します。mongosyncでは、ソースクラスターと宛先クラスターをスワップして、逆同期を有効にできます。詳細については、
reverseエンドポイントを参照してください。mongosync接続文字列で指定されたユーザーには、ソースクラスターと宛先クラスターで必要な権限が必要です。権限は、環境と、書込み同期を実行するか、逆同期を実行するかによって異なります。ユースケースに適したユーザー権限を決定するには、「ユーザー権限 」を参照してください。
mongosyncを実行しているホストでファイル記述子ulimitsを増やす必要がある場合があります。 これはすべての UNIX のようなシステムに適用されますが、macOS のデフォルト値は特に低くなります。 UNIX ulimit 設定を参照してください。最初の同期に必要な
oplogのサイズを見積もるには、 oplog サイズ設定 を参照してください。