如果副本集中的节点最大值,如何将辅助节点转换为主节点?

时间:2013-05-02 05:58:14

标签: mongodb

我正在使用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节点成为主节点的任何方式。

5 个答案:

答案 0 :(得分:17)

您可以通过以下步骤重新启动mongod服务来实现它 -

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

mongo --port 27017

从这里获取您的会员ID -

> use admin
> rs.status()

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

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

它将使您的远程激活活动成员成为主要成员并可用于应用程序和写入。

答案 1 :(得分:7)

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:2)

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

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

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]] 

成员[0]是数组中的第一个进入rs.conf()的内容 使用force选项设置为true重新配置集:

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

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

答案 4 :(得分:1)

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

相反,你必须做的是要么重新获得大部分的设置,要么你必须运行rs.reconfig()删除你的两个死亡成员。

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