调整自管理副本集成员的优先级
概述
的优先级
设置会影响副本集成员选举为主节点的时机和结果。优先级较高的成员更有可能发起选举并赢得选举。使用此设置可以确保某些成员更有可能成为主节点,而其他成员则不可能成为主节点。选举的值决定了成员在选举中的优先级。数值越高,优先级越高。
成员的priority
设置值决定了其在选举中的优先级。数值越高,优先级越高。
考虑因素
要修改优先级,请更新副本配置对象中的members
数组。数组索引从0
开始。请勿将此索引值与数组中副本集成员的members[n]._id
字段的值混淆。
priority
的值可以是任何在0
和1000
之间的浮点数。默认值是1
。
要将成员从寻求成为主节点的选举中排除,请将其优先级设置为0
。隐式成员和延迟成员的优先级都设置为0
。
仲裁者的优先级是0
。
在计划维护窗口期间调整优先级设置。重新配置优先级可能会迫使当前主节点降级,导致选举。在选举之前,主节点会关闭所有开放的客户端连接。
优先级和投票
members[n].priority
和members[n].votes
之间的关系如下
因此,增加非投票成员的priority
需要将votes
设置为1
,并增加投票副本集成员的数量。在增加非投票成员的优先级之前,请考虑以下因素
MongoDB副本集最多可以有7个投票成员。如果副本集已经有7个投票成员,则不能修改副本集中剩余成员的优先级使其大于
0
。副本集重新配置每次只能添加或删除一个投票成员。要将多个非投票成员的优先级更改为大于
0
,需要执行一系列replSetReconfig
或rs.reconfig()
操作,每次修改一个成员。有关更多信息,请参阅每次重新配置只能添加或删除最多一个投票成员。
步骤
警告
shell方法
rs.reconfig()
可以强制当前主节点下线,这会导致选举。当主节点下线时,mongod
关闭所有客户端连接。虽然这通常需要10-20秒,但请在计划维护期间尝试进行这些更改。避免重新配置包含不同MongoDB版本成员的副本集,因为验证规则可能在不同MongoDB版本之间有所不同。
将副本集配置复制到变量中。
在mongosh
中,使用rs.conf()
获取副本集配置并将其分配给变量。例如
cfg = rs.conf()
更改每个成员的优先级值。
更改每个成员的
值,如配置在members[n].priority
members
数组中。
cfg.members[0].priority = 0.5 cfg.members[1].priority = 2 cfg.members[2].priority = 2
这一系列操作修改了 cfg
的值,以设置在 members
数组中定义的前三个成员的优先级。
分配新的配置给副本集。
使用 rs.reconfig()
应用新的配置。
rs.reconfig(cfg)
此操作使用 cfg
值定义的配置来更新副本集的配置。