2013-12-14 38 views
1

我试图实现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个实例,我不知道,这似乎是这样的东西不能正常工作..

enter image description here

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

在此先感谢您的帮助

+0

虽然您使用ping检查了网络连接,但您是否试图在两个方向连接服务器?我的意思是,你应该能够从一台服务器连接到所有其他服务器的外壳。也许你的防火墙阻止了连接。 – rubenfa

+0

如果一个节点看不到一个主节点,那就像是经常触发一个选举。没有主副本集不被认为是一致的。每个节点都需要注册到当前的主节点,并且需要能够从该主节点获取信息,即使它仍然继续从辅助节点进行同步。 – Sammaye

+0

@rubenfa:你的意思是连接到“mongo --port 27019”的方式,不,我没有尝试过,我认为pinging被占用,我会尽快检查这种方式 – lese

回答

0

解决 - 我只是检查连接中间人像rubenfa蒙戈连接的方式,所有成员在他的评论暗示。

mongo --host 192.168.56.103 --port 27020 

和各成员之间的每个连接工作正常使用,只有主机适配器。

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

还有,记得从所有节点删除所有local DBS之前,请尝试重新配置replicaSet

1

为别人绊倒在此:

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