防止中学成为小学

在本页面

Overview

在副本集中,默认情况下,所有secondary成员都有资格通过选举过程成为主要成员。您可以使用priority影响某些选举的结果,使某些成员更有可能成为主要成员,而另一些成员则不太可能或无法成为主要成员。

无法成为主要角色的中学也无法触发选举。在所有其他方面,这些中学与其他中学相同。

为了防止secondary成员成为failover中的primary,请为辅助节点分配0的优先级,如此处所述。有关仅次要成员及其用途的详细说明,请参见优先级 0 副本集成员

Considerations

更新副本配置对象时,请使用 array index 访问members数组中的副本集成员。数组索引以0开头。不要将此索引值与members数组中每个文档中members[n]._id字段的值混淆。

Note

MongoDB 不允许当前的primary拥有0的优先级。为了防止当前的主节点再次成为主节点,您必须首先使用rs.stepDown()降级当前的主节点。

Procedure

本教程使用具有 5 个成员的 samples 副本集。

Warning

  • rs.reconfig() shell 方法可以强制当前主节点降级,从而导致election。当主服务器降级时,mongod关闭所有 Client 端连接。尽管这通常需要 10 到 20 秒,但请尝试在计划的维护期间进行这些更改。

  • 避免重新配置包含不同 MongoDB 版本成员的副本集,因为验证规则在 MongoDB 版本之间可能有所不同。

检索当前副本集配置。

rs.conf()方法返回一个副本集配置文档,其中包含副本集的当前配置。

在连接到主要数据库的mongo shell 中,运行rs.conf()方法并将结果分配给变量:

cfg = rs.conf()

返回的文档包含一个members字段,该字段包含一组成员配置文档,每个副本集成员一个文档。

将优先级分配为 0.

为了防止次要成员成为主要成员,请将次要成员的members[n].priority更新为0

要将优先级值分配给副本集的成员,请使用数组索引访问成员配置文档。在本教程中,要更改的辅助成员与在members阵列的位置2处找到的配置文档相对应。

cfg.members[2].priority = 0

只有重新配置副本集,配置更改才会生效。

重新配置副本集。

使用rs.reconfig()方法使用更新的副本集配置文档重新配置副本集。

cfg变量传递给rs.reconfig()方法:

rs.reconfig(cfg)