强制成员成为主节点
概述
您可以通过为副本集节点提供比集合中任何其他节点更高的members[n].priority
值来强制其成为主节点。
或者,您也可以通过将成员的members[n].priority
值设置为0 来强制成员永不成为主节点,这意味着该节点永远不能竞选为主节点。有关详细信息,请参阅 优先级 0 副本集节点。
有关优先级的更多信息,请参阅 members[n\].priority
。
考虑
副本集的大多数已配置成员必须对集合可用,才能重新配置集合或选举主节点。有关详细信息,请参阅 副本集选举。
程序
NOTE
在4.0.2版更改:如果参数
enableElectionHandoff
为 true(默认),当主节点从rs.stepDown()
(或replSetStepDown
不带 的命令force: true
)下台时,已下台的主节点会提名一个符合条件的从节点立即进行选举。否则,副手可以等到 直到settings.electionTimeoutMillis
召集选举。降级的主节点不会等待切换的效果。有关详细信息,请参阅enableElectionHandoff
。
通过将其优先级调高来强制成员成为主节点
此过程假定您当前的主节点是 m1.example.net
并且您希望改为m3.example.net
主要。该过程还假设您有一个具有以下配置的三节点副本集,有关配置的更多信息,请参阅副本集配置使用。
此过程采用以下配置:
{
"_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"
}
]
}
在一个
mongosh
连接到主服务器的会话,使用以下操作序列来创建m3.example.net
主服务器: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
为具有 members[n\].priority
比其他 mongod
实例更高的值。
发生以下事件序列:
m3.example.net
并m2.example.net
同步m1.example.net
(通常在 10 秒内)。m1.example.net
看到它不再具有最高优先级,并且在大多数情况下会下台。如果同步远远落后,m1.example.net
则不会下台。m3.example.net
在这种情况下,m1.example.net
等到m3.example.net
它的运行时间在 10 秒以内,然后下台。这最大限度地减少了没有主要后续故障转移的时间。- 下台迫使选举
m3.example.net
成为主要根据其priority
设置。
可选地,如果
m3.example.net
比m1.example.net
optime 晚了 10 秒以上,并且如果您不需要在 10 秒内指定主节点,则可以m1.example.net
通过运行强制退出:db.adminCommand({replSetStepDown: 86400, force: 1})
这可以防止m1.example.net
在 86,400 秒(24 小时)内成为主节点,即使没有其他节点可以成为主节点。当m3.example.net
赶上m1.example.net
它时,它将成为主节点。
如果您稍后想m1.example.net
在等待m3.example.net
赶上时再次成为主节点,请发出以下命令m1.example.net
再次进行选举:
rs.freeze()
rs.freeze()
提供了一个围绕 replSetFreeze
数据库命令的包装器。
使用数据库命令强制节点为节点
考虑具有以下节点的副本集:
要强制成员成为主节点,请使用以下过程:
在
mongosh
, 运行rs.status()
以确保您的副本集按预期运行。在一个
mongosh
连接到在mongod
上运行的实例的会话mdb2.example.net
,冻结mdb2.example.net
以便它在 120 秒内不会尝试成为主实例。rs.freeze(120)
mdb1.example.net
成为主节点。
NOTE
在过渡期间,有一个短暂的窗口,其中集没有主节点。
有关更多信息,请考虑包装 and命令的rs.freeze()
and 方法。rs.stepDown()
replSetFreeze
replSetStepDown
原文链接 - https://docs.mongodb.com/manual/tutorial/force-member-to-be-primary/
译者:陆文龙