Redis哨兵机制

简介: Redis哨兵机制用于解决主从复制中主节点故障无法自动恢复的问题。通过独立进程监控主节点状态,在主节点宕机时,多个哨兵协作选举新主节点并完成故障转移,实现高可用性。哨兵机制具备监控、故障转移和通知功能,支持自动切换主从关系,但无法提升存储容量和完全避免数据丢失。

二,哨兵(Sentinel)

主从复制最大的问题,还是在主机点上,如果主节点挂了,从节点不会晋升为主节点,需要通过人工干预的方式恢复。


因此Redis哨兵机制,就是为了解决上述问题,自动的对挂了的主节点进行替换,也就是将上述手动的过程改成自动。


哨兵机制是通过启动一个不同的进程来体现的,它和redis-servver服务器进程不是 同一个进程 。


哨兵自动恢复主节点故障

如果一个哨兵节点发现主节点挂了,为了防止预判,还需多个哨兵节点共同认为这件事情。


如果主节点确实挂了,这些哨兵节点会选出一个作为leader,由这个哨兵节点负责从剩下的从节点中选一个出来,作为主节点。选出新的主节点之后,哨兵节点就会控制该节点执行slaveof no one,并且通知其他从节点,修改slaveof到新的主节点之上。哨兵节点会自动通知客户端程序,告知新的主节点是谁,并且此后客户端再进行写操作时,就会访问新的主节点了。


3,哨兵机制的特点

监控:Sentinel节点会定期检查redis数据节点,使用心跳包机制。


故障转移:实现从节点晋升为主节点,并维护好正确的主从关系。


通知:Sentinel会将故障转移的结果通知给应用方。


4,主从切换的具体流程

重点,面试题:


1,主观下线:哨兵节点通过心跳包进制,判读redis主节点服务器是否正常工作,如果没有沙鸥到响应,该哨兵节点就会认为该主节点下线了。


2,客观下线:当多个哨兵节点都认为主节点挂了之后,此时这个主节点就是主观下线了。


3,再从多个哨兵节点中,选举出一个leader节点,由这个leader节点负责从剩下的节点中选出一个作为主节点。


4,leader挑选完毕后,此时需要从剩下的从节点中选一个当作新的主节点。


首先会看这些从节点的优先级,每个 redis数据节点,都会有自己的配置文件,配置文件中就有一个优先级的设置。leader会选择优先级高的作为新的主节点。


如果数据节点的优先级都一样,那么就比较这些数据节点的offset,offset表示从节点与原来主节点进行数据同步的进度,offset越大,说明这个节点与原来主节点的数据相似度最高,此时就会选择这个节点作为新的主节点。


如果前面两个条件都一样,此时其实意味着从这些节点中任选一个都行。那么再看这些节点的runid(一串数字),每个redis数据节点启动时都会生成一个随机的runid,此时比较runid的大小。让runid更小的作为新的主节点。


指定好新的主节点之后,此时leader就会控制这个主节点执行slaveof no one,让这个节点成为主节点(master)。再控制其他从节点,执行slaveof,让这些从节点,以新的mater作为主节点。


5,总结

哨兵节点不能只有一个,因为哨兵节点挂了也会影响 系统的运作。


哨兵节点最好是奇数个,方便选举leader,得票数更容易超过一半。


哨兵+主从复制解决的问题是"提高可用性",极端情况下写操作的数据丢失无法解决。


哨兵+主从复制不能提高数据的存储容量 ,当数据接近或者几乎超过机器的物理内存时,这样的结构就难以胜任了,而接下来的redis集群,就是解决存储容量问题的有效方案。




相关文章
|
监控 NoSQL 算法
Redis哨兵机制详解:极致高可用和数据保护的神器
Redis哨兵机制详解:极致高可用和数据保护的神器
495 0
|
监控 NoSQL 算法
Redis哨兵机制原理详解
Redis哨兵机制原理详解
Redis哨兵机制原理详解
|
监控 NoSQL Redis
Redis哨兵机制
Redis哨兵机制
83 0
|
缓存 NoSQL Redis
分布式系列教程(04) -分布式Redis缓存 (事务&主从复制&哨兵机制)
分布式系列教程(04) -分布式Redis缓存 (事务&主从复制&哨兵机制)
211 0
|
监控 NoSQL Redis
Redis学习笔记-哨兵机制&哨兵集群建立过程
Redis学习笔记-哨兵机制&哨兵集群建立过程
149 0
|
运维 监控 NoSQL
Redis系列(四):哨兵机制详解
Redis系列(四):哨兵机制详解
|
存储 运维 监控
redis的哨兵机制
redis的哨兵机制
266 0
|
运维 监控 NoSQL
「Redis」哨兵机制
Redis哨兵机制介绍
365 0
|
监控 NoSQL Redis
Redis高可用之哨兵机制实现细节
没有配置其他哨兵ip,怎么组成集群的? 哨兵是怎么知道从库的IP和端口的? 如何判断主从库下线了? 如何选定新主库? 由哪个哨兵执行主从切换? 如何把新主库告诉客户端?