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

Raj*_*ish 9 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节点成为主NODE的任何方法.

Zaf*_*lik 18

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

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

mongo --port 27017
Run Code Online (Sandbox Code Playgroud)

从这里获取您的会员ID-

> use admin
> rs.status()
Run Code Online (Sandbox Code Playgroud)

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

> cfg = rs.conf()
> cfg.members = [cfg.members[1]]
> rs.reconfig(cfg, {force : true})
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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

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


Vas*_*007 7

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

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

cfg = rs.conf()
printjson(cfg)
Run Code Online (Sandbox Code Playgroud)

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

让我们只剩下一个成员

# Don't c/p if you have more than 1 node in your replica set
cfg.members = [cfg.members[0]] 
Run Code Online (Sandbox Code Playgroud)

成员 [0] 是数组中的第一个成员,在 rs.conf() 中获得的内容重新配置该集合,并将 force 选项设置为 true:

rs.reconfig(cfg, {force : true})
Run Code Online (Sandbox Code Playgroud)

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


Raj*_*ish 4

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