2013-05-02 49 views
7

我使用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

解决方案从这种情况来克服困难是,如果只有一个节点保持在副本集和节点二次(有优先级0),那么第一个关闭的节点提取物节点从副本集(通过评论repliSet行从mongod.conf或启动mongo去mongo命令行使用本地修改记录从system.replset和删除记录),然后启动节点作为一个独立的mongodb :)

7

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

由于副本集中只剩下一个节点,因此不会复制您的数据。一旦他们活着,你最好把这两个节点加回去。

1

在这种情况下不需要手动干预。你也会遇到另一个问题。该集合的大部分将离线,这意味着即使没有0的优先级,您的剩余副本成员也不会成为主要成员。

相反,你必须做的是或者获得大部分备份,或者你必须运行一个rs.reconfig()删除你的设置的两个死者。

要查看您的实例等在这里:http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/

+0

大家好, 感谢您的回复,我没有在给定的URL.Below提到的所有步骤是当我运行查询错误: cfg.members = [cfg.member [0] 周四16年5月2日:52:46.168的JavaScript执行失败:类型错误:无法读取属性 '0' 未定义 rs.reconfig(CFG {力:真正})的 { “ERRMSG”:“异常:启动和重新配置的副本集必须发送到可成为主节点的节点“, ”code“:13420, ”ok“:0 } – Rajnish 2013-05-02 11:26:42

+0

@ user2334519什么是ddi配置ob ject看起来像当你发送它?我想可能是'cfg.members = [cfg.member [0]]'应该是'cfg.members = [cfg.members [0]]' – Sammaye 2013-05-02 12:52:12

+0

看到下面的错误,mongoreplset1:SECONDARY> cfg = rs.conf () mongoreplset1:SECONDARY> printjson(cfg) mongoreplset1:SECONDARY> cfg.members = [cfg.members [0]] [{“_id”:0,“host”:“192.168.1.197:27017”,“优先级“:0}] mongoreplset1:SECONDARY> rs.reconfig(cfg,{force:true}) ”errmsg“:”例外:必须将副本集的启动和重新配置发送到可以成为主要“, ”code“:13420, ”ok“:0 } – Rajnish 2013-05-03 06:26:00

12

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

c ONNECT以积极成员想这是在本地主机上运行的27017端口:

mongo --port 27017 

从这里 -

> use admin 
> rs.status() 

让你的会员ID假设你的积极成员ID为1,然后重新配置复制按以下步骤-

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

它会使您的remiaining活动成员主要和可用于应用程序和写入。

连接到幸存下来的成员,并保存当前配置:

+0

要点,谢谢:) – Sohail 2016-04-18 13:06:40

+0

是否有任何方法来自动执行此操作?如果这种情况发生在午夜,那么在午夜需要有人来运行这个命令 – Nayan 2017-02-12 05:46:29

0

我通过如下以下sloved我的问题。考虑下面的例子用于保存配置命令:

cfg = rs.conf() 
printjson(cfg) 

在同一构件,通过使阵列等于单独存活的成员删除成员阵列设置的副本的向下和无法访问的成员。

我们只有单件仍然

cfg.members = [cfg.members[0]] 

成员[0]是一组用force选项设置为true,一个是在弗里斯特在数组中rs.conf得到什么() 重新配置:

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

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

相关问题