分布式缓存——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:
选举的依据:
- 首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点;
- 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举;
- 如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高;
- 最后是判断slave节点的运行id大小,越小优先级越高
4、哨兵如何实现故障转移:
- sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master;
- sentinel给所有其它slave发送slaveof slave1 ip slave1 端口命令,让这些slave成为新master的从节点,开始从新的master上同步数据(一开始还是进行全量同步);
- 最后,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