主节点的选举原则|学习笔记

简介: 快速学习主节点的选举原则

开发者学堂课程【MongoDB精讲课程(下)主节点的选举原则学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/727/detail/12977


主节点的选举原则

 

内容介绍

一、概述

二、选举规则

三、优先级

四、修改优先级

 

一、概述

MongoDB在副本集中,会自动进行主节点的选举,主节点选举的触发条件:

1、主节点故障

这个服务器宕机了,这时候根据MongoDB的选举原则,会在剩下的这个服务器当中,再会去选择一个作为主节点,保证服务可用。

2、主节点网络不可达(默认心跳信息为10秒)

第二种情况其实和第一种情况基本一致,主节点的网络不可达,其实网络不可达也是一种故障,因为副本集之间会有心跳,互相之间会有心跳,默认的心跳是10秒钟,发送一个心跳请求,如果超过10秒主节点,网络就不通畅。它还是会触发重新的选举,去选举一个新的主节点,保证服务还是高可用的。

3、人工干预(rs.stepDown(600))

即主节点这台服务器我要下线了,去设置一下,这是默认的命令?Set downhou 这一块它也可以把主节点给它下掉,一样会触发新的选举是在内部,当前的副本集当中再推选一个新的主节点出来

 

二、选举规则

一旦触发选举,就要根据一定规则来选主节点。

选举规则是根据票数来决定:

票数最高,且获得了“大多数”成员的投票支持的节点获胜。“大多数”:假设复制集内投票成员数量为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)

相关文章
|
开发工具 git
vscode 查看git提交日志
vscode 查看git提交日志
1311 0
|
SQL 关系型数据库 MySQL
Ruoyi从mysql切换到postgresql的几个坑
本文详细介绍基于ruoyi的数据库从mysql切换到postgresql详细步骤。
1843 0
Ruoyi从mysql切换到postgresql的几个坑
|
5月前
|
PHP Python
Python format()函数高级字符串格式化详解
在 Python 中,字符串格式化是一个重要的主题,format() 函数作为一种灵活且强大的字符串格式化方法,被广泛应用。format() 函数不仅能实现基本的插入变量,还支持更多高级的格式化功能,包括数字格式、对齐、填充、日期时间格式、嵌套字段等。 今天我们将深入解析 format() 函数的高级用法,帮助你在实际编程中更高效地处理字符串格式化。
577 0
|
数据采集 存储 NoSQL
爬虫在金融领域的应用:股票数据收集
本文探讨了网络爬虫在金融领域的应用,特别是在收集股票价格数据方面的实践。文章介绍了使用Scrapy框架和代理IP技术来构建爬虫,以应对反爬策略和提高数据采集效率。通过安装Scrapy和PyMongo,创建Scrapy项目,配置代理中间件,以及编写爬虫代码,实现了从Yahoo Finance抓取股票信息并存储至MongoDB。这种方法能有效助力市场分析和投资决策,提升数据采集的效率与质量。
1002 0
爬虫在金融领域的应用:股票数据收集
|
缓存 关系型数据库 MySQL
一文彻底弄懂MySQL优化之深度分页
【10月更文挑战第24天】本文深入探讨了 MySQL 深度分页的原理、常见问题及优化策略。首先解释了深度分页的概念及其带来的性能和资源问题。接着介绍了基于偏移量(OFFSET)和限制(LIMIT)以及基于游标的分页方法,并分析了它们的优缺点。最后,提出了多种优化策略,包括合理创建索引、优化查询语句和使用数据缓存,帮助提升分页查询的性能和系统稳定性。
1567 1
|
存储 监控 固态存储
如何监控和优化 WAL 日志文件的存储空间使用?
如何监控和优化 WAL 日志文件的存储空间使用?
407 1
|
安全 关系型数据库 MySQL
MYSQL访问控制与安全管理
MYSQL访问控制与安全管理
346 0
|
存储 关系型数据库 数据库
关系型数据库的数据一致性和完整性
【5月更文挑战第1天】关系型数据库的数据一致性和完整性是数据库设计中的两个重要概念,它们共同保证了数据库中数据的准确性和可靠性。
598 2
关系型数据库的数据一致性和完整性
|
安全 Java API
ELK运维文档
ELK运维文档
244 2
|
Prometheus 监控 Cloud Native
Prometheus结合Consul采集多个MySQL实例的监控指标
将 Prometheus 与 Consul 结合使用,实现对多个 MySQL 实例的自动发现与监控,不仅提高了监控的效率和准确性,也为管理动态扩缩容的数据库环境提供了强大的支持。通过细致配置每一部分,业务可以获得关键的性能指标和运行健康状况的即时反馈,进而优化资源配置,提高系统的稳定性和可用性。
595 3