Redis 3.x——哨兵基本概念

发布时间:2026/7/16 18:27:35
Redis 3.x——哨兵基本概念 哨兵基本概念1、主从复制的问题2、高可用3、Redis Sentinel的高可用性由于对Redis的许多概念都有不同的名词解释所以在介绍Redis Sentinel之前先对几个名词进行说明这样便于在后面的介绍中达成一致如表所示。1、主从复制的问题Redis的主从复制模式可以将主节点的数据改变同步给从节点这样从节点就可以起到两个作用第一作为主节点的一个备份一旦主节点出了故障不可达的情况从节点可以作为后备“顶”上来并且保证数据尽量不丢失主从复制是最终一致性​。第二从节点可以扩展主节点的读能力一旦主节点不能支撑住大并发量的读操作从节点可以在一定程度上帮助主节点分担读压力。但是主从复制也带来了以下问题一旦主节点出现故障需要手动将一个从节点晋升为主节点同时需要修改应用方的主节点地址还需要命令其他从节点去复制新的主节点整个过程都需要人工干预。主节点的写能力受到单机的限制。主节点的存储能力受到单机的限制。2、高可用Redis主从复制模式下一旦主节点出现了故障不可达需要人工干预进行故障转移无论对于Redis的应用方还是运维方都带来了很大的不便。对于应用方来说无法及时感知到主节点的变化必然会造成一定的写数据丢失和读数据错误甚至可能造成应用方服务不可用。对于Redis的运维方来说整个故障转移的过程是需要人工来介入的故障转移实时性和准确性上都无法得到保障图1到图5展示了一个1主2从的Redis主从复制模式下的主节点出现故障后是如何进行故障转移的过程如下所示。1)如图1所示主节点发生故障后客户端(client)连接主节点失败两个从节点与主节点连接失败造成复制中断。2)如图2所示如果主节点无法正常启动需要选出一个从节点(slave-1)对其执行slaveof no one命令使其成为新的主节点。3)如图3所示原来的从节点(slave-1)成为新的主节点后更新应用方的主节点信息重新启动应用方。4)如图4所示客户端命令另一个从节点(slave-2)去复制新的主节点(new-master)5)如图5所示待原来的主节点恢复后让它去复制新的主节点。上述处理过程就可以认为整个服务或者架构的设计不是高可用的因为整个故障转移的过程需要人介入。考虑到这点有些公司把上述流程自动化了但是仍然存在如下问题第一判断节点不可达的机制是否健全和标准。第二如果有多个从节点怎样保证只有一个被晋升为主节点。第三通知客户端新的主节点机制是否足够健壮。Redis Sentinel正是用于解决这些问题。3、Redis Sentinel的高可用性当主节点出现故障时Redis Sentinel能自动完成故障发现和故障转移并通知应用方从而实现真正的高可用。Redis2.6版本提供Redis Sentinel v1版本但是功能性和健壮性都有一些问题如果想使用Redis Sentinel的话建议使用2.8以上版本也就是v2版本的RedisSentinel。Redis Sentinel是一个分布式架构其中包含若干个Sentinel节点和Redis数据节点每个Sentinel节点会对数据节点和其余Sentinel节点进行监控当它发现节点不可达时会对节点做下线标识。如果被标识的是主节点它还会和其他Sentinel节点进行“协商”​当大多数 Sentinel节点都认为主节点不可达时它们会选举出一个Sentinel节点来完成自动故障转移的工作同时会将这个变化实时通知给Redis应用方。整个过程完全是自动的不需要人工来介入所以这套方案很有效地解决了Redis的高可用问题。如图所示Redis Sentinel与Redis主从复制模式只是多了若干Sentinel节点所以Redis Sentinel并没有针对Redis节点做了特殊处理这里是很多开发和运维人员容易混淆的。从逻辑架构上看Sentinel节点集合会定期对所有节点进行监控特别是对主节点的故障实现自动转移。下面以1个主节点、2个从节点、3个Sentinel节点组成的Redis Sentinel为例子进行说明拓扑结构如图所示。整个故障转移的处理逻辑有下面4个步骤1)如图所示主节点出现故障此时两个从节点与主节点失去连接主从复制失败。2)如图所示每个Sentinel节点通过定期监控发现主节点出现了故障。3)如图所示多个Sentinel节点对主节点的故障达成一致选举出sentinel-3节点作为领导者负责故障转移。4)如图所示Sentinel领导者节点执行了故障转移整个过程和9.1.2节介绍的是完全一致的只不过是自动化完成的。5)故障转移后整个Redis Sentinel的拓扑结构图所示。通过上面介绍的Redis Sentinel逻辑架构以及故障转移的处理可以看出Redis Sentinel具有以下几个功能监控Sentinel节点会定期检测Redis数据节点、其余Sentinel节点是否可达。通知Sentinel节点会将故障转移的结果通知给应用方。主节点故障转移实现从节点晋升为主节点并维护后续正确的主从关系。配置提供者在Redis Sentinel结构中客户端在初始化的时候连接的是Sentinel节点集合从中获取主节点信息。同时看到Redis Sentinel包含了若个Sentinel节点这样做也带来了两个好处对于节点的故障判断是由多个Sentinel节点共同完成这样可以有效地防止误判。Sentinel节点集合是由若干个Sentinel节点组成的这样即使个别Sentinel节点不可用整个Sentinel节点集合依然是健壮的。但是Sentinel节点本身就是独立的Redis节点只不过它们有一些特殊它们不存储数据只支持部分命令。