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标识),最小的优先

相关推荐
Olafur_zbj2 小时前
【AI】LLM上下文拼接
java·开发语言·spring·llm·context
不光头强2 小时前
integer修改缓存大小
缓存
对酒当歌丶人生几何2 小时前
Spring异步体系与事务一致性实战指南
java·spring·eventlistener
ljh5746491192 小时前
chown 命令的解释和常用用法和高级用法
linux·服务器·数据库
leo__5202 小时前
基于C#与HALCON开发的完整视觉检测系统案例
开发语言·c#·视觉检测
这也能行2 小时前
Tomcat
java·tomcat
小杍随笔2 小时前
【Rust中所有符号的作用及使用场景详解】
java·算法·rust
DolphinDB智臾科技2 小时前
实操教程:使用 GitHub Copilot 配置 DolphinDB Skill 以提升开发效率
数据库·github·copilot·时序数据库·dolphindb
亚马逊云开发者2 小时前
别再烧 Token 了!我用这 5 个配置把 OpenClaw 费用砍了一半
java