2013-05-28 83 views
2

我想配置一個MongoDB副本集但每次嘗試添加失敗的另一個成員。無法將成員添加到MongoDB副本集

我有3個成員我正在嘗試配置。他們的mongod.conf文件全部如下所示:

# mongo.conf 

#where to log 
logpath=/log/mongod.log 

logappend=true 

# fork and run in background 
fork = true 
smallfiles=true 
rest=true 
port = 27017 
replSet=KidzpaceReplSet 
dbpath=/data 

隨着端口的接受。他們分別是27017(小學),27018(中學)和27019(仲裁員)。

我已驗證會員可以看到對方:

[[email protected] ~]$ mongo --host 174.129.232.170 --port 27018 
MongoDB shell version: 2.4.3 
connecting to: 174.129.232.170:27018/test 
> 

[[email protected] ~]$ mongo --host 174.129.230.20 --port 27017 
MongoDB shell version: 2.4.3 
connecting to: 174.129.230.20:27017/test 
> 

當添加第二個成員集合返回OK:

KidzpaceReplSet:PRIMARY> rs.add("174.129.232.170:27018") 
{ "ok" : 1 } 

然而無論下一個命令我跑是,在這種情況下,它添加我的仲裁者,該集合失敗,出現此錯誤:

KidzpaceReplSet:PRIMARY> rs.add("174.129.232.177:27019", true) 
Tue May 28 20:24:07.139 DBClientCursor::init call() failed 
Tue May 28 20:24:07.140 trying reconnect to 127.0.0.1:27017 
Tue May 28 20:24:07.141 reconnect 127.0.0.1:27017 ok 
reconnected to server after rs command (which is normal) 

這是日誌文件E:

Tue May 28 20:44:06.173 [rsStart] replSet I am domU-12-31-39-06-C4-74:27017 
Tue May 28 20:44:06.173 [rsStart] replSet STARTUP2 
Tue May 28 20:44:07.175 [rsSync] replSet SECONDARY 
Tue May 28 20:44:07.175 [rsMgr] replSet info electSelf 0 
Tue May 28 20:44:08.174 [rsMgr] replSet PRIMARY 
Tue May 28 20:44:29.813 [conn1] replSet replSetReconfig config object parses ok, 2 members specified 
Tue May 28 20:44:29.817 [conn1] replSet replSetReconfig [2] 
Tue May 28 20:44:29.817 [conn1] replSet info saving a newer config version to local.system.replset 
Tue May 28 20:44:29.834 [conn1] replSet saveConfigLocally done 
Tue May 28 20:44:29.834 [conn1] replSet info : additive change to configuration 
Tue May 28 20:44:29.834 [conn1] replSet replSetReconfig new config saved locally 
Tue May 28 20:44:39.835 [rsHealthPoll] DBClientCursor::init call() failed 
Tue May 28 20:44:39.835 [rsHealthPoll] replset info 174.129.232.170:27018 heartbeat failed, retrying 
Tue May 28 20:44:40.834 [rsHealthPoll] DBClientCursor::init call() failed 
Tue May 28 20:44:40.834 [rsHealthPoll] replSet info 174.129.232.170:27018 is down (or slow to respond): 
Tue May 28 20:44:40.835 [rsHealthPoll] replSet member 174.129.232.170:27018 is now in state DOWN 
Tue May 28 20:44:40.835 [rsMgr] replSet total number of votes is even - add arbiter or give one member an extra vote 
Tue May 28 20:44:40.835 [rsMgr] can't see a majority of the set, relinquishing primary 
Tue May 28 20:44:40.835 [rsMgr] replSet relinquishing primary state 
Tue May 28 20:44:40.835 [rsMgr] replSet SECONDARY 
Tue May 28 20:44:40.835 [rsMgr] replSet closing client sockets after relinquishing primary 
Tue May 28 20:44:42.044 [conn1] end connection 127.0.0.1:58727 (0 connections now open) 
Tue May 28 20:44:46.150 [rsHealthPoll] replSet member 174.129.232.170:27018 is up 
Tue May 28 20:44:46.151 [rsMgr] replSet not electing self, not all members up and we have been up less than 5 minutes 
Tue May 28 20:44:52.156 [rsMgr] replSet not electing self, not all members up and we have been up less than 5 minutes 

UPDATE

我想知道如果可能的問題是,當我運行rs.initiate()。它給了我這個輸出:

{ 
    "set" : "KidzpaceReplSet", 
    "date" : ISODate("2013-05-28T20:59:05Z"), 
    "myState" : 1, 
    "members" : [ 
     { 
      "_id" : 0, 
      "name" : "domU-12-31-39-06-C4-74:27017", 
      "health" : 1, 
      "state" : 1, 
      "stateStr" : "PRIMARY", 
      "uptime" : 23, 
      "optime" : { 
       "t" : 1369774732, 
       "i" : 1 
      }, 
      "optimeDate" : ISODate("2013-05-28T20:58:52Z"), 
      "self" : true 
     } 
    ], 
    "ok" : 1 
} 

請注意會員的名字? "name" : "domU-12-31-39-06-C4-74:27017"這個名字來自哪裏?這不是我的IP地址。我不確定,但也許這可能是問題的根源。

回答

3

所以事實證明,rs.initiate()可能會給成員啓動它的某種內部別名,因爲它的IP地址。我的情況是:domU-12-31-39-06-C4-74。

到輔助的初始連接是好的,因爲主要是煽動它。但是,由於中學現在有這個別名,當它試圖回話的主要,它失敗。

的解決方案是一個複製現有配置: CFG = rs.conf()

手動更改主節點的名稱(主機): cfg.members [0]。主持人= 666.666。 666.666:27017

並重新配置副本集: rs.reconfig(cfg)