您可以
通过赋予副本集成员比集合中任何其他成员更高的
值来使其成为主要members[n].priority
成员。
(可选)您还可以通过将其members[n].priority
值
设置为来强制成员永不成为主要0
成员,这意味着该成员永远不会寻求选举成为主要成员。有关更多信息,请参见
优先级0副本集成员。
有关优先级的更多信息,请参见
members[n].priority
。
注意
在版本4.0.2中更改:如果参数enableElectionHandoff
为true(默认值),则当主要节点从rs.stepDown()
(或replSetStepDown
不带的命令)降级时,降级的主要节点将提名合格的辅助节点立即召集选举。否则,次要人员可以等到选举开始。降级的主服务器不等待切换的效果。有关更多信息,请参见
。force:
true
settings.electionTimeoutMillis
enableElectionHandoff
此过程假定您当前的主数据库为
m1.example.net
,而您想改m3.example.net
为主数据库。该过程还假定您具有三元副本集,并具有以下配置。有关配置的更多信息,请参阅副本集配置使用。
此过程假定此配置:
在mongo
连接到主数据库的shell中,使用以下操作序列制作m3.example.net
主数据库:
最后一条语句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
通过运行以下命令来强制退出:
m1.example.net
即使没有其他成员可以成为主要成员,这也可以防止其在86,400秒(24小时)内成为主要成员。当m3.example.net
赶上m1.example.net
它将成为首要。
如果您以后想要m1.example.net
在等待更新时再次成为主节点m3.example.net
,请发出以下命令m1.example.net
再次进行寻选:
将rs.freeze()
提供围绕包装
replSetFreeze
数据库命令。
考虑具有以下成员的副本集:
要强制成员成为主要成员,请使用以下过程:
在mongo
外壳程序中,运行rs.status()
以确保副本集按预期运行。
在mongo
与mongod
运行的实例连接的外壳中mdb2.example.net
,冻结
mdb2.example.net
,使其在120秒内不尝试成为主要实例。
在mongo
连接了mongod
正在运行的外壳程序中mdb0.example.net
,降低此实例在mongod
120秒内不符合成为主实例的
条件:
mdb1.example.net
成为主要的。
注意
在过渡期间,会有一个短窗口,其中该集合没有主要窗口。
有关更多信息,请考虑包装and 命令的rs.freeze()
and
rs.stepDown()
方法
。replSetFreeze
replSetStepDown