2011-10-31 79 views
6

我在ubuntu上有一個mongodb replicaset。在副本集中,主機被定義爲localhost。你可以看到;mongodb replicaset主機名更改錯誤

{ 
    "_id" : "myrep", 
    "version" : 4, 
    "members" : [ 
      { 
        "_id" : 0, 
        "host" : "localhost:27017" 
      }, 
      { 
        "_id" : 2, 
        "host" : "localhost:27018" 
      }, 
      { 
        "_id" : 1, 
        "host" : "localhost:27019", 
        "priority" : 0 
      } 
    ] 

}

我想換主機與不會忽略服務器的真實IP。但是當我運行rs.reconfig,我得到錯誤:

{ 
    "assertion" : "hosts cannot switch between localhost and hostname", 
    "assertionCode" : 13645, 
    "errmsg" : "db assertion failure", 
    "ok" : 0 

}

我該怎麼解決呢? 謝謝。

回答

1

我發現更改主機名的唯一方法是重新創建副本集。爲了使其正確,db目錄需要清理。然後啓動具有複製模式的所有服務器,然後使用新主機名創建新的repset並將其修復。

19

還有就是要做到這一點更清潔的方式:

use local 
cfg = db.system.replset.findOne({_id:"replicaSetName"}) 
cfg.members[0].host="newHost:27017" 
db.system.replset.update({_id:"replicaSetName"},cfg) 

然後重新啓動蒙戈

+1

這工作 - 你必須重新啓動後的mongod,以確保新主機設置回升。成功後,「rs.status()」將爲每個成員返回正確的主機名。 – seanhodges

+2

這繞過了改變主機的錯誤,但我發現我也必須執行cfg = rs.conf(); rs.reconfig(CFG);重新啓動後,使這個堅持。 – asparagino