2014-05-08 60 views
3

我正在尝试设置MongoDB测试副本集。问题是我找不到任何方法来获取错误消息,并且其中一个节点永久保留在DOWNUNKNOWN状态。无法获取节点连接到副本集

这里是从主

{ 
      "set" : "rs0", 
      "date" : ISODate("2014-05-08T00:41:11Z"), 
      "myState" : 1, 
      "members" : [ 
        { 
          "_id" : 0, 
          "name" : "mongo1:27017", 
          "health" : 1, 
          "state" : 1, 
          "stateStr" : "PRIMARY", 
          "uptime" : 3319, 
          "optime" : Timestamp(1399509356, 1), 
          "optimeDate" : ISODate("2014-05-08T00:35:56Z"), 
          "electionTime" : Timestamp(1399506359, 1), 
          "electionDate" : ISODate("2014-05-07T23:45:59Z"), 
          "self" : true 
        }, 
        { 
          "_id" : 2, 
          "name" : "mongo3:30000", 
          "health" : 1, 
          "state" : 2, 
          "stateStr" : "SECONDARY", 
          "uptime" : 319, 
          "lastHeartbeat" : ISODate("2014-05-08T00:41:11Z"), 
          "lastHeartbeatRecv" : ISODate("2014-05-08T00:41:11Z"), 
          "pingMs" : 2, 
          "syncingTo" : "mongo1:27017" 
        }, 
        { 
          "_id" : 3, 
          "name" : "mongo2:27018", 
          "health" : 1, 
          "state" : 6, 
          "stateStr" : "UNKNOWN", 
          "uptime" : 315, 
          "optime" : Timestamp(0, 0), 
          "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 
          "lastHeartbeat" : ISODate("2014-05-08T00:41:11Z"), 
          "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), 
          "pingMs" : 2, 
          "lastHeartbeatMessage" : "still initializing" 
        } 
      ], 
      "ok" : 1 
    } 

我rs.status下面是从初级

{ 
      "_id" : "rs0", 
      "version" : 12, 
      "members" : [ 
        { 
          "_id" : 0, 
          "host" : "mongo1:27017" 
        }, 
        { 
          "_id" : 2, 
          "host" : "mongo3:30000", 
          "arbiterOnly" : true 
        }, 
        { 
          "_id" : 3, 
          "host" : "mongo2:27018" 
        } 
      ] 
    } 

的问题rs.conf是mongo2:27018。我试过添加和删除它。我尝试擦拭整个盒子并重新安装Cent + Mongo。从3箱中的任何一箱,我可以mongo到其他2.所以从mongo1:27017我可以输入mongo mongo2:27018,它没有问题。所有3个盒子都具有相同的配置,我在/etc/hosts中对其进行了双倍,三倍和四倍检查。

唯一的调试信息,我能找到的任何地方是有问题的节点上运行以下块:

2014-05-08T02:45:51.763+0200 [initandlisten] connection accepted from 10.0.2.2:48720 #50 (2 connections now open) 
    2014-05-08T02:46:00.593+0200 [rsStart] trying to contact mongo1:27017 
    2014-05-08T02:46:00.602+0200 [rsStart] trying to contact mongo3:30000 
    2014-05-08T02:46:00.605+0200 [rsStart] replSet info Couldn't load config yet. Sleeping 20sec and will try again. 

任何指导表示赞赏,被在此苦苦挣扎5小时。

+0

你确定你配置正确的mongod?我的意思是replSet/keyFile(可选)/ auth? – yaoxing

回答

6

我们发现的最终问题是每个副本节点的主机名不仅需要在节点之间有效,还必须从节点到自身有效!例如,由于某些端口转发正在进行,mongo1可以通过mongo2:27018与mongo2成功通信,mongo3可以通过mongo2:27018与mongo2成功通信,但mongo2无法在mongo2:27018与自己通信它实际上是在27017听)。它为其他盒子工作的原因是,他们是mongo1和mongo3有一个别名为mongo2,这是端口转发27018到27017.

所以基本上除非每个节点都可以自己ping和其他节点从配置中的主机名不起作用!

相关问题