redis主从和集群一致性、哨兵机制详解

redis主从和集群可以保证数据一致性吗 ?

目录

[redis主从和集群可以保证数据一致性吗 ?](#redis主从和集群可以保证数据一致性吗 ?)

哨兵机制的原理是什么?

哨兵机制的选主节点的算法介绍一下

主观下线

客观下线

sentinel集群选举leader

[Sentinel Leader选举主节点](#Sentinel Leader选举主节点)


redis主从和集群都属于CAP理论中的AP模型 ,即为了保持可用性舍弃了高一致性,在主从复制中可以数据的最终一致性,因为主从复制是异步,可能期间就会出现部分节点数据不一致问题,集群同理

哨兵机制的原理是什么?

Redis主从框架中,从服务器需要主服务器给它传递数据,那如果主服务器挂了,就需要借助哨兵(Sentinel)机制

哨兵机制的原理是主节点故障转移:哨兵节点监测主服务器是否宕机,若宕机,则会在从节点里选举一个主节点,并把新主节点的所有信息通知给其他所有节点

哨兵其实是一个特殊的redis进程,也算是一个节点但它的工作主要是监视,监视的对象为主节点,在主节点发生故障时采取一些措施来补救

哨兵节点主要负责三件事情:监控、选主、通知

哨兵机制的选主节点的算法介绍一下

当redis主节点故障时,sentinel集群从剩下的从节点中选取主节点有如下几个步骤:

1.sentinel节点确认主节点为主观下线

2.sentinel节点确认主节点为客观下线

3.sentinel节点中选举leader节点

4.从节点中选举主节点

主观下线

sentinel节点会定时给redis所有节点发送心跳包检测节点是否故障,若在down-after-milliseconds时间内没有回复sentinel节点的心跳包,则判定为改节点主观下线

客观下线

当一个Sentinel节点认定一个节点主观下线后会询问别的Sentinel节点,看他们和自己的判断是否一致,若超过quorum数量的节点认定相同,则判断这个节点为客观下线

sentinel集群选举leader

想要重新选举新的主节点,需要在Sentinel集群里面选举一个leader

当一个Sentinel节点认定一个节点为客观下线后,会请求其他所有Sentinel节点选举自己为leader,其他Sentinel节点没有选举过其他节点 为leader时就会同意该请求 ,若之前同意过 其他节点则不会再投票 给当下Sentinel节点,当哨兵节点的票数达到了leader最低选举票数(Max(quorum,Sentinel节点总数/2)),则会被选举为leader

举例如下:

如图,Sentinel1最先请求2 3节点,因为2 3节点没有同意过其他节点的请求,则1的票数有2票,之后2节点请求1 3,因为1没有投票过,所以给2投票了,3给1投过票则不能投票给2;3请求 1 2时,1和2都投过票,则3为0票,最后1为leader

Sentinel Leader选举主节点

选举主节点的优先级如下:

1.过滤故障节点

2.在redis.config中的slave-priority(权值)的数值最高,没有则继续

3.复制偏移量最大(也就是和之前的主节点相似度最高),没有则继续

4**.runid(** 在redis运行时会生成一个runid标识),最小的优先

相关推荐
2301_803875616 小时前
PHP 中处理会话数组时的类型错误解析与修复指南
jvm·数据库·python
m0_743623926 小时前
c++如何批量修改文件后缀名_std--filesystem--replace_extension【实战】
jvm·数据库·python
MY_TEUCK6 小时前
Sealos 平台部署实战指南:结合 Cursor 与版本发布流程
java·人工智能·学习·aigc
2401_873479406 小时前
如何利用IP查询定位识别电商刷单?4个关键指标+工具配置方案
开发语言·tcp/ip·php
我爱cope7 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
2501_914245937 小时前
CSS如何处理CSS变量作用域冲突_利用特定类名重写变量值
jvm·数据库·python
菜鸟学Python7 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
朝新_7 小时前
【Spring AI 】图像与语音模型实战
java·人工智能·spring
RH2312117 小时前
2026.4.16Linux 管道
java·linux·服务器
zmsofts8 小时前
java面试必问13:MyBatis 一级缓存、二级缓存:从原理到脏数据,一篇讲透
java·面试·mybatis