1

我正在尝试配置具有两个节点的副本集,但是当我执行时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()说我有一个包含三个主节点的副本集)。这个问题可能是由网络的某些特定配置引起的吗?

4

2 回答 2

1

上面的答案没有回答如何解决它。我通过反复试验完成了它。

我已经清理了数据目录(如 中rm -rf *)并重新启动了这些 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> 

现在是次要的。不知道有没有更好的办法。但这似乎有效。

高温高压

于 2013-11-11T19:51:38.050 回答
1

如果您rs.initiate()之前从副本集的两个成员发出,rs.add()那么两者都将成为主要成员。

您应该只rs.initiate()在副本集的一个成员上使用,即您最初打算成为主要成员的那个。然后您可以rs.add()将其他成员添加到副本集。

于 2012-10-25T03:20:56.680 回答