美文网首页我爱编程
MongDB强制指定某个成员成为Primary

MongDB强制指定某个成员成为Primary

作者: ChanZeeBm | 来源:发表于2018-02-25 01:17 被阅读0次

    利用priority指定:

    假如现在有三个成员:

    {
        "_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"
            }
        ]
    }
    

    假如现在m1是primary,而我们想让m3成为primary,执行以下步骤:

    cfg=re.conf()
    cfg.members[0].priority=1
    cfg.members[1].priority=1
    cfg.members[2].priority=2
    re.reconfig(cfg)
    

    re.config(cfg)会强制MongoDB进行primary选举,一般情况下m3会直接成为primary。

    但前提是m3成员的数据不能落后于m1太多。

    如果不幸m3落后太多了,那么这时候m1会跟m3同步10秒,然后退位。
    但如果你不需要这10秒,或者说这10秒内不需要primary,那么可以强制m1退位:

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

    执行了以上命令后,m1在1800s内都不会成为primary(即便数据集里已经没有primary了),m3上位。
    如果你在这1800s内需要m1重新或者说可以通过选举成为primary,可以执行以下命令:

    rs.freeze()
    

    PS: rs.freeze()是 replSetFreeze的封装。

    利用命令来进行强制primary

    • 设置除当前primary以外的其他非目标成员在特定时间内不能成为primary
    • 强制primary退位
    • ok

    连接至m2实例,执行:

    rs.freeze(120)
    

    120s内m2不能成为primary

    连接至m1实例,执行:

    rs.stepDown(120)
    

    120s内m1不能成为primary

    m3上位。

    该方法会导致短时间内没有primary,不建议使用,而且120s过后,还是priority高的成员继续成为primary(如果没有执行db.adminCommand({replSetStepDown:1800,force:1})的话)

    相关文章

      网友评论

        本文标题:MongDB强制指定某个成员成为Primary

        本文链接:https://www.haomeiwen.com/subject/oprhxftx.html