Redis哨兵模式定义
Redis哨兵模式是是一个管理多个 Redis 实例的工具,它可以实现对 Redis 的监控、通知、自动故障转移,是Redis实现高可用 的实现方案。
为什么需要Redis哨兵模式?
Redis主从模式当主服务器宕机后,需要手动把一台从服务器切换为主服务器,需要人工干预费事费力,为了解决这个问题出现了哨兵模式。
如下图所示:
Redis哨兵模式功能
Redis哨兵模式提供了以下功能:
1.监控(Monitoring)
负责监控redis master和slave进程是否正常工作。
2.通知(Notification)
如果redis实例有故障,报警通知给管理员。
3.自动故障转移(Automatic failover)
当 主节点 不能正常工作时,Sentinel 会开始一次 自动的 故障转移操作,它会将与 失效主节点 是 主从关系 的其中一个 从节点 ,升级为新的 主节点,并且将其他的 从节点 指向 新的主节点。
4.配置提供者(Configuration provider)
如果故障转移发生了,通知client客户端新的master地址。
Redis哨兵模式原理
当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。
如下图所示:
原理是哨兵通过发送命令(ping命令),等待Redis服务器响应,如果在指定时间内,主机Redis无响应,从机则判断主机宕机,选举从机上位,从而监控运行的多个Redis实例。
第一步:心跳机制
每个 Sentinel 会每秒钟 一次的频率向它所知的 主服务器、从服务器 以及其他 Sentinel 实例 发送一个 PING 命令,获取其拓扑结构和状态信息。
如下图所示:
每个 Sentinel 节点会向主节点、从节点、以及其余 Sentinel 节点定时发送 ping 命令作为心跳检测, 来确认这些节点是否可达,共同监控数据节点的运行状况。
第二步:判断master节点是否下线
每个 sentinel 哨兵节点每隔1s 向所有的节点发送一个PING命令,作用是通过心跳检测,检测主从服务器的网络连接状态。
如果 master 节点回复 PING 命令的时间超过 down-after-milliseconds 设定的阈值(默认30s),则这个 master 会被 sentinel 标记为主观下线。
如下图所示:
第三步:基于Raft算法选举领头sentinel
master客观下线,那就需要一个sentinel来负责故障转移,所以需要通过选举一个sentinel的领头羊来解决。
如下图所示:
第四步:故障转移
故障转移的一个主要问题和选择领头sentinel问题差不多,就是要选择一个slaver节点来作为master。
选择主Maseter过程大致如下:
① 选择优先级最高的节点,通过sentinel配置文件中的replica-priority配置项,这个参数越小,表示优先级越高;
② 如果第一步中的优先级相同,选择offset最大的,offset表示主节点向从节点同步数据的偏移量,越大表示同步的数据越多;
③ 如果第二步offset也相同,选择run id较小的;
这样通过以上四大步骤,实现由Redis Sentinel自动完成故障发现和转移,实现自动高可用。
Redis哨兵模式的优缺点
哨兵模式优点:最大的优点就是主从可以自动切换,系统更健壮,可用性更高;
哨兵模式缺点:最大的缺点就是还要多维护一套哨兵模式,实现起来也变的更加复杂增加维护成本;
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》