1

レプリカ モードの MongoDB がいくつかあるシナリオを検討したいと思いますが、特殊なケースでは、動作しているのは 1 つだけです。私の構成は次のようなものです。

EC2 インスタンスに MongoDB コンテナがあります。コマンドは次のとおりです。

sudo docker run \
--name mongo \
-v /home/core/mongo-files/data:/data/db \
-p 27018:27017 -d mongo:3.2.1 \
--smallfiles \
--replSet "rs0"

次に、このデータベースを使用する Nodejs によって開発された 2 つのアプリケーションがあります。次の接続文字列で接続します。

uri: 'mongodb://192.168.0.100:27018/testmongo?replicaSet=rs0'

残念ながら、私のアプリケーションの 1 つが正常に機能しますが、他のアプリケーションは機能しません。データベースに接続しようとしたときのエラーメッセージは

MongoDB 接続エラー: MongoError: 有効なレプリカセット メンバーが見つかりません

このコマンドを実行してステータスを確認したrs.slaveOk()後、rs.status()これを持っています

rs0:PRIMARY> rs.status()
{
    "set" : "rs0",
    "date" : ISODate("2016-09-19T11:50:59.947Z"),
    "myState" : 1,
    "term" : NumberLong(2),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "members" : [
        {
            "_id" : 0,
            "name" : "02aaebd39d4b:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 1194663,
            "optime" : {
                "ts" : Timestamp(1474285564, 1),
                "t" : NumberLong(2)
            },
            "optimeDate" : ISODate("2016-09-19T11:46:04Z"),
            "electionTime" : Timestamp(1473091196, 1),
            "electionDate" : ISODate("2016-09-05T15:59:56Z"),
            "configVersion" : 1,
            "self" : true
        }
    ],
    "ok" : 1
}

このシナリオの設定は正しいですか? 正しくない場合、どうすれば修正できますか?

4

1 に答える 1

0

レプリカを開始するには3 つの段階があります。

  1. mongod インスタンスをレプリカとして起動する

    mongod --port 27018 --replSet rs0 --dbpath /home/core/mongo-files/data:/data/db1 --logpath your/log/path --smallfiles --fork --logappend
    mongod --port 27017 --replSet rs0 --dbpath /home/core/mongo-files/data:/data/db2 --logpath your/log/path --smallfiles --fork --logappend
    
  2. mongodb に接続してレプリカを開始し、レプリカとして含まれる mongods を定義します。

     rs.initiate(
        {
           _id: "rs0",
           members: [
              { _id: 0, host : "Your.Machine's.LocalHost:27017" },
              { _id: 1, host : "Your.Machine's.LocalHost:27018" }
           ]
        }
     )
    
  3. 以下のコマンドで実際にレプリカを開始します。

    rs.initiate(rs0)
    
于 2016-09-19T15:53:04.690 に答える