分布式缓存——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的地址以及主从情况。
在这里插入图片描述在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐