MongoDB 主节点的选举原则
2022/1/19 13:21:17
本文主要是介绍MongoDB 主节点的选举原则,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
每日一句
Life is like a shower. One wrong turn and you’re in hot water.
生活就像淋浴,方向转错,水深火热。
概述
MongoDB在副本集中,会自动进行主节点的选举,主节点选举的触发条件:
- 主节点故障
- 主节点网络不可达(默认心跳信息为10秒)
- 人工干预(
rs.stepDown(600)
)
选举规则
一旦触发选举,就要根据一定规则来选主节点。
选举规则是根据票数来决定:
- 票数最高,且获得了“大多数”成员的投票支持的节点获胜。“大多数”:假设复制集内投票成员数量为N,则大多数为 N/2 + 1。例如:3个投票成员,则大多数的值是2。当复制集内存活成员数量不足大多数时,整个复制集将无法选举出Primary,复制集将无法提供写服务,处于只读状态。
- 若 票数相同,且都获得了“大多数”成员的投票支持的,数据新的节点获胜。数据的新旧是通过操作日志
oplog
来对比的。
优先级
在获得票数的时候,优先级(priority)参数影响重大。
可以通过设置优先级(priority)来设置额外票数。优先级即权重,取值为0-1000,相当于可额外增加0-1000的票数,优先级的值越大,就越可能获得多数成员的投票(votes)数。指定较高的值可使成员更有资格成为主要成员,更低的值可使成员更不符合条件。
默认情况下,优先级的值是1
myrs:SECONDARY> rs.conf() { "_id" : "myrs", "version" : 221242, "term" : 4, "members" : [ { "_id" : 0, "host" : "192.168.20.131:27017", "priority" : 1, }, { "_id" : 1, "host" : "localhost.localdomain:27018", "priority" : 1, }, { "_id" : 2, "host" : "192.168.20.131:27019", "priority" : 1, }, { "_id" : 3, "host" : "192.168.20.131:27020", "priority" : 1, }, { "_id" : 4, "host" : "192.168.20.131:27030", "priority" : 0, } ], ... } myrs:SECONDARY>
可以看出,主节点和副本节点的优先级各为1,即,默认可以认为都已经有了一票。但选举节点,优先级是0,(要注意是,官方说了,选举节点的优先级必须是0,不能是别的值。即不具备选举权,但具有投票权)
修改优先级
通过下面的步骤可以提升从节点的优先级:
# 先将配置导入cfg变量 myrs:SECONDARY> cfg=rs.conf() # 然后修改值(ID号默认从0开始): myrs:SECONDARY> cfg.members[1].priority=2 # 重新加载配置 myrs:SECONDARY> rs.reconfig(cfg)
美文佳句
一杯清水能滋润一寸土地,一缕阳光能驱散一丝阴影。勿以善小而不为,在日常生活中,有时候做一件好事,仅仅是举手之劳。要是每个人都能像雷锋那样,把做好事当成一种自觉的行动,把关心他人作为一种义务和责任,聚沙成塔,积少成多,我们的生活一定会更加美好,我们的社会一定会更加和谐。
这篇关于MongoDB 主节点的选举原则的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享