Redis Sentinel 概述

Redis Sentinel 即为哨兵模式;是 Redis 高可用实现方案。为解决主从复制故障处理的一种方案。

Redis Sentinel 是一个分布式架构,其中包含若干个Sentinel节点和Redis 数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当 它发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还 会和其他Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举出一个Sentinel节点来完成自动故障转移的工作,同时会将这个变化实时通知给Redis应用方。

总结:提供给客户端的连接为 Redis Sentinel 连接,而非具体的 Redis 数据节点的连接。主从复制的切换,完全由 Redis Sentinel 控制。

主从复制存在的问题

  • 手动故障转移:如当 master 节点宕机时,需要手动将 slave 节点升级为 master 节点。
  • 写性能和存储能力受限:主节点受单机原因,写和存储性能都受限制。

主从复制异常处理流程

如图架构:

当 master 节点宕机后,处理流程:

  • slave-1 节点取消主从复制,即:执行 slave no one
  • 变更 slave-2 节点,将主节点变更为 slave-1,即执行:slaveof ip port(其中为slave-1的IP和端口)
  • 将客户端的主从连接变更为新的读写连接。
  • master 宕机恢复后,将 master 节点变更为 slave-1 的从节点。

Redis Sentinel 架构图

image.png

Redis Sentinel 功能

**

  • 监控:Sentinel 会定期检查 Redis 数据节点,及其他 Sentinel 节点是否正常。
  • 通知:Sentinel 会将故障转移的处理结果告知应用方。
  • 自动化故障转移
  • 配置提供者
    • 客户端连接节点信息实际是 Sentinel 的节点信息集合,从中获取主节点的信息。
    • Sentinel 节点集合是有多个 Sentinel 节点组合而成;即使个别节点异常,也不影响整个 Redis Sentinel 服务的健壮性。
    • Redis Sentinel 本身就是独立的 Redis 节点,只不过本身不提供数据处理能力,只提供部分能力。**

Redis Sentinel 故障转移流程

  • Redis 数据节点:当 master 节点异常时候,从节点与主节点失去连接,主从复制异常。
  • Redis Sentinel 通过定期监控,发现主节点异常
  • 多个 Sentinel 节点对主节点的故障达成一致,并通过“协商”,选出其中一个 Sentinel 节点作为执行故障抓获以的“执行领导权”
  • 上步骤的拥有 “执行领导权” 的 Sentinel 节点执行故障转移操作步骤,直至恢复。