2011-10-31 11 views
6

私はubuntuでmongodbレプリカセットを持っています。レプリカセットでは、ホストはlocalhostとして定義されています。あなたは見ることができます。mongodbレプリカセットホスト名変更エラー

{ 
    "_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

この作品のMongo再起動する - あなたは、新しいホスト設定がピックアップされていることを確認するために、その後のmongod再起動する必要があります。成功すると、 "rs.status()"は各メンバの正しいホスト名を返します。 – seanhodges

+2

これはホストを変更するエラーを回避しますが、cfg = rs.conf()も実行しなければならないことがわかりました。 rs.reconfig(cfg);このスティックを作るために再起動した後。 – asparagino