调整副本集成员的优先级

在本页面

Overview

副本集成员的priority设置同时影响主要对象的elections的时间和结果。优先级较高的成员更有可能举行选举,也更有可能赢得选举。使用此设置可确保某些成员更有可能成为主要成员,而另一些成员永远不会成为主要成员。

成员的priority设置的值确定选举中的成员的priority。数字越高,优先级越高。

Considerations

若要修改优先级,请更新副本配置对象中的members数组。数组索引以0开头。请勿将此索引值与数组中副本集成员的members[n]._id字段的值混淆。

priority的值可以是01000之间的任何浮点数(即十进制)。 priority字段的默认值为1

要阻止成员寻求选举为主要成员,请将其优先级设置为0Hidden membersdelayed memberspriority设置为0

在 3.2 版中进行了更改:-非投票成员的priority必须为 0.

在 3.6 版中进行了更改:从 MongoDB 3.6 开始,仲裁者的优先级为0。将副本集升级到 MongoDB 3.6 时,如果现有配置的仲裁者的优先级为1,则 MongoDB 3.6 会将仲裁器的优先级重新配置为0

在计划的维护时段内调整优先级设置。重新配置优先级可能会迫使当前的主数据库降级,从而导致选举。选举前,主要服务器将关闭所有打开的client连接。

Procedure

Warning

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

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

将副本集配置复制到变量。

mongo shell 中,使用rs.conf()检索副本集配置并将其分配给变量。例如:

cfg = rs.conf()

更改每个成员的优先级值。

按照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定义的配置更新副本集的配置。