调整自管理副本集节点的优先级
Overview
副本集节点的 priority
设置会影响主节点选举的时间和结果。优先级较高的节点更有可能举行选举,也更有可能获胜。使用此设置可确保某些节点更有可能成为主节点,而其他节点永不会成为主节点。
Considerations
要修改优先级,请更新副本配置对象中的 members
数组。数组索引以 0
开头。请勿将此索引值与数组中副本集节点的 members[n]._id
字段的值混淆。
priority
的值可为介于 0
与 1000
之间的任意浮点数(即,十进制数)。priority
字段的默认值为 1
。
要阻止某一成员寻求当选为主节点,请为其分配优先级 0
。隐藏成员和延迟成员会将 priority
设为 0
。
仲裁节点具有优先级 0
。
在计划的维护窗口期间调整优先级设置。重新配置优先级可能会迫使当前主节点退出,从而触发选举。选举前,主节点会关闭所有已打开的客户端连接。
优先级与投票
members[n].priority
和 members[n].votes
具有以下关系:
因此,增加非投票权节点的 priority
需要将 votes
设置为 1
并增加副本集投票节点的数量。在提高非投票节点的优先级之前,请考虑以下因素:
MongoDB 副本集的投票节点不能超过 7 个。如果副本集已有 7 个投票节点,则无法将副本集中任何剩余节点的优先级修改为大于
0
。副本重新配置一次最多可以添加或删除一个投票节点。要更改多个非投票节点,以实现大于
0
的优先级,请发出一系列replSetReconfig
或rs.reconfig()
操作,一次修改一个节点。请参阅重新配置一次最多可以添加或删除一个投票节点,了解更多信息。
步骤
警告
rs.reconfig()
shell 方法可以强制当前的主节点下台,从而导致选举。当主服务器向下运行时,mongod
会关闭所有客户端连接。 虽然这通常需要 10-20 秒,但请尝试在计划维护期间进行这些更改。避免重新配置包含不同 MongoDB 版本节点的副本集,因为验证规则可能因 MongoDB 版本而异。
更改每个节点的优先级值。
按照 members
数组中的配置更改每个节点的 members[n].priority
值。
cfg.members[0].priority = 0.5 cfg.members[1].priority = 2 cfg.members[2].priority = 2
这一系列操作会修改 cfg
的值,为 members
数组中定义的前三个节点设置优先级。
为副本集分配新配置。
使用 rs.reconfig()
应用新配置。
rs.reconfig(cfg)
此操作使用 cfg
的值定义的配置,更新副本集的配置。