MongoDB replicaSet配置 - 奇怪的行为

时间:2013-12-14 16:55:37

标签: mongodb replication virtualbox

我正在尝试实现mongoDB复制,由虚拟机形式的4个节点组成,

信息:我使用virtualbox,v.machines通过仅限主机的适配器相互通信。通信已经过测试,错误的节点可以ping其他节点。

这是 rs.conf()命令的输出:

rs0:PRIMARY> rs.conf()
{
    "_id" : "rs0",
    "version" : 4,
    "members" : [
        {
            "_id" : 0,
            "host" : "192.168.56.1:27017"
        },
        {
            "_id" : 1,
            "host" : "192.168.56.101:27018"
        },
        {
            "_id" : 2,
            "host" : "192.168.56.102:27019"
        },
        {
            "_id" : 3,
            "host" : "192.168.56.103:27020"
        }
    ]
}

这是 rs.status()

命令的输出
rs0:PRIMARY> rs.status()
{
    "set" : "rs0",
    "date" : ISODate("2013-12-14T16:09:36Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "192.168.56.1:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 3207,
            "optime" : Timestamp(1387034904, 1),
            "optimeDate" : ISODate("2013-12-14T15:28:24Z"),
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "192.168.56.101:27018",
            "health" : 1,
            "state" : 6,
            "stateStr" : "UNKNOWN",
            "uptime" : 2542,
            "optime" : Timestamp(0, 0),
            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
            "lastHeartbeat" : ISODate("2013-12-14T16:09:35Z"),
            "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
            "pingMs" : 1,
            "lastHeartbeatMessage" : "still initializing"
        },
        {
            "_id" : 2,
            "name" : "192.168.56.102:27019",
            "health" : 1,
            "state" : 6,
            "stateStr" : "UNKNOWN",
            "uptime" : 2497,
            "optime" : Timestamp(0, 0),
            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
            "lastHeartbeat" : ISODate("2013-12-14T16:09:35Z"),
            "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "still initializing"
        },
        {
            "_id" : 3,
            "name" : "192.168.56.103:27020",
            "health" : 1,
            "state" : 6,
            "stateStr" : "UNKNOWN",
            "uptime" : 2472,
            "optime" : Timestamp(0, 0),
            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
            "lastHeartbeat" : ISODate("2013-12-14T16:09:36Z"),
            "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
            "pingMs" : 1,
            "lastHeartbeatMessage" : "still initializing"
        }
    ],
    "ok" : 1
}

从最后一个命令看起来replicaSet仍在初始化,但看着mongod的4个实例,我不知道,看起来这里的东西不能正常工作..

enter image description here

我想知道为什么所有节点都试图只联系忽略ohers的主要实例?为什么当连接被接受时,它再次尝试联系同一个节点,因为它说“无法加载配置”而没有这样做。我真的需要一个推力来理解问题,如果有必要的话命令输出,或一般的信息只是让我知道我会发布它们。

提前感谢任何帮助

2 个答案:

答案 0 :(得分:1)

对于其他任何绊脚石的人:

确保您的主要主机名可以从成员中解析,否则您的replSetConfig正在使用您的主要IP而不是主机名或fqdn。 默认情况下,mongo在“host”配置字段中使用主要的主机名, 如果他们没有/ etc / hosts文件中的信息,则使所有其他成员无法与之通信。

答案 1 :(得分:0)

已解决 - 我刚刚检查了mongo连接方式中所有成员之间的联系,如rubenfa在评论中建议的那样。

mongo --host 192.168.56.103 --port 27020

每个成员之间的每个连接都可以使用仅限主机适配器正常工作。

我在开始时发布的主要问题与我未在3个辅助节点内检查的事实相关,如果从先前尝试配置replicaSet创建了其他local数据库。我只是用来检查主节点,并从那里删除本地数据库,而不检查其他节点。

另外,在尝试重新配置replicaSet之前,请记住从所有节点中删除所有local dbs