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

相关推荐
IvorySQL2 分钟前
2MB 的 PostgreSQL work_mem,如何吃掉 2TB 内存?
数据库·postgresql·开源
桑榆肖物3 分钟前
有字幕,没配音?用浏览器自带语音能力,让网页视频直接“开口说话”
数据库·edge·音视频·tts
比昨天多敲两行4 分钟前
C++ AVL树
开发语言·c++
大阿明6 分钟前
PostgreSQL常用时间函数与时间计算提取示例说明
java
小糯米60110 分钟前
C++ 并查集
java·c++·算法
Bert.Cai10 分钟前
Python字面量详解
开发语言·python
IAUTOMOBILE13 分钟前
Code Marathon 项目源码解析与技术实践
java·前端·算法
Flying pigs~~13 分钟前
基于Deepseek大模型API完成文本分类预测功能
java·前端·人工智能·python·langchain·deepseek
Lyyaoo.13 分钟前
【JAVA基础面经】深拷贝与浅拷贝
java·开发语言·算法
oyzz12020 分钟前
Redis 安装及配置教程(Windows)【安装】
java