【问题标题】:How to update _id in Mongodb Replica Set configuration?如何在 Mongodb 副本集配置中更新 _id?
【发布时间】:2017-11-08 02:35:27
【问题描述】:

我在副本集中有 5 个 mongo 成员。在我从中删除 3 之后。

如何将其他成员中的“_id”更改为值“0”、“1”和“2”?

rs.conf()
{
        "_id" : "rs0",
        "version" : 151261,
        "members" : [
                {
                        "_id" : 3,
                        "host" : "mongodb3:27017"
                },
                {
                        "_id" : 4,
                        "host" : "mongodb4:27017"
                },
                {
                        "_id" : 5,
                        "host" : "ok:27017",
                        "arbiterOnly" : true
                }
        ]
}

【问题讨论】:

  • 你找到解决办法了吗?
  • @Macindows 我没找到

标签: mongodb replicaset


【解决方案1】:

直接编辑副本集配置可能不是一种优雅的方式。而是使用rs.remove(hostname) 命令从副本集中删除成员,这样您就不必在重新配置期间关闭主节点,这会自动将升序值分配给“_id”字段。

【讨论】:

  • 我不太明白这些步骤。我试图删除一个成员,但在此成员自动采用旧值 _id(4 或 5)
【解决方案2】:

尝试按照此处所述删除从属集合:http://docs.mongodb.org/manual/tutorial/troubleshoot-replica-sets/#duplicate-key-error-on-local-slaves

master 将在下次需要时重新创建集合。

【讨论】:

  • 此选项已被移除 mongo 4+
【解决方案3】:

您可以在 Mongo 控制台中尝试此操作:

conf = rs.conf()

conf.members[0]._id = 0
conf.members[1]._id = 1
conf.members[2]._id = 2

rs.reconfig(conf)

【讨论】:

  • 这显然是我尝试的第一件事,但出现错误“新旧配置都有主机为 HOST:27017 的成员,但在新配置中,_id 字段为 MemberId(0),在旧配置它是副本集 setname 的 MemberId(4)"
猜你喜欢
  • 1970-01-01
  • 2020-12-30
  • 2014-06-06
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2015-09-17
相关资源
最近更新 更多