11

我正在使用带有副本集的 mongodb,它有 3 个节点,它们的 ip 是 192.168.1.100 、 192.168.1.101,192.168.1.102 。

在我当前的设置中, 192.168.1.100 是主要的,其他是次要的。我已将 192.168.1.100 和 192.168.1.101 的优先级设置为 1 和 192.168.1.102 为 0 ,现在经过一段时间后,我的 192.168.1.100 和 192.168.1.101 两个节点都下来了。

我想强制 192.168.1.102 成为主要的,这样我的应用程序才能生效。他们是否有任何方式强制将 192.168.1.102 节点转换为主节点。

4

5 回答 5

24

您可以通过以下步骤在不重启 mongod 服务的情况下实现它-

连接到活动成员假设它在 localhost 上的 27017 端口上运行:

mongo --port 27017

从这里获取您的会员 ID-

> use admin
> rs.status()

假设您的活动成员 ID 为 1。然后按照以下步骤重新配置您的复制 -

> cfg = rs.conf()
> cfg.members = [cfg.members[1]]
> rs.reconfig(cfg, {force : true})

它将使您的活跃会员成为主要会员,并可用于申请和写作。

于 2016-02-22T09:12:27.950 回答
7

当大多数成员无法访问时,您可以按照此处的步骤重新配置副本集。

由于副本集中只剩下一个节点,因此您的数据将不会被复制。一旦这两个节点还活着,您最好将它们添加回来。

于 2013-05-02T08:24:17.577 回答
7

我通过以下方式解决了我的问题:

连接到幸存的成员并保存当前配置。考虑以下用于保存配置的示例命令:

cfg = rs.conf()
printjson(cfg)

在同一个成员上,通过将数组设置为仅与幸存成员相等,从成员数组中删除副本集的故障和无法访问的成员。

让我们只剩下一个成员

# Don't c/p if you have more than 1 node in your replica set
cfg.members = [cfg.members[0]] 

member[0] 是数组中第一个在 rs.conf() 中获取的内容,使用 force 选项设置为 true 重新配置集合:

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

现在您可以看到幸存的成员现在是 PRIMARY。来源:https ://docs.mongodb.com/v3.4/tutorial/reconfigure-replica-set-with-unavailable-members/

于 2017-08-04T09:48:04.470 回答
4

克服这种情况的解决方案是,如果副本集中只剩下一个节点并且该节点是辅助节点(优先级为 0),则首先关闭节点从副本集中提取节点(通过 mongod.conf 中的注释 repliSet 行或启动 mongo转到 mongo 命令行,使用 system.replset 中的本地修改记录并删除记录),然后将节点作为独立的 mongodb 启动 :)

于 2013-05-03T11:11:08.873 回答
1

在这种情况下并非没有人工干预。你还会遇到另一个问题。该集合的大部分将处于脱机状态,这意味着即使没有优先级 0,您剩余的副本成员也不会成为主要成员。

相反,您必须做的是要么恢复大部分集合,要么您必须运行rs.reconfig()删除集合中的两个死成员。

您可以在此处找到示例等:http: //docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/

于 2013-05-02T09:25:48.867 回答