自己管理型レプリカセットへのノードの追加
Overview
このチュートリアルでは、既存のレプリカセットにメンバーを追加する方法について説明します。 レプリケーション配置パターンの背景については、「レプリカセット配置のアーキテクチャ」ドキュメントを参照してください。
最大投票ノード数
レプリカセットには最大 7 つの投票ノードを含めることができます。すでに 7 つの投票ノードがあるレプリカセットにノードを追加するには、非投票ノードとして追加するか、 existing member
から投票権を削除する必要があります。
init スクリプト
本番配置では、ノードのプロセスを管理する init スクリプトを設定できます。
既存ノード
これらの手順を使用して、既存のレプリカセットに新しいノードを追加できます。
警告
各レプリカセット ノードの帰属先レプリカセットは 1 つのみにする必要があります。レプリカセット ノードは複数のレプリカセットに属することはできません。
以前のノードを復元する
これらの手順を使用して、削除されたノードを再度追加することができます。
削除されたノード上のデータが比較的新しい場合、ノードは復元され、他のレプリカセットと同期されます。
重要
スタンドアロン モードの間は、削除されたノード上に新しい複製コレクションを作成することは避けます。スタンドアロン ノードがレプリカセットに再び追加されると、新しいコレクションに対するその後の操作でエラーが発生します。
データファイル
既存のメンバーのバックアップまたはスナップショットがある場合は、データファイル(例えば、 dbPath
ディレクトリ)を新しいシステムに移動し、それらを使用して新しいノードをすばやく開始できます。ファイルは次の条件を満たす必要があります。
同じレプリカセットのノードからのデータファイルの有効なコピー。 詳細については、 「ファイルシステム スナップショットを使用した自己管理型配置のバックアップと復元」ドキュメントを参照してください。
重要
既存のレプリカセットのノードのコピーを作成するには、必ずファイルシステムのスナップショットを使用します。
mongodump
とmongorestore
を使用して新しいレプリカセット ノードをシードしないでください。プライマリのoplog内の最も古い操作よりも新しい操作。新しいノードは、プライマリの oplog から操作を適用して、最新の状態になることができる必要があります。
IP バインディング
警告
非ローカルホスト(例: (一般にアクセス可能な)IP アドレスを使用して、クラスターを不正アクセスから保護していることを確認します。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。
MongoDB バイナリ(mongod
と mongos
)は、デフォルトで localhost にバインドされます。バイナリに net.ipv6
構成ファイルや --ipv6
コマンド ライン オプションが設定されている場合、バイナリはローカルホストの IPv6 アドレスに追加でバインドされます。
デフォルトでは、localhost にバインドされている mongod
と mongos
は、同じコンピューター上で実行中のクライアントによる接続のみを受け入れます。このバインディング動作には、mongosh
や、レプリカセットやシャーディングされたクラスターのノードなどが含まれます。リモート クライアントは、ローカルホストのみにバインドされているバイナリには接続できません。
デフォルトのバインドをオーバーライドして、他の IP アドレスにバインドするには、net.bindIp
構成ファイル設定や --bind_ip
コマンド ライン オプションを使用して、ホスト名または IP アドレスのリストを指定します。
警告
MongDB5.0 以降、 スプリットホライズンDNS IP アドレスのみが設定されているノードは起動時の検証に失敗し、エラーを報告します。詳しくはdisableSplitHorizonIPCheck
を参照してください。
たとえば、次の mongod
インスタンスは、IP アドレス 198.51.100.1
に関連付けられているローカルホストとホスト名 My-Example-Associated-Hostname
の両方にバインドします。
mongod --bind_ip localhost,My-Example-Associated-Hostname
このインスタンスに接続するには、リモート クライアントはホスト名またはそれに関連付けられた IP アドレス198.51.100.1
を指定する必要があります。
mongosh --host My-Example-Associated-Hostname mongosh --host 198.51.100.1
重要
IP アドレスの変更による構成の更新を防ぐには、IP アドレスの代わりに DNS ホスト名を使用します。レプリカセット ノードまたはシャーディングされたクラスター ノードを設定するときは、IP アドレスではなく DNS ホスト名を使用することが特に重要です。
分裂されたネットワーク ホライズン全体でクラスターを構成するには、IP アドレスの代わりにホスト名を使用します。 MongoDB 5.0以降、IP アドレスのみが設定されているノードは起動時の検証に失敗し、起動しません。
要件
アクティブなレプリカセット。
データセットをサポートできる新しい MongoDB システムで、アクティブなレプリカセットからネットワーク経由でアクセスできます。
それ以外の場合は、MongoDB 「インストール チュートリアル」 と 「自己管理型レプリカセットの配置」 チュートリアルを使用してください。
手順
データディレクトリの準備
既存のレプリカセットに新しいノードを追加する前に、次のいずれかの戦略を使用して新しいノードのデータディレクトリを準備します。
新しいノードのデータディレクトリに、データが含まれていないことを確認します。新しいノードは、既存のノードからデータをコピーします。
新しいノードがリカバリ状態にある場合、MongoDB がレプリケーション プロセスの一環としてすべてのデータをコピーする前に、そのノードは終了してセカンダリになる必要があります。このプロセスには時間がかかりますが、管理者の介入は必要ありません。
既存のノードからデータディレクトリを手動でコピーします。新しいノードはセカンダリ メンバーになり、レプリカセットの現在の状態に追いつきます。データをコピーすると、新しいノードが最新になるまでの時間が短縮される可能性があります。
データディレクトリを新しいノードにコピーし、 oplog によって許可されたウィンドウ 期間内にレプリケーションを開始できることを確認します。 それ以外の場合、新しいインスタンスで最初の同期を実行する必要があり、「 自己管理型レプリカセットのノードの再同期 」で説明されているように、データの完全な再同期が必要になります。
rs.printReplicationInfo()
を使用して、oplog に関するレプリカセット ノードの現在の状態を確認します。
レプリケーション配置パターンの背景については、「レプリカセット配置のアーキテクチャ」ドキュメントを参照してください。
既存のレプリカセットへのノードの追加
重要
IP アドレスの変更による構成の更新を防ぐには、IP アドレスの代わりに DNS ホスト名を使用します。レプリカセット ノードまたはシャーディングされたクラスター ノードを設定するときは、IP アドレスではなく DNS ホスト名を使用することが特に重要です。
分裂されたネットワーク ホライズン全体でクラスターを構成するには、IP アドレスの代わりにホスト名を使用します。 MongoDB 5.0以降、IP アドレスのみが設定されているノードは起動時の検証に失敗し、起動しません。
新しい
mongod
インスタンスを起動します。データディレクトリとレプリカセット名を指定します。次の例えでは、/srv/mongodb/db0
データディレクトリとrs0
レプリカセットを指定します。mongod --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost,<hostname(s)|ip address(es)> 警告
非ローカルホスト(例: (一般にアクセス可能な)IP アドレスを使用して、クラスターを不正アクセスから保護していることを確認します。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。
設定オプションの詳細については、
mongod
マニュアル ページを参照してください。レプリカセットのプライマリに接続します。
ノードの追加は、プライマリーに接続している間のみ可能です。どのノードがプライマリであるかわからない場合は、レプリカセットの任意のノードにログインして、
db.hello()
コマンドを発行します。rs.add()
を使用して、レプリカセットに新しいノードを追加します。member configuration document
メソッドに渡します。たとえば、ホストmongodb3.example.net
にノードを追加するには、次のコマンドを発行します。rs.add( { host: "mongodb3.example.net:27017" } ) 警告
MongoDB 5.0 より前では、新しく追加されたセカンダリは、データの一貫性が確保されるまでは読み取りを処理できず、プライマリにもなれませんが、投票メンバーとしてカウントされます。MongoDB バージョン 5.0 より前のバージョンを実行中で、
votes
とpriority
の設定が0より大きいセカンダリを追加すると、投票ノードの過半数がオンラインであるにもかかわらずプライマリを選出できない状況が発生する可能性があります。このような状況を回避するには、最初にpriority :0
とvotes :0
を使用して新しいセカンダリを追加することを検討してください。次に、rs.status()
を実行して、ノードがSECONDARY
状態に移行したことを確認します。最後に、rs.reconfig()
を使用して優先順位と投票をアップデートします。