强制成员成为主节点

概述

您可以通过为副本集节点提供比集合中任何其他节点更高的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"
        }
    ]
}
  1. 在一个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.netm2.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设置。
  1. 可选地,如果m3.example.netm1.example.netoptime 晚了 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数据库命令的包装器。

使用数据库命令强制节点为节点

考虑具有以下节点的副本集

  • mdb0.example.net- 当前的主节点
  • mdb1.example.net-从节点
  • mdb2.example.net- 次要的。

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

  1. mongosh, 运行rs.status()以确保您的副本集按预期运行。

  2. 在一个mongosh连接到在 mongod上运行的实例的会话mdb2.example.net,冻结mdb2.example.net以便它在 120 秒内不会尝试成为主实例。

    rs.freeze(120)
    
  1. 在一个mongosh连接到 mongod正在运行的会话,将在 120 秒内没有资格成为主mdb0.example.net实例的实例降级:mongod

    rs.stepDown(120)
    

mdb1.example.net成为主节点。

NOTE

在过渡期间,有一个短暂的窗口,其中集没有主节点。

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

对副本集成员执行维护重新同步副本集的成员

原文链接 - https://docs.mongodb.com/manual/tutorial/force-member-to-be-primary/

译者:陆文龙

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""