详解redis集群选举机制
当redis集群的主节点故障时,Sentinel集群将从剩余的从节点中选举一个新的主节点,有以下步骤:
故障节点主观下线 故障节点客观下线 Sentinel集群选举Leader Sentinel Leader决定新主节点 1、主观下线Sentinel集群的每一个Sentinel节点会定时对redis集群的所有节点发心跳包检测节点是否正常。如果一个节点在down-after-milliseconds时间内没有回复Sentinel节点的心跳包,则该redis节点被该Sentinel节点主观下线。
2、客观下线当节点被一个Sentinel节点记为主观下线时,并不意味着该节点肯定故障了,还需要Sentinel集群的其他Sentinel节点共同判断为主观下线才行。
该Sentinel节点会询问其他Sentinel节点,如果Sentinel集群中超过quorum数量的Sentinel节点认为该redis节点主观下线,则该redis客观下线。
如果客观下线的redis节点是从节点或者是Sentinel节点,则操作到此为止,没有后续的操作了;如果客观下线的redis节点为主节点,则开始故障转移,从从节点中选举一个节点升级为主节点。
3、Sentinel集群选举Leader如果需要从redis集群选举一个节点为主节点,首先需要从Sentinel集群中选举一个Sentinel节点作为Leader。
每一个Sentinel节点都可以成为Leader,当一个Sentinel节点确认redis集群的主节点主观下线后,会请求其他Sentinel节点要求将自己选举为Leader。被请求的Sentinel节点如果没有同意过其他Sentinel节点的选举请求,则同意该请求(选举票数+1),否则不同意。
如果一个Sentinel节点获得的选举票数达到Leader最低票数(quorum和Sentinel节点数/2+1的最大值),则该Sentinel节点选举为Leader;否则重新进行选举。
当Sentinel集群选举出Sentinel Leader后,由Sentinel Leader从redis从节点中选择一个redis节点作为主节点:
过滤故障的节点 选择优先级slave-priority最大的从节点作为主节点,如不存在则继续 选择复制偏移量(数据写入量的字节,记录写了多少数据。主服务器会把偏移量同步给从服务器,当主从的偏移量一致,则数据是完全同步)最大的从节点作为主节点,如不存在则继续 选择runid(redis每次启动的时候生成随机的runid作为redis的标识)最小的从节点作为主节点一个Sentinel节选举成为Leader的最低票数为quorum和Sentinel节点数/2+1的最大值,如果Sentinel集群只有2个Sentinel节点,则
Sentinel节点数/2 + 1
= 2/2 + 1
= 2
即Leader最低票数至少为2,当该Sentinel集群中由一个Sentinel节点故障后,仅剩的一个Sentinel节点是永远无法成为Leader。
也可以由此公式可以推导出,Sentinel集群允许1个Sentinel节点故障则需要3个节点的集群;允许2个节点故障则需要5个节点集群。
到此这篇关于详解redis集群选举机制的文章就介绍到这了,更多相关redis集群选举机制内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 详解redis集群选举机制
相关文章
- 释放你的内存:Redis虚拟内存解决方案(redis虚拟内存)
- 学习Redis攻克挑战,拥抱成功(怎么学好redis)
- 瞬间完成表数据导入Redis(表数据导入redis)
- 如何设置Redis主从复制?详解Redis主从设置步骤(redis 主从设置)
- 监控Redis队列,实时了解数据变化(监控redis 队列数据)
- 单机部署Redis集群,实现超高性能(单机下redis集群)
- 内网穿透实现安全性能更好的Redis服务(内网穿透 redis)
- 如何将大对象存入Redis服务器(大对象存入redis)
- Rust实现高性能Redis服务器集群(rust 实现redis)
- 深入浅出Redis相关代码实践指南(关于redis相关的代码)
- Redis集群部署快速上手全面掌握部署工具(redis 集群部署工具)
- 基于Redis集群的请求路由分析(redis集群请求路由)
- Redis集群实现虚拟IP详解(Redis集群虚拟ip)
- 使用Redis集群登录命令快捷完成登陆(redis集群登陆命令)
- 转换借助Redis集群实现高效文件格式转换(redis集群文件格式)
- 建立Redis集群 扩容最大链接性能(redis集群支持最大链接)
- 架构设计实现Redis集群数据的分配(redis集群存数据分配)
- 红色梦想建立Redis集群Z(redis集群z)
- Redis集群DB1 革新的缓存解决方案(redis集群db1)
- 调整Redis键的生命周期,优化缓存性能(redis 键的生存时间)
- 使用Redis搭建高可用的连接单机和集群(redis连接单机和集群)
- 使用Redis实现高效模糊查询(redis进行模糊查询)
- Redis集群中实现双主实例冗余性极大提升可用性(redis集群双主实例)
- Redis集群仅需一台服务器就能应付大量请求(redis集群单数台)
- Redis集群构建更安全的JWT认证机制(redis集群jwt)
- 探究Redis缓存作用何在(redis缓存有什么作用)