Redis哨兵模式详解(作用原理及优缺点)

Redis哨兵模式详解(作用原理及优缺点)-mikechen

Redis哨兵模式定义

Redis哨兵模式是是一个管理多个 Redis 实例的工具,它可以实现对 Redis 的监控、通知、自动故障转移,是Redis实现高可用 的实现方案。

 

为什么需要Redis哨兵模式?

Redis主从模式当主服务器宕机后,需要手动把一台从服务器切换为主服务器,需要人工干预费事费力,为了解决这个问题出现了哨兵模式。

如下图所示:

Redis哨兵模式详解(作用原理及优缺点)-mikechen

Redis哨兵模式功能

Redis哨兵模式提供了以下功能:

Redis哨兵模式详解(作用原理及优缺点)-mikechen

1.监控(Monitoring)

负责监控redis master和slave进程是否正常工作。

2.通知(Notification)

如果redis实例有故障,报警通知给管理员。

3.自动故障转移(Automatic failover)

当 主节点 不能正常工作时,Sentinel 会开始一次 自动的 故障转移操作,它会将与 失效主节点 是 主从关系 的其中一个 从节点 ,升级为新的 主节点,并且将其他的 从节点 指向 新的主节点。

4.配置提供者(Configuration provider)

如果故障转移发生了,通知client客户端新的master地址。

 

Redis哨兵模式原理

当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。

如下图所示:

Redis哨兵模式详解(作用原理及优缺点)-mikechen

原理是哨兵通过发送命令(ping命令),等待Redis服务器响应,如果在指定时间内,主机Redis无响应,从机则判断主机宕机,选举从机上位,从而监控运行的多个Redis实例。

第一步:心跳机制

每个 Sentinel 会每秒钟 一次的频率向它所知的 主服务器、从服务器 以及其他 Sentinel 实例 发送一个 PING 命令,获取其拓扑结构和状态信息。

如下图所示:

Redis哨兵模式详解(作用原理及优缺点)-mikechen

每个 Sentinel 节点会向主节点、从节点、以及其余 Sentinel 节点定时发送 ping 命令作为心跳检测, 来确认这些节点是否可达,共同监控数据节点的运行状况。

第二步:判断master节点是否下线

每个 sentinel 哨兵节点每隔1s 向所有的节点发送一个PING命令,作用是通过心跳检测,检测主从服务器的网络连接状态。

如果 master 节点回复 PING 命令的时间超过 down-after-milliseconds 设定的阈值(默认30s),则这个 master 会被 sentinel 标记为主观下线。

如下图所示:

Redis哨兵模式详解(作用原理及优缺点)-mikechen

第三步:基于Raft算法选举领头sentinel

master客观下线,那就需要一个sentinel来负责故障转移,所以需要通过选举一个sentinel的领头羊来解决。

如下图所示:

Redis哨兵模式详解(作用原理及优缺点)-mikechen

第四步:故障转移

故障转移的一个主要问题和选择领头sentinel问题差不多,就是要选择一个slaver节点来作为master。

选择主Maseter过程大致如下:

① 选择优先级最高的节点,通过sentinel配置文件中的replica-priority配置项,这个参数越小,表示优先级越高;

② 如果第一步中的优先级相同,选择offset最大的,offset表示主节点向从节点同步数据的偏移量,越大表示同步的数据越多;

③ 如果第二步offset也相同,选择run id较小的;

这样通过以上四大步骤,实现由Redis Sentinel自动完成故障发现和转移,实现自动高可用。

 

Redis哨兵模式的优缺点

哨兵模式优点:最大的优点就是主从可以自动切换,系统更健壮,可用性更高;

哨兵模式缺点:最大的缺点就是还要多维护一套哨兵模式,实现起来也变的更加复杂增加维护成本;

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法