Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

自己管理型レプリカセットの配置

項目一覧

  • Overview
  • 要件
  • レプリカセットをデプロイする際の考慮事項
  • ターミナルでのレプリカセットの配置

3 つのノードのレプリカセットは、ほとんどのネットワーク パーティションの分断やその他のシステム障害に耐えられる十分な冗長性を提供します。これらのセットには、多くの分散された読み取り操作を実行するのに十分なキャパシティーもあります。レプリカセットに存在するノードの数は、常に奇数であることが必要です。これにより、選挙が円滑に進むことが保証されます。レプリカセットの設計の詳細については、「レプリケーションの概要」を参照してください。

このページでは、レプリカセットを自己管理型配置に配置する方法について説明します。

MongoDB Atlas でホストされている配置のレプリカセットを配置する方法の詳細については、「 クラスターの作成」を参照してください。

本番環境の配置では、mongodインスタンスを別々のマシンでホストして、ノード間の分離を可能な限り維持する必要があります。本番環境の配置で仮想マシンを使用する場合は、冗長電源回路と冗長ネットワーク パスを備えた個別のホスト サーバーに各mongodインスタンスを配置する必要があります。

レプリカセットを展開する前に、レプリカセットの一部となる各システムに MongoDB をインストールする必要があります。MongoDB をまだインストールしていない場合は、インストール チュートリアルを参照してください。

本番環境では、レプリカセットの各ノードを別個のマシンにデプロイします。可能であれば、MongoDB がデフォルトのポート27017でリッスンするようにしてください。

注意

ローリング アップグレード以外では、 レプリカセット のすべてのmongod ノードは、MongoDB の同じメジャー バージョンを使用する必要があります。

詳細については、「レプリカセットの配置アーキテクチャ」を参照してください。

重要

IP アドレスの変更による構成の更新を防ぐには、IP アドレスの代わりに DNS ホスト名を使用します。レプリカセット ノードまたはシャーディングされたクラスター ノードを設定するときは、IP アドレスではなく DNS ホスト名を使用することが特に重要です。

分裂されたネットワーク ホライズン全体でクラスターを構成するには、IP アドレスの代わりにホスト名を使用します。 MongoDB 5.0以降、IP アドレスのみが設定されているノードは起動時の検証に失敗し、起動しません。

--bind_ipオプションを使用して、MongoDB が設定されたアドレス上のアプリケーションからの接続をリッスンするようにします。

警告

インスタンスをパブリックにアクセス可能な IP アドレスにバインドする前に、クラスターを不正アクセスから保護する必要があります。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。

MongoDB バイナリ(mongodmongos)は、デフォルトで localhost にバインドされます。バイナリに net.ipv6 構成ファイルや --ipv6 コマンド ライン オプションが設定されている場合、バイナリはローカルホストの IPv6 アドレスに追加でバインドされます。

デフォルトでは、localhost にバインドされている mongodmongos は、同じコンピューター上で実行中のクライアントによる接続のみを受け入れます。このバインディング動作には、mongosh や、レプリカセットやシャーディングされたクラスターのノードなどが含まれます。リモート クライアントは、ローカルホストのみにバインドされているバイナリには接続できません。

デフォルトのバインドをオーバーライドして、他の IP アドレスにバインドするには、net.bindIp 構成ファイル設定や --bind_ip コマンド ライン オプションを使用して、ホスト名または IP アドレスのリストを指定します。

警告

たとえば、次の 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を指定します。

構成オプションの詳細については、「自己管理型構成ファイル オプション 」を参照してください。

このチュートリアルでは、 アクセス制御を無効にして実行されている 3 つの既存のmongodインスタンスから 3 ノードのレプリカセットを作成する方法について説明します。

アクセス制御を有効にしてレプリカセットを配置するには、 「 キーファイル認証を使用して自己管理型レプリカセットを配置する 」を参照してください。 単一の MongoDB インスタンスからレプリカセットを配置する場合は、「スタンドアロンの自己管理型 mongod をレプリカセットに変換する」を参照してください。 レプリカセット配置の詳細については、「レプリケーションレプリカセット配置のアーキテクチャ」のドキュメントを参照してください。

1

各メンバーに対して、次の設定でmongodインスタンスを開始します。

  • レプリカセット名にreplication.replSetNameオプションを設定します。アプリケーションが複数のレプリカセットに接続する場合、各セットには異なる名前を付ける必要があります。

  • net.bindIpオプションをホスト名/IP またはカンマ区切りのホスト名/IP リストに設定します。

  • 配置に応じて、その他の設定を行います。

このチュートリアルでは、3 つのmongodインスタンスが次のホストに関連付けられています。

レプリカセット ノード
Hostname
Member 0
mongodb0.example.net
Member 1
mongodb1.example.net
Member 2
mongodb2.example.net

次の例では、 --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 nameip addressesを指定することもできます

replication:
replSetName: "rs0"
net:
bindIp: localhost,<hostname(s)|ip address(es)>

構成ファイルを使用してmongodを起動するには、 --configオプションを使用して構成ファイルのパスを指定します。

mongod --config <path-to-config>

本番環境では、このプロセスを管理する init スクリプトを設定できます。init スクリプトは、このドキュメントの範囲外です。

2

mongod の 1 つが実行中 (このチュートリアルでは mongodb0.example.net)のマシンと同じマシンから、mongosh を起動します。デフォルト ポート 27017 でローカルホストをリッスンしているmongodに接続するには、単純に次のコマンドを発行します。

mongosh

パスによっては、 mongoshバイナリへのパスを指定する必要がある場合があります。

mongodがデフォルトのポートで実行されていない場合は、 mongosh--portオプションを指定します。

3

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 は、デフォルトのレプリカセット構成を使用してレプリカセットを開始します。

4

レプリカセットの構成オブジェクトを表示するには、rs.conf()を使用します。

rs.conf()

レプリカセットの構成オブジェクトは次のようになります。

{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb1.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb2.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("585ab9df685f726db2c6a840")
}
}
5

レプリカセット内のプライマリを識別するには、 rs.status()を使用します。

Tip

以下も参照してください。

戻る

配置