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

テストおよび開発用の自己管理型レプリカセットの配置

項目一覧

  • Overview
  • 要件
  • Considerations
  • 手順

この手順では、開発環境またはテスト環境にレプリカ セットを展開する方法について説明しています。 本番環境への配置については、「 自己管理型レプリカセットを配置する 」チュートリアルを参照してください。

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

テストおよび開発システムの場合、mongod インスタンスをローカル システム上または仮想インスタンス内で実行できます。

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

各ノードは他のすべてのノードに接続できる必要があります。接続を確認する方法については、「すべてのノード間の接続をテストする」を参照してください。

重要

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

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

警告

インスタンスをパブリックにアクセス可能な 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

このテスト環境では、3 つのノードが同じマシン上で実行されます。

重要

これらの手順は、テストまたは開発環境でのみ使用してください。

この手順の例では、rs0 という名前の新しいレプリカセットを作成します。

アプリケーションが複数のレプリカセットに接続する場合、各セットには異なる名前を付ける必要があります。一部のドライバーでは、レプリカセット接続はレプリカセット名でグループ化されます。

重要

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

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

  1. 次のようなコマンドを発行して、各ノードに必要なデータ ディレクトリを作成します。

    mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2

    これにより、「rs0-0」、「rs0-1」、「rs0-2」というディレクトリが作成され、インスタンスのデータベース ファイルが含まれます。

  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 ]これは、マシンの過負荷を防ぐため、テストおよび開発環境に最適です。 この構成オプションおよびその他の構成オプションについて詳しくは、「自己管理型構成ファイルのオプション 」を参照してください。

  3. を介してmongod mongoshインスタンスの 1 つに接続します。ポート番号を指定して、どの インスタンスを示す必要があります。 簡単かつ明確にするために、次のコマンドのように最初の を選択することをお勧めします。

    mongosh --port 27017
  4. 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 )
  5. 次のコマンドを実行して、現在のレプリカ構成を表示します。

    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 が削除されるのを回避するために、設定されたサイズ制限を超えて大きくなることがあります。

戻る

ノードの置換