2015-04-20 56 views
7

我正在嘗試部署mongodb副本集。我已經將我的mongodb實例作爲副本的主要實例。我現在想加在不同的IP地址託管於其他MongoDB實例,作爲次要的副本,但我得到了以下錯誤:在mongodb副本集中添加輔助實例時出錯

rs0:PRIMARY> rs.add("<ip address>:27017") 
{ 
    "ok" : 0, 
    "errmsg" : "Either all host names in a replica set configuration must be localhost references, or none must be; found 1 out of 2", 
    "code" : 103 
} 

我做錯了嗎?

回答

0

新添加的副本集成員的IP地址是否解析爲localhost?或者,您已有的成員是否解析爲本地主機?無論哪種方式,副本集都不會允許混合的本地主機/非本地主機配置。

看看這條消息的source code location

此外,Mongo guide on sharding這樣說:

如果您使用「本地主機」或127.0.0.1作爲 主機名部分的任何主機標識符,例如作爲主機參數addShard或 值到--configdb運行時選項,那麼對於集羣中任何MongoDB實例的所有主機設置,必須使用 「localhost」或127.0.0.1。如果你混合使用localhost地址和遠程的主機地址,MongoDB會報錯。

這同樣適用於副本集。

+0

如何試圖通過SSH隧道來添加成員時,處理這個任何想法? –

+0

對不起,我不能說蝙蝠。但理論上隧道應該是透明的,因此不會有所作爲。但是你必須嘗試一下。 –

+0

問題是可以通過「localhost:」訪問隧道,但我需要將主MongoDB綁定到127.0.0.1和172.17.0.1,因爲Docker中的容器需要訪問它。那麼這就是172.17.0.1導致的麻煩。這裏有一個更好的解釋https://dba.stackexchange.com/questions/173911/mongodb-replica-set-over-ssh-tunnels –

4

我面對這個問題,當我試圖在同一臺機器上運行兩個mongod實例。當我提供像

rs.add("localhost:27027") 
    (or) 
    rs.add("127.0.0.1:27027") 

其中27027是次要的端口號,它拋出錯誤。

解決方案:

傳遞主機名而不是IP地址

rs.add("myhostname:27027") 
相關問題