1 副本集secondary 节点类型
在之前的博客我们了解了副本集环境的搭建和维护操作,如下:
MongoDB 4.4 副本集(3节点) 搭建手册
https://www.cndba.cn/dave/article/107967MongoDB 4.4 副本集 维护步骤 说明
https://www.cndba.cn/dave/article/107981
默认情况下,副本集的所有节点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 节点可以作为报表或者备份节点。
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/
关于priority 的取值范围,官网有说明:
取值范围是0到1000,其中 1 是primary/secondary; 0 是arbiters. 该参数值越大,权重越高,越容易被选为主库。
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 节点配置
官方说明:
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/
对于Delay 节点时间的配置,要关注oplog 大小。 以免oplog 被删,无法完成同步:
MongoDB 4.4 中 journal 和 oplog 日志 说明
https://www.cndba.cn/dave/article/107979
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>
版权声明:本文为博主原创文章,未经博主允许不得转载。