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

Ada*_*sen 10 mongodb

如果是这样,怎么样?

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

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

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

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

kri*_*ina 34

以下是停机时间的方法:

  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'})
    
    Run Code Online (Sandbox Code Playgroud)
  4. 再次关闭它们.
  5. 将/etc/mongod.conf replSet选项更改为所有服务器上的新名称.
  6. 使用原始选项启动它们.

  • 我这样做了第3步:剪切`mongo` shell中`db.system.replset.find()`返回的所有JSON,粘贴文本编辑器,更改`_id`值,在`db.system中使用编辑过的JSON. replset.update({},<NEW_JSON>)`. (2认同)

小智 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'})
Run Code Online (Sandbox Code Playgroud)