强制会员成为主要会员

在本页面

Overview

您可以通过为replica set成员提供比集合中其他任何成员更高的members[n].priority值来使其成为primary

(可选)您还可以通过将成员的members[n].priority值设置为0来强制成员永不成为主要成员,这意味着该成员永远不会将election当作主要成员。有关更多信息,请参见优先级 0 副本集成员

有关优先级的更多信息,请参见members[n].priority

Consideration

副本集的大多数已配置成员必须可用于集合重新配置集合或选择主副本。有关更多信息,请参见副本集选举

Procedures

Note

在版本 3.6.7 中进行了更改:如果参数enableElectionHandoff为 true(默认值),则当主节点从rs.stepDown()降级(或没有force: truereplSetStepDown命令)时,降级的主节点将提名合格的辅助节点立即选举。否则,次要人员最多可以 awaitsettings.electionTimeoutMillis才能进行选举。降级的主服务器不 await 切换的效果。有关更多信息,请参见enableElectionHandoff

通过将其优先级设置为高来强制其成为主要成员

此过程假定您当前的primarym1.example.net,并且您希望将m3.example.net设置为主。该过程还假定您具有三名成员replica set,其配置如下。有关配置的更多信息,请参见副本集配置使用

此过程假定此配置:

{
    "_id" : "rs",
    "version" : 7,
    "members" : [
        {
            "_id" : 0,
            "host" : "m1.example.net:27017"
        },
        {
            "_id" : 1,
            "host" : "m2.example.net:27017"
        },
        {
            "_id" : 2,
            "host" : "m3.example.net:27017"
        }
    ]
}
cfg = rs.conf()
cfg.members[0].priority = 0.5
cfg.members[1].priority = 0.5
cfg.members[2].priority = 1
rs.reconfig(cfg)

最后一条语句使用修改后的配置文档调用rs.reconfig(),以将m3.example.net配置为具有比其他mongod实例更高的members[n].priority值。

发生以下事件序列:

db.adminCommand({replSetStepDown: 86400, force: 1})

即使没有其他成员可以成为主要成员,这也会阻止m1.example.net成为主要成员 86,400 秒(24 小时)。当m3.example.net跟上m1.example.net时,它将成为主要对象。

如果您稍后要在 awaitm3.example.net赶上时再次使其成为m1.example.net主节点,请发出以下命令以使m1.example.net再次寻求选举:

rs.freeze()

rs.freeze()replSetFreeze数据库命令提供了包装。

使用数据库命令强制成员成为主要成员

考虑具有以下成员的replica set

要强制成员成为主要成员,请使用以下过程:

rs.freeze(120)
rs.stepDown(120)

mdb1.example.net成为主要用户。

Note

在过渡期间,会有一个短窗口,其中该集合没有主要窗口。

有关更多信息,请考虑包装replSetFreezereplSetStepDown命令的rs.freeze()rs.stepDown()方法。

首页