2012-06-29 44 views
9

如果是這樣,怎麼樣?當mongod進程正在運行時,我可以更改我的副本集的名稱嗎?

當我第一次創建副本集時,我選擇了一個令人困惑的名字;我想現在改變它。

副本集名稱在/etc/mongod.conf中提及,我不確定它何時讀取/重讀。由於副本集的名稱也可以通過作爲命令行參數,我假設(和目前正在測試)以下:

  • 它只是在啓動時使用副本集的名字一次,而與其他節點同步起來
  • 我必須重新配置,停止,改變replSet CLI參數或/etc/mongod.confreplSet值,然後重新啓動

換句話說,我假設的答案,我原來的問題是「不,你必須重新啓動」或「否,副本集名稱是不可變的」。因爲我在本地嘗試,所以我很快可以弄清楚這一點。

+0

不,你不能那樣做。無論如何,你爲什麼想要? –

+1

我會在我的帖子中提到爲什麼。如果你確定「否」是答案,爲什麼不回答這個問題呢? –

+0

我忘記了更改RS名稱的確切步驟(這就是爲什麼我沒有發佈這個答案),但它肯定涉及重新啓動mongod和刪除一些數據。 –

回答

32

以下是如何與停機時間做到這一點:

  1. 停止所有服務器
    • 如果啓用身份驗證,請確保它被禁用或更改local.system.replset集合可能不是授權。
  2. 啓動每個沒有--replSet選項的服務器,指向正確的數據目錄。
  3. 使用新的副本集名稱更新每個服務器上的local.system.replset文檔。 您必須在此更改每臺服務器。
    這裏是如何在蒙戈外殼更新local.system.replset:

    use local 
    var doc = db.system.replset.findOne() 
    doc._id = 'NewReplicaSetName' 
    db.system.replset.save(doc) 
    db.system.replset.remove({_id:'OldReplicaSetName'}) 
    
  4. 再次將其關閉。
  5. 將/etc/mongod.conf replSet選項更改爲所有服務器上的新名稱。
  6. 以原始選項啓動它們。
+0

爲我工作,謝謝! –

+2

我這樣做了第3步:在'mongo' shell中剪切從'db.system.replset.find()'返回的所有JSON,粘貼文本編輯器,更改'_id'值,在'db.system中使用已編輯的JSON .replset.update({},)'。 –

+1

你需要使用findOne,找不到,但除此之外聽起來不錯。 – kristina

0

thread "Change replica set name" in mongodb-user號......克里斯蒂娜·喬多羅聲稱,停機時間是必要的。

一旦我弄明白了(除非別人讓我跳動),我將在這裏添加有關如何更改副本集名稱(帶有停機時間)的說明。

+0

曾經有一個官方wiki頁面,如果我沒有弄錯。 –

7

克里斯蒂娜的答案是好的,但第3步可以使用一點點的解釋。在你的mongo shell中,像這樣編輯db.system.replset:

use local 
var doc = db.system.replset.findOne() 
doc._id = 'NewReplicaSetName' 
db.system.replset.save(doc) 
db.system.replset.remove({_id:'OldReplicaSetName'}) 
+1

如果您認爲要添加,則應改進原始答案值。 – whihathac

相關問題