テストおよび開発用の自己管理型レプリカセットの配置
この手順では、開発環境またはテスト環境にレプリカ セットを配置する方法について説明しています。本番環境への配置については「自己管理型レプリカセットを配置する」チュートリアルを参照してください。
Overview
3 つのノードのレプリカセットは、ほとんどのネットワーク パーティションの分断やその他のシステム障害に耐えられる十分な冗長性を提供します。これらのセットには、多くの分散された読み取り操作を実行するのに十分なキャパシティーもあります。レプリカセットに存在するノードの数は、常に奇数であることが必要です。これにより、選挙が円滑に進むことが保証されます。レプリカセットの設計の詳細については、「レプリケーションの概要」を参照してください。
要件
テストおよび開発システムの場合、mongod
インスタンスをローカル システム上または仮想インスタンス内で実行できます。
レプリカセットを展開する前に、レプリカセットの一部となる各システムに MongoDB をインストールする必要があります。MongoDB をまだインストールしていない場合は、インストール チュートリアルを参照してください。
各ノードは他のすべてのノードに接続できる必要があります。接続を確認する方法については、「すべてのノード間の接続をテストする」を参照してください。
Considerations
重要
IP アドレスの変更による構成の更新を防ぐには、IP アドレスの代わりに DNS ホスト名を使用します。レプリカセット ノードまたはシャーディングされたクラスター ノードを設定するときは、IP アドレスではなく DNS ホスト名を使用することが特に重要です。
分裂されたネットワーク ホライズン全体でクラスターを構成するには、IP アドレスの代わりにホスト名を使用します。 MongoDB 5.0以降、IP アドレスのみが設定されているノードは起動時の検証に失敗し、起動しません。
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
このテスト環境では、3 つのノードが同じマシン上で実行されます。
レプリカセットの名前付け
重要
これらの手順は、テストまたは開発環境でのみ使用してください。
この手順の例では、rs0
という名前の新しいレプリカセットを作成します。
アプリケーションが複数のレプリカセットに接続する場合、それぞれのセットには異なる名前を付ける必要があります。一部のドライバーは、レプリカセットの名前で接続をグループ化します。
手順
重要
IP アドレスの変更による構成の更新を防ぐには、IP アドレスの代わりに DNS ホスト名を使用します。レプリカセット ノードまたはシャーディングされたクラスター ノードを設定するときは、IP アドレスではなく DNS ホスト名を使用することが特に重要です。
分裂されたネットワーク ホライズン全体でクラスターを構成するには、IP アドレスの代わりにホスト名を使用します。 MongoDB 5.0以降、IP アドレスのみが設定されているノードは起動時の検証に失敗し、起動しません。
次のようなコマンドを発行して、各ノードに必要なデータ ディレクトリを作成します。
mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2 これにより、「rs0-0」、「rs0-1」、「rs0-2」というディレクトリが作成され、インスタンスのデータベース ファイルが含まれます。
次のコマンドを実行して、
mongod
インスタンスを独自の shell ウィンドウで起動します。警告
インスタンスをパブリックにアクセス可能な IP アドレスにバインドする前に、クラスターを不正アクセスから保護する必要があります。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。
最初のノード:
mongod --replSet rs0 --port 27017 --bind_ip localhost,<hostname(s)|ip address(es)> --dbpath /srv/mongodb/rs0-0 --oplogSize 128 2 つ目のノード:
mongod --replSet rs0 --port 27018 --bind_ip localhost,<hostname(s)|ip address(es)> --dbpath /srv/mongodb/rs0-1 --oplogSize 128 3 つ目のノード:
mongod --replSet rs0 --port 27019 --bind_ip localhost,<hostname(s)|ip address(es)> --dbpath /srv/mongodb/rs0-2 --oplogSize 128 これにより、各インスタンスが
rs0
という名前のレプリカセットのノードとして起動され、それぞれが異なるポートで実行され、--dbpath
設定でデータ ディレクトリへのパスが指定されます。提案されたポートをすでに使用している場合は、別のポートを選択してください。インスタンスは、ローカルホストとホストの IP アドレスの両方にバインドされます。
--oplogSize
設定により、各mongod
インスタンスが使用するディスク容量が削減されます。 [ 1 ]これは、マシンの過負荷を防ぐため、テストおよび開発環境に最適です。 この構成オプションおよびその他の構成オプションについて詳しくは、「自己管理型構成ファイルのオプション 」を参照してください。を介して
mongod
mongosh
インスタンスの 1 つに接続します。ポート番号を指定して、どの インスタンスを示す必要があります。 簡単かつ明確にするために、次のコマンドのように最初の を選択することをお勧めします。mongosh --port 27017 mongosh
では、rs.initiate()
を使用してレプリカセットを開始します。次の例のように、mongosh
環境にレプリカセット構成オブジェクトを作成できます。rsconf = { _id: "rs0", members: [ { _id: 0, host: "<hostname>:27017" }, { _id: 1, host: "<hostname>:27018" }, { _id: 2, host: "<hostname>:27019" } ] } <hostname>
をシステムのホスト名に置き換え、次のようにrsconf
ファイルをrs.initiate()
に渡します。rs.initiate( rsconf ) 次のコマンドを実行して、現在のレプリカ構成を表示します。
rs.conf() レプリカセットの構成オブジェクトは次のようになります。
{ "_id" : "rs0", "version" : 1, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "<hostname>:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "<hostname>:27018", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "<hostname>:27019", "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("598f630adc9053c6ee6d5f38") } }
rs.status()
操作を使用して、いつでもレプリカセットのステータスを確認できます。
Tip
以下も参照してください。
詳細については、次の shell 関数についてのドキュメントを参照してください。
自動構成された基本的なレプリカセットの例として、簡単なセットアップスクリプトも検討してください。
MongoDB の読み取りおよび書込みセマンティクスについて詳しくは、「レプリカセットの読み取りおよび書込みセマンティクス」を参照してください。
[1] | oplog は、majority commit point が削除されるのを回避するために、設定されたサイズ制限を超えて大きくなることがあります。 |