防止自我管理的从节点变为主节点
Overview
在副本集中,默认情况下,所有从节点都有资格通过选举过程成为主节点。您可以使用 priority
使某些节点更有可能成为主节点,而使其他节点不太可能或无法成为主节点,从而影响这些选举的结果。
无法成为主节点的从节点也无法触发选举。这些从节点在所有其他方面都与其他从节点相同。
为防止从节点在故障转移中成为主节点,请将从节点的优先级分配为 0
,如下所述。有关仅从节点及其用途的详细说明,请参阅优先级 0 副本集成员。
Considerations
更新副本配置对象时,使用数组索引访问 members
数组中的副本集成员。数组索引以 0
开头。请勿将此索引值与 members
数组中每个文档的 members[n]._id
字段的值混淆。
注意
MongoDB 不允许当前主节点的优先级为 0
。如需防止当前主节点再次成为主节点,必须首先使用 rs.stepDown()
降级当前的主节点。
步骤
本教程使用有 5 个节点的样本副本集。
警告
rs.reconfig()
shell 方法可以强制当前的主节点下台,从而导致选举。当主服务器向下运行时,mongod
会关闭所有客户端连接。 虽然这通常需要 10-20 秒,但请尝试在计划维护期间进行这些更改。避免重新配置包含不同 MongoDB 版本节点的副本集,因为验证规则可能因 MongoDB 版本而异。
指定优先级值为0
。
如需防止从节点成为主节点,请将从节点的 members[n].priority
更新为 0
。
如需为副本集的节点分配优先级值,请使用数组索引访问节点配置文档。在本教程中,要更改的从节点对应于在 members
数组的 2
位置找到的配置文档。
cfg.members[2].priority = 0
在重新配置副本集之前,配置更改不会生效。
重新配置副本集。
使用 rs.reconfig()
方法,利用更新的副本集配置文档重新配置副本集。
将 cfg
变量传递给 rs.reconfig()
方法:
rs.reconfig(cfg)