Redis Sentinel 简介

redis主从复制模式下,一旦主节点故障不能提供服务,需要人工将从节点晋升为主节点,再通知所有的程序把master地址统统改一遍,然后重新上线。毫无疑问,这种故障处理的方法是效率低下的,无法接受。于是,redis从 2.8 开始正式提供了sentinel 架构来解决这个问题。redis sentinel是redis的高可用实现方案,多个sentinel 进程协同工作,组成了一套分布式的架构,它负责持续监控主从节点的健康状况,当主节点挂掉时,自动选择一个最优的从节点切换为主节点。客户端来连接集群时,会首先连接 sentinel,通过sentinel来查询主节点的地址,然后再去连接主节点进行数据交互。当主节点发生故障时,客户端会重新向 sentinel要地址,sentinel会将最新的主节点地址告诉客户端。这样应用程序将无需重启即可自动完成节点切换。

主从切换的过程

每个 sentinel节点通过定期监控master的健康状况。

Redis Sentinel 架构原理详解(一)

 主节点出现故障,两个从节点与主节点失去连接,主从复制失败。

Redis Sentinel 架构原理详解(一)

sentinel集群发现master故障后,多个sentinel节点对主节点的故障达成一致,在3个 sentinel 节点中选择一个作为leader ,例如,选举出sentinel-0 节点作为 leader,来负责故障转移。

Redis Sentinel 架构原理详解(一)

leader sentinel 把一个slave节点提升为master,并让另一个slave从新的master复制数据,并告知客户端新的master的信息。

Redis Sentinel 架构原理详解(一)

 故障的旧master上线后,leader sentinel让它从新的master复制数据。

Redis Sentinel 架构原理详解(一)

以上就是sentinel集群进行故障转移的整体流程,具体的一些细节还会详细介绍,这里先总结一下sentinel集群在redis主从架构高可用中起到的 4 个作用:

  • 集群监控    sentinel节点会定期检测 redis 数据节点、其余 sentinel 节点是否故障。
  • 故障转移    实现从节点晋升为主节点并维护后续正确的主从关系。
  • 配置中心    sentinel 架构中,客户端在初始化的时候连接的是 sentinel 集群,从中获取主节点信息。
  • 消息通知    sentinel 节点会将故障转移的结果通知给客户端。

此外,使用sentinel集群而不是单个sentinel节点去监控redis主从架构有两个好处:

  • 对于节点的故障判断由多个sentinel节点共同完成,这样可以有效地防止误判。
  • sentinel集群可以保证自身的高可用性,即某个sentinel节点自身故障也不会影响sentinel 集群的健壮性。

总结

上面介绍了redis哨兵架构的基础知识,包括主从切换的过程,sentinel集群在redis主从架构高可用中的作用。后续会和大家一起学习sentinel集群的监控功能细节,欲知后续如何,且听下回分解。

 

相关文章: