2012-01-22 142 views
18

我想創建一個副本與MongoDB的設置,服務器主機名是:添加成員副本集上的MongoDB

主機 主機-1 主機名-2

每一個都有所有相關主機名在他們的/ etc/hosts文件中詳細說明(他們;全部運行Ubuntu 10.04 64位)

當我在一個節點上執行rs.initiate時,一切似乎都開始順利。運行rs.status();顯示:

{ 
    "set" : "vega", 
    "date" : ISODate("2012-01-22T19:15:55Z"), 
    "myState" : 1, 
    "members" : [ 
     { 
      "_id" : 0, 
      "name" : "hostname:27017", 
      "health" : 1, 
      "state" : 1, 
      "stateStr" : "PRIMARY", 
      "optime" : { 
       "t" : 1327254848000, 
       "i" : 1 
      }, 
      "optimeDate" : ISODate("2012-01-22T17:54:08Z"), 
      "self" : true 
     } 
    ], 
    "ok" : 1 
} 

問題出現在我嘗試向副本集添加新成員時。我使用命令rs.add(hostname-1);我得到以下錯誤:

{ 
    "assertion" : "need most members up to reconfigure, not ok : vega-1:27017", 
    "assertionCode" : 13144, 
    "errmsg" : "db assertion failure", 
    "ok" : 0 
} 

我嘗試使用主機名,IP地址,既沒有端口號,我總是得到同樣的問題的多種組合。主機名解析,我試過ping主機名-1,它工作正常。

有沒有人有什麼想法可能會導致這個問題?

不幸的是,在Mongo文檔中,沒有在真實世界場景中設置副本集的示例,僅在同一臺機器上使用三個實例顯然是無用的。

在此先感謝您的幫助!

+0

我首先看的是每個服務器的'mongodb.log'文件。 (a)服務器是否正在彼此交談,如果是的話(b)主服務器發現對於木匠有什麼不良反應,可能有一些好的提示。 – dampier

回答

2

Unfortunately in the Mongo documentation there are no examples of setting up a replica set in the real world scenario, only using three instances on the same machine which is clearly useless.

同意,它很差。該示例應該從文檔中完全刪除。

還有另一種方法來啓動副本集,即使用rs.configure()命令。您也可以一次指定所有三個節點,然後發出rs.inititiate()

See here有關在啓動之前指定所有節點的示例。

See here有關各種命令的更多詳細信息。

10

當您添加非「向上」(尚)的節點時會發生此錯誤。這聽起來像無論是「主機名-1」不可達(在/ etc/hosts文件,沒有DNS),或者是可達但不運行的MongoDB與replSet配置參數設置

14

在您的配置中刪除此:

bind_ip = 127.0.0.1 

該選項目前與mongodb副本集不兼容。

+3

或將其設置爲bind_ip = 0.0.0.0 –

3
 
{ 
    "errmsg" : "exception: need most members up to reconfigure, not ok : server2:27017", 
    "code" : 13144, 
    "ok" : 0 
} 

我在Mongo 2.4.9中遇到了上述錯誤。我的錯誤在於,我沒有在新副本成員的mongo配置中指定replSetrs.add("server2:27017")之後運作良好。

0

在將第二個節點添加到node1之前,您可能需要檢查mongod是否正在第二個節點上運行。如果它正在運行rs.add(),然後檢查rs.status()。

相關問題