20

我正在尝试使用 MongoDb 创建一个副本集,服务器主机名是:

主机名 主机名-1 主机名-2

它们中的每一个都有其 /etc/hosts 文件中详细说明的所有相关主机名(它们都运行 Ubuntu 10.04 64 位)

当我在一个节点上执行 rs.initiate 时,一切似乎都开始良好。运行 rs.status(); 显示:

{
    "set" : "vega",
    "date" : ISODate("2012-01-22T19:15:55Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "hostname:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "optime" : {
                "t" : 1327254848000,
                "i" : 1
            },
            "optimeDate" : ISODate("2012-01-22T17:54:08Z"),
            "self" : true
        }
    ],
    "ok" : 1
}

当我尝试向副本集添加新成员时,问题就来了。我使用命令 rs.add(hostname-1); 我收到以下错误:

{
    "assertion" : "need most members up to reconfigure, not ok : vega-1:27017",
    "assertionCode" : 13144,
    "errmsg" : "db assertion failure",
    "ok" : 0
}

我尝试了多种使用主机名、IP 地址的组合,无论有无端口号,但我总是遇到同样的问题。主机名正在解析,我尝试 ping hostname-1 并且它工作正常。

有人对可能导致此问题的原因有任何想法吗?

不幸的是,在 Mongo 文档中没有在现实世界场景中设置副本集的示例,仅在同一台机器上使用三个实例,这显然是无用的。

提前感谢您的帮助!

4

6 回答 6

15

在您的配置中删除它:

bind_ip = 127.0.0.1

该选项目前与 mongodb 副本集不兼容。

于 2012-12-03T22:13:04.877 回答
10

当您添加尚未“启动”(尚未)的节点时,会发生该错误。听起来“hostname-1”是不可访问的(不在 /etc/hosts 中,没有 DNS),或者它是可访问的,但没有使用replSet配置参数集运行 mongodb

于 2012-07-12T02:54:55.720 回答
3
{
    “errmsg”:“例外:需要大多数成员重新配置,不行:server2:27017”,
    “代码”:13144,
    “好”:0
}

我在 Mongo 2.4.9 中遇到了上述错误。我的错误是我没有replSet 在新副本成员的 mongo 配置中指定。rs.add("server2:27017")之后工作得很好。

于 2014-01-17T10:09:35.707 回答
2

不幸的是,在 Mongo 文档中没有在现实世界场景中设置副本集的示例,仅在同一台机器上使用三个实例,这显然是无用的。

同意,实在是太穷了。该示例应从文档中完全删除。

还有另一种启动副本集的方法,那就是使用rs.configure()命令。您也可以一次指定所有三个节点,然后发出rs.inititiate().

有关在启动之前指定所有节点的示例,请参见此处。

有关各种命令的更多详细信息,请参见此处

于 2012-01-23T08:45:24.433 回答
2

我有类似的问题,解决方案是有一个密钥文件。 http://docs.mongodb.org/manual/tutorial/deploy-replica-set-with-auth/#create-the-key-file-to-be-used-by-each-member-of-the-replica -放

于 2014-09-04T18:51:29.743 回答
0

在将第二个节点添加到 node1 之前,您可能需要检查 mongod 是否在第二个节点上运行。如果它正在运行 rs.add(),然后检查 rs.status()。

于 2014-03-03T15:45:28.657 回答