在mongod进程运行时,我可以更改副本集的名称吗?

时间:2012-06-29 17:04:10

标签: mongodb

若然,怎么样?

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

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

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

换句话说,我假设我原来问题的答案是“不,你必须重启”或“否,副本集名称是不可变的”。我可能很快就会想到这一点,因为我在当地尝试它。

3 个答案:

答案 0 :(得分:33)

以下是如何使用停机时间:

  1. 停止所有服务器
    • 如果启用了身份验证,请确保已禁用身份验证,或者可能无法对local.system.replset集合进行更改。
  2. 启动每个没有--replSet选项的服务器,指向正确的数据目录。
  3. 使用新的副本集名称更新每台服务器上的local.system.replset doc。 你必须在这里更换每台服务器。
    以下是如何更新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. 使用原始选项启动它们。

答案 1 :(得分:8)

克里斯蒂娜的答案很好,但第3步可以使用更多的解释。在你的mongo shell中,编辑db.system.replset,如下所示:

getData()

答案 2 :(得分:0)

没有

thread "Change replica set name" in mongodb-user ... Kristina Chodorow断言停机是必要的。

一旦我弄明白,我会在这里添加有关如何更改副本集名称(停机时间)的说明(除非别人打败我)。