MongoDB副本集replica set--成员配置

Posted 满格

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB副本集replica set--成员配置相关的知识,希望对你有一定的参考价值。

 

 

(一)调整副本集节点的优先级(priority)
priority属性的值会影响到主节点选举的时间以及结果,priority是一个浮点型数字,可以在0到1000之间设置,数字越高,优先级越高。

对于优先级,有一些默认规定:

  • 非投票成员,priority必须为0;
  • priority大于0的成员不能有0 votes;
  • 从MongoDB 3.6版本开始,仲裁者priority为0;

节点修改优先级的步骤:

cfg = rs.conf()
cfg.members[n].priority = 3
rs.reconfig(cfg)

对于members[n]的定义:
n是members数组中的数组位置,数组以0开始,千万不能将其理解为“members[n]._id”的_id值。下面的成员配置都是这样理解。

例如,我要调整“192.168.10.43”的节点的优先级为2,因为该节点在数组索引的第1位(从0开始计算),故调整优先级的方法为:

STEP1:调整前,确认192.168.10.43节点在members数组中的位置:

rstest:PRIMARY> rs.config()
{
"_id" : "rstest",
"version" : 11,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "192.168.10.41:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 3,
"tags" : {

},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "192.168.10.43:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : {

},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "192.168.10.42:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {

},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {

},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5ef1b03c01bba8d9a6759c18")
}
}
rstest:PRIMARY>
View Code

STEP2:从上面可以看到,“192.168.10.43”位于数组的第1位,前面的“192.168.10.41”是第0个成员,调整优先级:

rstest:PRIMARY> cfg = rs.conf()
rstest:PRIMARY> cfg.members[1].priority = 2
2
rstest:PRIMARY> rs.reconfig(cfg)
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1593364371, 1),
"signature" : {
"hash" : BinData(0,"gU7HNe/7TCGjsdRB3bU8EWb4SSs="),
"keyId" : NumberLong("6841443127941660675")
}
},
"operationTime" : Timestamp(1593364371, 1)
}
rstest:PRIMARY>

 STEP3:调整后,发现“192.168.10.43”节点优先级由0变为了2:

rstest:PRIMARY> rs.conf()
{
"_id" : "rstest",
"version" : 12,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "192.168.10.41:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 3,
"tags" : {

},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "192.168.10.43:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {

},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "192.168.10.42:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {

},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {

},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5ef1b03c01bba8d9a6759c18")
}
}
rstest:PRIMARY>
View Code

 

 (二)防止次级(secondary)节点变为主节点

只需将节点的优先级调整为0即可

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

 

(三)配置隐藏节点成员(Hidden Replica Set Member)
隐藏节点成员是副本集的一部分,但是隐藏节点不会被选举为主节点,且对客户端应用是不可见的。隐藏节点可以参与投票。
隐藏节点通常使用在延迟复制上。
如果要配置隐藏节点,需要将members[n].priority值设为0,将members[n].hidden设置为true。

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

重新配置集合后,其它成员在使用isMaster或db.isMaster()输出中不会显示隐藏成员。

 

(四)配置延迟节点成员(Delayed Replica Set Member)
要配置延迟的辅助成员,需要将members[n].priority设置为0,将members[n].hidden设置为true,将members[n].slaveDelay值设置为延迟秒数。
例如,这里把节点0配置为延迟节点,延迟时间为3600s。

cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
cfg.members[0].slaveDelay = 3600
rs.reconfig(cfg)

注意:延迟节点的延迟必须要oplog的窗口内,如果oplog短于members[n].slaveDelay窗口,延迟节点将不能成功复制。

 

(五)配置非投票节点(Non-Voting Replica Set Member)
mongoDB最多允许有50个节点,其中最多7个投票节点。要将成员配置为非投票节点,只需将votes和priority都设置为0。

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

 

 

【完】 

以上是关于MongoDB副本集replica set--成员配置的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB副本集replica set --基础知识

MongoDB副本集replica set--故障排查

MongoDB复制集/副本集(Replica Set)搭建

MongoDB——MongoDB副本集(Replica Sets)

MongoDB——MongoDB副本集(Replica Sets)

MongoDB副本集replica set --副本集环境搭建