【问题标题】:MongoDB replica set no primary, need to force new primaryMongoDB副本集没有主,需要强制新的主
【发布时间】:2014-04-07 16:05:35
【问题描述】:

我们有一个 mongoDB 副本集,它有 3 个节点;

  1. 主要
  2. 次要
  3. 仲裁者

不知何故,我们的副本集最终将 1 和 2 都设置为辅助成员。我不确定这是怎么发生的(我们有一个服务器迁移,其中一个节点运行,但只有一个)。

无论如何,我一直在尝试按照指南here 为副本集重新选举一个新的主节点

我不能只使用

rs.reconfig(cfg)

因为它仅在针对主要(我没有)时才有效。

使用力参数

rs.reconfig(cfg, { force: true})

似乎可以工作,但是当我重新查询副本集的状态时,两台服务器仍然只显示为辅助服务器。

为什么强制重新配置不起作用?目前,无论我尝试什么,数据库都被锁定了。

【问题讨论】:

  • 你能发布 rs.status() 的输出吗?这将提供您的副本集成员的当前状态。
  • 甚至与编程问题无关。请改为提交至dba.stackexchange.com。这里不适合与编程主题不直接相关的主题。
  • 这可能很快就会被锁定,因为它不是编程问题。您可以使用“votes”参数来调整主要docs.mongodb.org/manual/reference/replica-configuration/…,而不是尝试强制执行。一个节点永远不会为自己投票,所以无论你给多少票,都会成为次要节点。您可以简单地调整此值并强制选举切换主要
  • 好的,我去DBA网站问问。

标签: mongodb


【解决方案1】:

1.将所有节点转换为独立节点。

停止 mongod 守护进程并编辑 /etc/mongod.conf 以评论 replSet 选项。

启动 mongod 守护进程。

2.使用mongodump为所有节点备份数据。

来自 mongo 文档的参考:

https://docs.mongodb.com/manual/reference/program/mongodump/

3.登录各个节点,删除local数据库。

这样做会删除节点上的副本集配置。

或者您可以在本地数据库中删除集合system.replset 中的一条记录,就像这里所说的:

https://stackoverflow.com/a/31745150/4242454

4.使用replSet选项启动所有节点。

5.在之前的数据节点(不是仲裁器)上,初始化一个新的副本集。

6.最后,用rs.reconfig重新配置副本集。

【讨论】:

  • 救了我们,谢谢你的回答。对于其他人 - 删除本地数据库:use localdb.dropDatabase(),初始化新副本集:rs.initiate()
猜你喜欢
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多