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