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 架构图
Redis Sentinel 功能
**
- 监控:Sentinel 会定期检查 Redis 数据节点,及其他 Sentinel 节点是否正常。
- 通知:Sentinel 会将故障转移的处理结果告知应用方。
- 自动化故障转移
- 配置提供者
- 客户端连接节点信息实际是 Sentinel 的节点信息集合,从中获取主节点的信息。
- Sentinel 节点集合是有多个 Sentinel 节点组合而成;即使个别节点异常,也不影响整个 Redis Sentinel 服务的健壮性。
- Redis Sentinel 本身就是独立的 Redis 节点,只不过本身不提供数据处理能力,只提供部分能力。**
Redis Sentinel 故障转移流程
- Redis 数据节点:当 master 节点异常时候,从节点与主节点失去连接,主从复制异常。
- Redis Sentinel 通过定期监控,发现主节点异常
- 多个 Sentinel 节点对主节点的故障达成一致,并通过“协商”,选出其中一个 Sentinel 节点作为执行故障抓获以的“执行领导权”
- 上步骤的拥有 “执行领导权” 的 Sentinel 节点执行故障转移操作步骤,直至恢复。