签到成功

知道了

CNDBA社区CNDBA社区

MongoDB 4.4 修改 副本集 Secondary 节点类型

2022-05-12 12:03 1782 0 原创 MongoDB
作者: dave

1 副本集secondary 节点类型


在之前的博客我们了解了副本集环境的搭建和维护操作,如下:http://www.cndba.cn/cndba/dave/article/107992

MongoDB 4.4 副本集(3节点) 搭建手册
https://www.cndba.cn/dave/article/107967

MongoDB 4.4 副本集 维护步骤 说明
https://www.cndba.cn/dave/article/107981http://www.cndba.cn/cndba/dave/article/107992http://www.cndba.cn/cndba/dave/article/107992

默认情况下,副本集的所有节点priority 都是1,hidden 为False。

[dave@www.cndba.cn_1 ~]# mongo_conn 27018
MongoDB shell version v5.0.8
shard1:PRIMARY> rs.conf().members[0]
{
        "_id" : 0,
        "host" : "172.31.185.120:27018",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : false,
        "priority" : 1,
        "tags" : {

        },
        "secondaryDelaySecs" : NumberLong(0),
        "votes" : 1
}
shard1:PRIMARY>

在官方手册:

https://www.mongodb.com/docs/v4.4/core/replica-set-secondary/

从官方手册可以了解到副本集的从节点成员还有其他3种类型:

  • Priority 0 Replica Set Members:该类型节点不会选举为primary 节点,主要部署在其他机房或者做冷备份节点。
  • Hidden Replica Set Members:该类型节点会不会被应用程序正常流量(distribute reads)读取到,可以根据需要直接访问该节点,从而保障某些应用与程序的正常流量隔离。 Hidden 节点也必须是Priority 0,同时不能变成主节点。在db.hello()中也不显示隐藏节点。 Hidden 节点可以作为报表或者备份节点。http://www.cndba.cn/cndba/dave/article/107992

  • Delayed Replica Set Members: “历史”快照节点,因为同主库同步有一定延迟,可以用于从某些操作的恢复,例如误删的数据库。 注意,Delay node 必须是Priority 0 和 Hidden的节点。

注意: 修改节点的类型,只能在primary 节点上操作。 另外MongoDB 不同版本参数会有出入,以官方手册为准。

2 Priority 0 节点设置


官方说明参考:

https://www.mongodb.com/docs/v4.4/core/replica-set-priority-0-member/
https://www.mongodb.com/docs/v4.4/tutorial/configure-secondary-only-replica-set-member/http://www.cndba.cn/cndba/dave/article/107992

关于priority 的取值范围,官网有说明:

https://www.mongodb.com/docs/v4.4/reference/replica-configuration/#mongodb-rsconf-rsconf.members-n-.priority

取值范围是0到1000,其中 1 是primary/secondary; 0 是arbiters. 该参数值越大,权重越高,越容易被选为主库。http://www.cndba.cn/cndba/dave/article/107992

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

[dave@www.cndba.cn_1 ~]# mongo_conn 27018
MongoDB shell version v5.0.8
shard1:PRIMARY> rs.conf().members[1]
{
        "_id" : 1,
        "host" : "172.31.185.165:27018",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : false,
        "priority" : 1,
        "tags" : {

        },
        "secondaryDelaySecs" : NumberLong(0),
        "votes" : 1
}
shard1:PRIMARY>

shard1:PRIMARY> cfg = rs.conf()

shard1:PRIMARY> cfg.members[1].priority = 0
0
shard1:PRIMARY> rs.reconfig(cfg)
{
        "ok" : 1,
        "$gleStats" : {
                "lastOpTime" : {
                        "ts" : Timestamp(1652327292, 2),
                        "t" : NumberLong(12)
                },
                "electionId" : ObjectId("7fffffff000000000000000c")
        },
        "lastCommittedOpTime" : Timestamp(1652327292, 2),
        "$configServerState" : {
                "opTime" : {
                        "ts" : Timestamp(1652327292, 5),
                        "t" : NumberLong(-1)
                }
        },
        "$clusterTime" : {
                "clusterTime" : Timestamp(1652327292, 5),
                "signature" : {
                        "hash" : BinData(0,"x8cC0IIbvljaMxmtobNq0ax8IKo="),
                        "keyId" : NumberLong("7093529851058978835")
                }
        },
        "operationTime" : Timestamp(1652327292, 2)
}
shard1:PRIMARY> rs.conf().members[1]
{
        "_id" : 1,
        "host" : "172.31.185.165:27018",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : false,
        "priority" : 0,
        "tags" : {

        },
        "secondaryDelaySecs" : NumberLong(0),
        "votes" : 1
}
shard1:PRIMARY>

3 Hidden 节点配置


官方说明参考:

https://www.mongodb.com/docs/v4.4/core/replica-set-hidden-member/
https://www.mongodb.com/docs/v4.4/tutorial/configure-a-hidden-replica-set-member/

cfg = rs.conf()
cfg.members[1].priority = 0
cfg.members[1].hidden = true
rs.reconfig(cfg)
db.hello()

[dave@www.cndba.cn_1 ~]# mongo_conn 27018
MongoDB shell version v5.0.8
shard1:PRIMARY> cfg = rs.conf()
shard1:PRIMARY> cfg.members[1].priority = 0
0
shard1:PRIMARY> cfg.members[1].hidden = true
true
shard1:PRIMARY> rs.reconfig(cfg)
shard1:PRIMARY> rs.conf().members[1]
{
        "_id" : 1,
        "host" : "172.31.185.165:27018",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : true,
        "priority" : 0,
        "tags" : {

        },
        "secondaryDelaySecs" : NumberLong(0),
        "votes" : 1
}
shard1:PRIMARY> db.hello()
{
        "topologyVersion" : {
                "processId" : ObjectId("627b7b8c14511b64b712939f"),
                "counter" : NumberLong(11)
        },
        "hosts" : [
                "172.31.185.120:27018",
                "172.31.185.131:27018"
        ],
……
shard1:PRIMARY>

4 Delayed 节点配置


官方说明:http://www.cndba.cn/cndba/dave/article/107992

https://www.mongodb.com/docs/v4.4/core/replica-set-delayed-member/
https://www.mongodb.com/docs/v4.4/tutorial/configure-a-delayed-replica-set-member/http://www.cndba.cn/cndba/dave/article/107992

http://www.cndba.cn/cndba/dave/article/107992

对于Delay 节点时间的配置,要关注oplog 大小。 以免oplog 被删,无法完成同步:

MongoDB 4.4 中 journal 和 oplog 日志 说明
https://www.cndba.cn/dave/article/107979http://www.cndba.cn/cndba/dave/article/107992

cfg = rs.conf()
cfg.members[1].priority = 0
cfg.members[1].hidden = true
cfg.members[1].secondaryDelaySecs = 3600 #v5.0
cfg.members[1].slaveDelay = 3600  #v4.4
rs.reconfig(cfg)



[dave@www.cndba.cn_1 ~]# mongo_conn 27018
MongoDB shell version v5.0.8
shard1:PRIMARY> cfg = rs.conf()

shard1:PRIMARY> cfg.members[1].priority = 0
0
shard1:PRIMARY> cfg.members[1].hidden = true
true
shard1:PRIMARY> cfg.members[1].secondaryDelaySecs = 3600
3600
shard1:PRIMARY> rs.reconfig(cfg)
{
        "ok" : 1,
        "$gleStats" : {
                "lastOpTime" : {
                        "ts" : Timestamp(1652327847, 1),
                        "t" : NumberLong(12)
                },
                "electionId" : ObjectId("7fffffff000000000000000c")
        },
        "lastCommittedOpTime" : Timestamp(1652327847, 1),
        "$configServerState" : {
                "opTime" : {
                        "ts" : Timestamp(1652327847, 2),
                        "t" : NumberLong(-1)
                }
        },
        "$clusterTime" : {
                "clusterTime" : Timestamp(1652327847, 2),
                "signature" : {
                        "hash" : BinData(0,"uwz9zGDD6ErDaMQdceGP3euRIvM="),
                        "keyId" : NumberLong("7093529851058978835")
                }
        },
        "operationTime" : Timestamp(1652327847, 1)
}
shard1:PRIMARY>

shard1:PRIMARY> rs.conf().members[1]
{
        "_id" : 1,
        "host" : "172.31.185.165:27018",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : true,
        "priority" : 0,
        "tags" : {

        },
        "secondaryDelaySecs" : NumberLong(3600),
        "votes" : 1
}
shard1:PRIMARY>

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2296
    原创
  • 3
    翻译
  • 582
    转载
  • 198
    评论
  • 访问:8506943次
  • 积分:4477
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ