Redis哨兵模式是redis实现高可用的一种分布式架构。哨兵节点是一种特殊的Redis实例,它不用于存储业务数据,它主要工作内容如下:(高可用不是指不出问题,而是出了问题后能及时的自动化解决,从而在客户端无感)
1、集群监控(monitor):哨兵可以通过定时任务不断的监控集群中的主从节点信息状态,检查主从节点是否正常运行。
2、提醒:当哨兵监控到集群中某个服务出现问题后,可以通过API进行消息通知给管理员。
3、故障转移:故障转移是Redis哨兵模式中最核心的功能。哨兵在发现某个主节点服务故障时(主观下线),哨兵之间会通过流言协议通讯,确定主节点是否客观下线,当主节点客观下线时,会通过故障转移流程将当前主节点的某个从节点选举作为主节点。同时完成其他节点信息更新等过程,来实现redis的高可用。同时哨兵也会向主从节点发送config rewrite命令来持久化更新配置信息。
4、配置中心:当发生故障转移后,会返回给客户端新的master信息。
集群监控(monitor)
哨兵核心通过三个定时任务来实现信息同步和监控,从而完成对集群服务的监控。每个哨兵都会维护一个信息表(集群的拓扑图数据),主要内容包括主从信息、哨兵信息、状态等等(可以通过info sentienl查看)。
主观下线、客观下线
主观下线(sdown):
每个哨兵会每秒一次(心跳定时任务)的向集群中的主从服务器发送ping命令,如果在规定的时间范围内(master-down-after-miliseconds)没有得到有效的回复结果,则该哨兵会将当前服务器状态设置为主观下线。
因为当前状态只是当前哨兵的判定结果,不能作为一个最终结果(因为可能是哨兵本身出问题了),所以叫做主观下线。
客观下线(odown):
当某一个哨兵发现主服务器处于主观下线状态,然后会以流言协议的方式来判断是否将其升级为客观下线。流言协议的方式:当哨兵发现主服务器处理主观下线状态时,会向其他哨兵发送SENTINEL is-master-down-by-addr,来判断其他哨兵是否也是观察到其下线了,如果在给定时间范围内(比如10秒内,大部分的哨兵都认为它下线了)确认主观下线的哨兵数 >= (quorum设定的权重数),则认定为当前主服务器为客观下线,此时就会开始后续的故障转移操作。
故障转移
哨兵模式的自动故障转移是redis实现高可用的方式。它是实现了当主服务器出现故障后,能自动的将其从节点替换成主节点的过程。(高可用不是代表不出问题,而是出问题后怎么自动化处理,让客户端无感)
原图地址: