searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享

(三)分布式缓存——Redis哨兵机制

2022-06-29 10:38:16
10
0

分布式缓存——Redis哨兵机制

一、哨兵的作用和原理:

1、哨兵机制的作用:

Redis提供了哨兵(Sentinel)机制来实现主从集群的master、slave的自动故障恢复。哨兵的结构和作用如下:

作用——监控: Sentinel 会不断检查您的master和slave是否按预期工作。

作用——自动故障恢复: 如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主。

作用——通知: Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端,比如告诉客户端master节点变更了,这样客户端写数据的时候才不会找错节点。

在这里插入图片描述

 

2、哨兵如何监测节点的状态:

Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。

客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。

在这里插入图片描述

 

3、哨兵如何选举新的master:

选举的依据:

 

  1. 首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点;
  2. 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举;
  3. 如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高;
  4. 最后是判断slave节点的运行id大小,越小优先级越高

 

4、哨兵如何实现故障转移:

  1. sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master;
  2. sentinel给所有其它slave发送slaveof slave1 ip slave1 端口命令,让这些slave成为新master的从节点,开始从新的master上同步数据(一开始还是进行全量同步);
  3. 最后,sentinel强行给故障节点标记为slave(修改配置文件),当故障节点恢复后会自动成为新的master的slave节点。

 

5、总结:

在这里插入图片描述

 

二、RedisTemplate的哨兵模式:

在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。Spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换。

RedisTemplate和Sentinel的整合:

配置文件不需要配置redis的地址,因为这个地址也是不确定的,只需要配置好Sentinel的地址就可以了;客户端会根据地址找到Sentinel,从而得知redis的地址以及主从情况。

在这里插入图片描述

在这里插入图片描述

————————————————

版权声明:本文为CSDN博主「方方土^_^」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_44792186/article/details/122907401

0条评论
0 / 1000
我是小朋友
80文章数
5粉丝数
我是小朋友
80 文章 | 5 粉丝

(三)分布式缓存——Redis哨兵机制

2022-06-29 10:38:16
10
0

分布式缓存——Redis哨兵机制

一、哨兵的作用和原理:

1、哨兵机制的作用:

Redis提供了哨兵(Sentinel)机制来实现主从集群的master、slave的自动故障恢复。哨兵的结构和作用如下:

作用——监控: Sentinel 会不断检查您的master和slave是否按预期工作。

作用——自动故障恢复: 如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主。

作用——通知: Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端,比如告诉客户端master节点变更了,这样客户端写数据的时候才不会找错节点。

在这里插入图片描述

 

2、哨兵如何监测节点的状态:

Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。

客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。

在这里插入图片描述

 

3、哨兵如何选举新的master:

选举的依据:

 

  1. 首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点;
  2. 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举;
  3. 如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高;
  4. 最后是判断slave节点的运行id大小,越小优先级越高

 

4、哨兵如何实现故障转移:

  1. sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master;
  2. sentinel给所有其它slave发送slaveof slave1 ip slave1 端口命令,让这些slave成为新master的从节点,开始从新的master上同步数据(一开始还是进行全量同步);
  3. 最后,sentinel强行给故障节点标记为slave(修改配置文件),当故障节点恢复后会自动成为新的master的slave节点。

 

5、总结:

在这里插入图片描述

 

二、RedisTemplate的哨兵模式:

在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。Spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换。

RedisTemplate和Sentinel的整合:

配置文件不需要配置redis的地址,因为这个地址也是不确定的,只需要配置好Sentinel的地址就可以了;客户端会根据地址找到Sentinel,从而得知redis的地址以及主从情况。

在这里插入图片描述

在这里插入图片描述

————————————————

版权声明:本文为CSDN博主「方方土^_^」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_44792186/article/details/122907401

文章来自个人专栏
云知识的搬运工
224 文章 | 7 订阅
0条评论
0 / 1000
请输入你的评论
0
0