Cluster-to-Cluster Sync クイックスタート
Overview
Cluster-to-Cluster Sync、同期が 終了する まで、あるクラスターから別のクラスターにデータと書込みがレプリケートされます。このツールを使用すると、 MongoDBクラスター間で 1 回限りのデータ移行を最小限のダウンタイムで実行できます。
実行中の mongosync
と宛先クラスターの動作の詳細については、中間同期に関する考慮事項 を参照してください。
mongosync バイナリーは、 Cluster-to-Cluster Syncで使用されるプライマリ プロセスです。
各クラスターは、レプリカセットとシャーディングされたクラスターにすることができます。 いずれかがシャーディングされたクラスターである場合は、
mongosync
のシャーディングされたクラスターの制限を参照してください。シャーディングされたクラスターは、同じ数のシャードを持つ必要はありません。
宛先クラスターは、ソースクラスターと同じバージョンまたは最大 2 つのバージョンが必要です。 パッチ バージョンは、最小のパッチバージョン要件を満たしている限り、重要ではありません。
ソースクラスターはコミットまでアクティブのままになることができます。これは、コミットが呼び出されるまで、
mongosync
が移行中にソースクラスターの書込みを同期するためです。
重要
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がより大きくなければなりません。埋め込み検証子を有効にして宛先oplogのサイズを減らすと、埋め込み検証子が追いつけない可能性があり、mongosync
がエラーを発生させる可能性があります。
宛先oplogエントリのオーバーヘッドを減らす必要があり、埋め込み検証子が無効になっている場合は、次の操作を実行できます。
replication.oplogSizeMB
宛先クラスターのoplogサイズを小さくするには、 設定を使用します。storage.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
が含まれている場合は、/commit
エンドポイントを呼び出せます。「カットオーバー プロセスの終了」を参照してください。
mongosync
のコマンドインターフェースは、HTTP API を公開する HTTP サーバーです。 mongosync
を制御するには、 API エンドポイントを使用します。 API ドキュメントには、次のエンドポイントの使用に関する詳細が記載されています。
カットオーバー プロセスの終了
mongosync
カットオーバー プロセスを使用して移行を完了し、アプリケーション ワークロードをソース クラスターから宛先クラスターに転送できます。
詳細については、「カットオーバー プロセスの終了 」を参照してください。
ノート
HTTP API のデフォルト ポートは
27182
です。 別のポートを構成するには、--port
オプションとmongosync
を併用します。mongosync
では、ソースクラスターと宛先クラスターをスワップして、逆同期を有効にできます。詳細については、
reverse
エンドポイントを参照してください。mongosync
接続文字列で指定されたユーザーには、ソースクラスターと宛先クラスターで必要な権限が必要です。 権限は、書込みブロック設定を変更するか、逆同期を使用するかによって、環境によって異なります。ユースケースに適したユーザー権限を決定するには、「ユーザー権限 」を参照してください。
ulimits
を実行中いるホストでファイル記述子mongosync
を増やす必要がある場合があります。これはすべての UNIX のようなシステムに適用されますが、macOS のデフォルト値は特に低くなります。 UNIX ulimit 設定を参照してください。最初の同期に必要な
oplog
のサイズを見積もるには、 oplog サイズ設定 を参照してください。