10

如果是这样,怎么做?

当我第一次创建副本集时,我选择了一个令人困惑的名称;我现在想改变它。

中提到了副本集名称/etc/mongod.conf,我不确定它何时读取/重读该名称。由于副本集名称也可以作为命令行参数传入,因此我假设(并且当前正在测试)以下内容:

  • 它只在启动时使用副本集名称,同时与其他节点同步
  • 我必须重新配置、停止、更改replSetCLI 参数或replSet/etc/mongod.conf,然后重新启动

换句话说,我假设我最初问题的答案是“不,您必须重新启动”或“不,副本集名称是不可变的”。我可能很快就会弄清楚这一点,因为我正在本地尝试。

4

3 回答 3

36

以下是如何在停机时做到这一点:

  1. 停止所有服务器
    • 如果启用了身份验证,请确保将其禁用,否则可能无法授权对 local.system.replset 集合的更改。
  2. 在没有 --replSet 选项的情况下启动每个服务器,指向正确的数据目录。
  3. 使用新的副本集名称更新每台服务器上的 local.system.replset 文档。 您必须更改此处的每台服务器。
    以下是如何在 mongo shell 中更新 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. 使用原始选项启动它们。
于 2012-06-29T17:44:00.543 回答
8

克里斯蒂娜的回答很好,但第 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'})
于 2015-06-09T22:21:44.930 回答
0

不。

请参阅mongodb-user 中的线程“更改副本集名称” ... Kristina Chodorow 断言停机时间是必要的。

一旦我弄清楚了(除非其他人击败我),我将在此处添加有关如何更改副本集名称的说明(有停机时间)。

于 2012-06-29T17:39:39.337 回答