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

相关推荐
Irissgwe7 小时前
redis之集群(Cluster)
数据库·redis·缓存·集群·redis集群·数据分片算法
wang3zc7 小时前
TensorFlow如何进行张量维度重塑_使用tf.reshape或tf.expand_dims
jvm·数据库·python
2501_901200537 小时前
mysql如何检查数据库表是否存在损坏_使用CHECK TABLE命令修复
jvm·数据库·python
Yeh2020587 小时前
Mybatis笔记一
java·笔记·mybatis
2301_766283447 小时前
如何设置密码复杂度策略以约束MongoDB用户的密码强度
jvm·数据库·python
likerhood7 小时前
Java 动态代理深度解析:从“为什么“到“底层原理“
java
duke8692672147 小时前
Golang怎么安全关闭channel_Golang channel关闭教程【通俗】
jvm·数据库·python
bqq198610267 小时前
Kafka高效的原因
缓存·kafka
2301_766283447 小时前
uni-app iOS后台运行 uni-app App如何实现后台定位或音乐播放
jvm·数据库·python