1

2つのノードでレプリカセットを構成しようとしていますが、実行するrs.add("node2")rs.status()両方のノードがPRIMARYに設定されます。またrs.status()、他のノードで実行すると、表示されるノードはローカルノードだけです。

編集1: rs.status()出力:

    {
        "set" : "rs0",
        "date" : ISODate("2012-09-22T01:01:12Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "node1:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 70968,
                        "optime" : Timestamp(1348207012000, 1),
                        "optimeDate" : ISODate("2012-09-21T05:56:52Z"),
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "node2:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 68660,
                        "optime" : Timestamp(1348205568000, 1),
                        "optimeDate" : ISODate("2012-09-21T05:32:48Z"),
                        "lastHeartbeat" : ISODate("2012-09-22T01:01:11Z"),
                        "pingMs" : 0
                }
        ],
        "ok" : 1
}

Edit2:3つの異なるノードで同じことを実行しようとしましたが、同じ結果が得られました(rs.status()3つのプライマリノードでレプリカセットがあると言います)。この問題は、ネットワークの特定の構成が原因である可能性がありますか?

4

2 に答える 2

1

rs.initiate()以前にレプリカセットの両方のメンバーから発行した場合rs.add()、両方がプライマリとして表示されます。

rs.initiate()レプリカセットのメンバーの1つ、つまり最初にプライマリにする予定のメンバーでのみ使用する必要があります。次にrs.add()、他のメンバーをレプリカセットに追加できます。

于 2012-10-25T03:20:56.680 に答える
1

上記の答えはそれを修正する方法に答えていません。試行錯誤しながらやり遂げました。

(のように)データディレクトリをクリーンアップし、rm -rf *1つを除いてこれらのPRIMARYノードを再起動しました。それらを追加し直しました。うまくいくようです。

Edit1
以下のちょっとしたトリックは私にはうまくいかなかったようです、


mongodだから、私はを使用してコンソールにログインしましたmongo <hostname>:27018

シェルは次のようになります。

rs2:PRIMARY> rs.conf()
{
    "_id" : "rs2",
    "version" : 1,
    "members" : [
        {
            "_id" : 0,
            "host" : "ip-10-159-42-911:27018"
        }
    ]
}

セカンダリに変更することにしました。それで、

rs2:PRIMARY> var c = {
...   "_id" : "rs2",
...   "version" : 1,
...   "members" : [
...     {
...       "_id" : 1,
...       "host" : "ip-10-159-42-911:27018",
...       "priority": 0.5
...     }
...   ]
... }

rs2:PRIMARY> rs.reconfig(c, { "force": true})
Mon Nov 11 19:46:39.244 DBClientCursor::init call() failed
Mon Nov 11 19:46:39.245 trying reconnect to ip-10-159-42-911:27018
Mon Nov 11 19:46:39.245 reconnect ip-10-159-42-911:27018 ok
reconnected to server after rs command (which is normal)

rs2:SECONDARY> 

今では二次的です。もっと良い方法があるかどうかはわかりません。しかし、これはうまくいくようです。

HTH

于 2013-11-11T19:51:38.050 に答える