Overview
3 つのノードのレプリカセットは、ほとんどのネットワーク パーティションの分断やその他のシステム障害に耐えられる十分な冗長性を提供します。これらのセットには、多くの分散された読み取り操作を実行するのに十分なキャパシティーもあります。レプリカセットに存在するノードの数は、常に奇数であることが必要です。これにより、選挙が円滑に進むことが保証されます。レプリカセットの設計の詳細については、「レプリケーションの概要」を参照してください。
このページでは、レプリカセットを自己管理型配置に配置する方法について説明します。
MongoDB Atlas でホストされている配置のレプリカセットを配置する方法の詳細については、「 クラスターの作成」を参照してください。
要件
本番環境の配置では、各mongodインスタンスを個別のマシンでホストし、冗長電源回路と冗長ネットワークパスでサービスするようにします。これには、仮想マシンで実行されているインスタンスも含まれます。
レプリカセットを展開する前に、レプリカセットの一部となる各システムに MongoDB をインストールする必要があります。MongoDB をまだインストールしていない場合は、インストール チュートリアルを参照してください。
レプリカセットをデプロイする際の考慮事項
アーキテクチャ
本番環境では、レプリカセットの各ノードを別個のマシンにデプロイします。可能であれば、MongoDB がデフォルトのポート27017でリッスンするようにしてください。
詳細については、「レプリカセットの配置アーキテクチャ」を参照してください。
ホスト名
重要
IP アドレスの変更による構成の更新を防ぐには、IP アドレスの代わりに DNS ホスト名を使用します。レプリカセット ノードまたはシャーディングされたクラスター ノードを設定するときは、IP アドレスではなく DNS ホスト名を使用することが特に重要です。
分裂されたネットワーク ホライズン全体でクラスターを構成するには、IP アドレスの代わりにホスト名を使用します。 MongoDB 5.0以降、IP アドレスのみが設定されているノードは起動時の検証に失敗し、起動しません。
IP バインディング
--bind_ipオプションを使用して、MongoDB が設定されたアドレス上のアプリケーションからの接続をリッスンするようにします。
警告
インスタンスをパブリックにアクセス可能な IP アドレスにバインドする前に、クラスターを不正アクセスから保護する必要があります。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。
MongoDB バイナリ(mongod と mongos)は、デフォルトで localhost にバインドされます。バイナリに net.ipv6 構成ファイルや --ipv6 コマンド ライン オプションが設定されている場合、バイナリはローカルホストの IPv6 アドレスに追加でバインドされます。
デフォルトでは、localhost にバインドされている mongod と mongos は、同じコンピューター上で実行中のクライアントによる接続のみを受け入れます。このバインディング動作には、mongosh や、レプリカセットやシャーディングされたクラスターのノードなどが含まれます。リモート クライアントは、ローカルホストのみにバインドされているバイナリには接続できません。
デフォルトのバインドをオーバーライドして、他の IP アドレスにバインドするには、net.bindIp 構成ファイル設定や --bind_ip コマンド ライン オプションを使用して、ホスト名または IP アドレスのリストを指定します。
警告
MongDB5.0 以降、 IPアドレスのみが設定されている分裂ホライゾン DNS ノードはスタートアップの検証に失敗し、エラーを報告します。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
接続性
セットのすべてのノードとネットワーク内のすべてのクライアント間でネットワーク トラフィックが安全に通過できることを確認します。
次の点を考慮してください。
仮想プライベートネットワークを確立します。ネットワークトポロジーが、ローカルエリアネットワークを介して単一サイト内のノード間のすべてのトラフィックをルーティングするようにしてください。
不明なクライアントからのレプリカセットへの接続を防止するためにアクセス制御を構成します。
ネットワークとファイアウォールのルールを設定して、受信パケットと送信パケットがデフォルトの MongoDB ポートでのみ、デプロイ内からのみ許可されるようにします。IP バインディングに関する考慮事項を参照してください。
レプリカセットの各メンバーに、解決可能な DNS またはホスト名を使用してアクセスできることを確認します。DNS 名を適切に構成するか、この構成を反映するようにシステムの/etc/hostsファイルを設定する必要があります。
各ノードは他のすべてのノードに接続できる必要があります。接続を確認する方法については、「すべてのノード間の接続をテストする」を参照してください。
構成
MongoDB の配置前に、MongoDB がデータ ファイルを保存するディレクトリを作成します。
/etc/mongod.confまたは関係するロケーションに保存された構成ファイルでmongodを指定します。
構成オプションの詳細については、「自己管理型構成ファイル オプション 」を参照してください。
ターミナルでのレプリカセットの配置
次の手順に従って、 アクセス制御mongod を無効にして実行されている 3 つの既存の インスタンスから 3 ノードの レプリカセット を作成します。
アクセス制御を有効にしてレプリカセットを配置するには、「キーファイル認証を使用して自己管理型レプリカセットを配置する」を参照してください。単一の MongoDB インスタンスからレプリカセットを配置する場合は、「スタンドアロンの自己管理型 mongod をレプリカセットに変換する」を参照してください。レプリカセットの配置の詳細については、「レプリケーション」と「レプリカセット配置のアーキテクチャー」ドキュメントを参照してください。
適切なオプションを使用してレプリカセットの各ノードを起動します。
各メンバーに対して、次の設定でmongodインスタンスを開始します。
レプリカセット名に
replication.replSetNameオプションを設定します。アプリケーションが複数のレプリカセットに接続する場合、各セットには異なる名前を付ける必要があります。net.bindIpオプションをホスト名/IP またはカンマ区切りのホスト名/IP リストに設定します。配置に応じて、その他の設定を行います。
このチュートリアルでは、3 つのmongodインスタンスが次のホストに関連付けられています。
レプリカセット ノード | Hostname |
|---|---|
Member 0 |
|
Member 1 |
|
Member 2 |
|
次の例では、 --replSetおよび--bind_ipコマンドライン オプションを使用してレプリカセット名と IP バインディングを指定します。
警告
インスタンスをパブリックにアクセス可能な IP アドレスにバインドする前に、クラスターを不正アクセスから保護する必要があります。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。
mongod --replSet "rs0" --bind_ip localhost,<hostname(s)|ip address(es)>
<hostname(s)|ip address(es)>には、リモート クライアント(レプリカセットの他のノードを含む)がインスタンスに接続するために使用できるmongodインスタンスのホスト名や IP アドレスを指定します。
あるいは、構成ファイルでreplica set nameとip addressesを指定することもできます。
replication: replSetName: "rs0" net: bindIp: localhost,<hostname(s)|ip address(es)>
構成ファイルを使用してmongodを起動するには、 --configオプションを使用して構成ファイルのパスを指定します。
mongod --config <path-to-config>
本番環境では、このプロセスを管理する init スクリプトを設定できます。init スクリプトは、このドキュメントの範囲外です。
レプリカセットを開始します。
mongoshから、レプリカセット ノード0でrs.initiate()を実行します。
重要
レプリカセットに対して 1 つの mongod インスタンスでのみ rs.initiate() を実行します。
重要
IP アドレスの変更による構成の更新を防ぐには、IP アドレスの代わりに DNS ホスト名を使用します。レプリカセット ノードまたはシャーディングされたクラスター ノードを設定するときは、IP アドレスではなく DNS ホスト名を使用することが特に重要です。
分裂されたネットワーク ホライズン全体でクラスターを構成するには、IP アドレスの代わりにホスト名を使用します。 MongoDB 5.0以降、IP アドレスのみが設定されているノードは起動時の検証に失敗し、起動しません。
rs.initiate( { _id : "rs0", members: [ { _id: 0, host: "mongodb0.example.net:27017" }, { _id: 1, host: "mongodb1.example.net:27017" }, { _id: 2, host: "mongodb2.example.net:27017" } ] })
MongoDB は、デフォルトのレプリカセット構成を使用してレプリカセットを開始します。
レプリカセットの構成を表示します。
レプリカセットの構成オブジェクトを表示するには、rs.conf()を使用します。
rs.conf()
レプリカセットの構成オブジェクトは次のようになります。
{ "_id" : "rs0", "version" : 1, "protocolVersion" : Long(1), "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : Long(0), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : Long(0), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : Long(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : -1, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("585ab9df685f726db2c6a840") } }
レプリカセットにプライマリがあることを確認します。
レプリカセット内のプライマリを識別するには、 rs.status()を使用します。