Cluster-to-Cluster Sync クイックスタート
項目一覧
Overview
MongoDB Cluster-to-Cluster Sync は、MongoDB クラスターを接続し、それら間でデータを同期する方法を提供します。 接続を行うツールは mongosyncです。 詳細については、「 Cluster-to-Cluster Sync 」ドキュメントの残りの部分を参照してください。
mongosync
は 2 つのクラスター間でデータを同期します。
各クラスターは、レプリカセットとシャーディングされたクラスターにすることができます。 いずれかがシャーディングされたクラスターである場合は、
mongosync
のシャーディングされたクラスターの制限を参照してください。シャーディングされたクラスターは、同じ数のシャードを持つ必要はありません。
宛先クラスターは、ソースクラスターと同じバージョンまたは最大 2 つのバージョンが必要です。 パッチ バージョンは、最小のパッチバージョン要件を満たしている限り、重要ではありません。
ソースクラスターはコミットまでアクティブのままになることができます。これは、コミットが呼び出されるまで、
mongosync
が移行中にソースクラスターの書込みを同期するためです。
以下の手順に従って、Cluster-to-Cluster Syncを設定し、クラスターを接続して、データを同期します。
セットアップ
ソースクラスターと宛先クラスターの定義
自己管理型または 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 クラスターである必要があります。 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: true
lagTimeSeconds
は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 サイズ設定 を参照してください。