2012-11-28 89 views
16

在mongodb中配置副本集時我犯了一個錯誤。我認爲我做錯了什麼是我在兩個節點上都做了一個rs.initialize(),這使得它們在某種程度上變得困惑。我不確定。從mongodb中的副本配置開始

現在我想要做的就是重新開始,但我找不到一種方法來取消初始化節點。所以我按照建議刪除本地* db文件,從而重置配置。我做到了,現在沒有任何工作。

> rs.initiate() 
{ 
    "info2" : "no configuration explicitly specified -- making one", 
    "me" : "0.0.0.0:27017", 
    "errmsg" : "couldn't initiate : can't find self in the replset config", 
    "ok" : 0 
} 
> rs.conf() 
null 

我試圖刪除並重新安裝包(我在Ubuntu服務器這樣做),這只是意味着我mongodb.conf消失了,我的init腳本停止工作。這當然很容易解決。

那麼我該如何重新開始?

注:我沒看this answer,但由於rs.conf()不起作用,這也不起作用。

回答

25

如果您強制使用您生成的配置進行重新配置,它是否可以解決問題?

你能做到這一點類似於從{{蒙戈}}殼後續:

> cfg = { 
...  "_id" : "rs0", 
...  "version" : 1, 
...  "members" : [ 
...   { 
...    "_id" : 0, 
...    "host" : "0.0.0.0:27017" 
...   } 
...  ] 
... } 

>rs.reconfig(cfg, {force:true}) 

您可能需要調整cfg變量有你的主機名和端口名,爲can't find self in new replset config錯誤將被退回如果repl集在配置中找不到它正在運行的節點,則返回到shell。

+5

我不得不使用'rs.initiate(cfg)'而不是'rs.reconfig',否則這個工作完美! – obeq

+2

爲我工作,我不得不使用''主機「:」127.0.0.1:27017「'和'rs.initiate'。 mongo服務器'2.0.4-1ubuntu2.1'在ubuntu精確 – danza

+0

我也不得不使用rs.initiate(cfg) – machunter

54

如果您的計算機的主機名不映射回127.0.0.1,您也會收到此錯誤。更新你的/ etc/hosts和/或你的/ etc/hostname,並且rs.initiate()不需要配置。

+2

修復了我的問題,謝謝。如果您在雲實例上更改主機名,請確保將新主機名添加到/ etc/hosts中 –

+1

我也通過確保您分配的IP地址也綁定到/ etc/mongod中的bind_ip設置來更正此問題。 conf文件。顯然它綁定到127.0.0.1並不總是足夠的。 – Felby

+2

必須做類似的事情:由於局域網IP已解析,但不是127.0.0.1,我添加了兩個 - 「bind_ip = 10.10.1.1,127.0.0.1」。 –

9

如果您只是在中註釋掉bind_ip,則會達到正確的結果,因此您可以重新發出rs.initiate()命令來設置或重新配置副本。