我试图实现MongoDB的复制,在虚拟机的形式,由4个节点,MongoDB的replicaSet配置 - 奇怪的行为
信息:我使用VirtualBox的,并且v.machines相互throught的comunicate 主机专用适配器。通信已经过测试,并且ervery节点可以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个实例,我不知道,这似乎是这样的东西不能正常工作..
我想知道为什么所有的节点都试图联系只有主实例忽略其他?以及为什么当连接被接受时,它再次尝试联系同一个节点,因为它没有这样做,因为它说“无法加载配置”..我真的需要一个推动力来理解问题,如果有必要的话命令输出,或一般信息只是让我知道我会发布它们。
在此先感谢您的帮助
虽然您使用ping检查了网络连接,但您是否试图在两个方向连接服务器?我的意思是,你应该能够从一台服务器连接到所有其他服务器的外壳。也许你的防火墙阻止了连接。 – rubenfa
如果一个节点看不到一个主节点,那就像是经常触发一个选举。没有主副本集不被认为是一致的。每个节点都需要注册到当前的主节点,并且需要能够从该主节点获取信息,即使它仍然继续从辅助节点进行同步。 – Sammaye
@rubenfa:你的意思是连接到“mongo --port 27019”的方式,不,我没有尝试过,我认为pinging被占用,我会尽快检查这种方式 – lese