Redis(开发与运维):42---Sentinel之(哨兵介绍、高可用性)
2020-05-27 12:22
453 查看
一、基本概念
- 由于对Redis的许多概念都有不同的名词解释,所以在介绍Redis Sentinel之前,先对几个名词进行说明,这样便于在后面的介绍中达成一 致,如下图所示
- Redis Sentinel是Redis的高可用实现方案,在实际的生产环境中,对提高整个系统的高可用性是非常有帮助的
二、主从复制的问题
- Redis的主从复制模式可以将主节点的数据改变同步给从节点,这样从节点就可以起到两个作用: 第一,作为主节点的一个备份,一旦主节点出了故障不可达的情况,从节点可以作为后备“顶”上来,并且保证数据尽量不丢 失(主从复制是最终一致性)
- 第二,从节点可以扩展主节点的读能力,一 旦主节点不能支撑住大并发量的读操作,从节点可以在一定程度上帮助主节点分担读压力
- 一旦主节点出现故障,需要手动将一个从节点晋升为主节点,同时需要修改应用方的主节点地址,还需要命令其他从节点去复制新的主节点,整个过程都需要人工干预
三、故障转移演示
- Redis主从复制模式下,一旦主节点出现了故障不可达,需要人工干预进行故障转移,无论对于Redis的应用方还是运维方都带来了很大的不便 对于应用方来说无法及时感知到主节点的变化,必然会造成一定的写数据丢失和读数据错误,甚至可能造成应用方服务不可用
- 对于Redis的运维方来说,整个故障转移的过程是需要人工来介入的,故障转移实时性和准确性上 都无法得到保障
故障转移演示
- 下面展示了一个1主2从的Redis主从复制模式下的 主节点出现故障后,是如何进行故障转移的,过程如下所示
- ①如下图所示,主节点发生故障后,客户端(client)连接主节点失败,两个从节点与主节点连接失败造成复制中断
- ②如下图所示,如果主节点无法正常启动,需要选出一个从节点 (slave-1),对其执行slaveof no one命令使其成为新的主节点
- ③如下图所示,原来的从节点(slave-1)成为新的主节点后,更新应 用方的主节点信息,重新启动应用方
- ④如下图所示,客户端命令另一个从节点(slave-2)去复制新的主节 点(new-master)
- ⑤如下图所示,待原来的主节点(old master)恢复后,让它去复制新的主节点
- 上述处理过程就可以认为整个服务或者架构的设计不是高可用的,因为整个故障转移的过程需要人介入。考虑到这点,有些公司把上述流程自动化了,但是仍然存在如下问题: 第一,判断节点不可达的机制是否健全和标准
- 第二,如果有多个从节点,怎样保证只有一个被晋升为主节点
- 第三, 通知客户端新的主节点机制是否足够健壮
四、Redis Sentinel的高可用性
- 当主节点出现故障时,Redis Sentinel能自动完成故障发现和故障转移, 并通知应用方,从而实现真正的高可用
- 注意:Redis2.6版本提供Redis Sentinel v1版本,但是功能性和健壮性都有一些问题,如果想使用Redis Sentinel的话,建议使用2.8以上版本,也就是v2版本的Redis Sentinel
- 工作原理: Redis Sentinel是一个分布式架构,其中包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识
- 如果被标识的是主节点,它还会和其他Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举出一个Sentinel节点来完成自动故障转移的工作,同时会将这个变化实时通知给Redis应用方
- 整个过程完全是自动的,不需要人工来介入,所以这套方案很有效地解决了Redis的高可用问题
- 从逻辑架构上看,Sentinel节点集合会定期对所有节点进行监控,特别是对主节点的故障实现自动转移
Redis Sentinel故障转移演示
- 下面以1个主节点、2个从节点、3个Sentinel节点组成的Redis Sentinel为例子进行说明,拓扑结构如下图所示:
- 整个故障转移的处理逻辑有下面4个步骤:
- ①如下图所示,主节点出现故障,此时两个从节点与主节点失去连接,主从复制失败
- ②如下图所示,每个Sentinel节点通过定期监控发现主节点出现了故 障
- ③如下图所示,多个Sentinel节点对主节点的故障达成一致,假设此处选举出sentinel-3节点作为领导者负责故障转移
- ④如下图所示,Sentinel领导者节点执行了故障转移,整个过程和上面“三”中介绍的是完全一致的,只不过是自动化完成的
- 故障转移后整个Redis Sentinel的拓扑图如下所示
五、Redis Sentinel的几个功能
- 通过上面介绍的Redis Sentinel逻辑架构以及故障转移的处理,可以看出Redis Sentinel具有以下几个功能: 监控:Sentinel节点会定期检测Redis数据节点、其余Sentinel节点是否 可达
- 通知:Sentinel节点会将故障转移的结果通知给应用方
- 主节点故障转移:实现从节点晋升为主节点并维护后续正确的主从关系
- 配置提供者:在Redis Sentinel结构中,客户端在初始化的时候连接的 是Sentinel节点集合,从中获取主节点信息
- 对于节点的故障判断是由多个Sentinel节点共同完成,这样可以有效地防止误判
相关文章推荐
- Redis(开发与运维):43---Sentinel之(哨兵的安装与部署、哨兵配置参数、部署技巧、哨兵API)
- Redis(开发与运维):44---Sentinel之(哨兵实现原理:三个定时监控任务、主观下线和客观下线、领导者节点选举、故障转移)
- Redis(开发与运维):45---Sentinel之(开发与运维中的问题:故障转移日志、节点运维(节点下线/上线/配置)、高可用读写分离)
- Redis哨兵(sentinel)模式配置详解及原理介绍
- Redis哨兵(sentinel) 搭建可用性
- redis可用性提升(哨兵sentinel)配置示例
- Sentinel(哨兵)实现Redis的高可用性
- redis可用性提升(哨兵sentinel)配置示例
- Redis Sentinel--运维管理
- 如何保证 Redis 高并发、高可用?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么?
- redis 开发与运维 学习心得1
- redis哨兵(sentinel)系统
- Docker容器下Redis的主从配置以及Sentinel哨兵配置
- (转)Redis(四)哨兵_sentinel
- Redis开发与运维阅读笔记(一)
- redis读写分离(主从关系)和哨兵模式简单描述(高可用性)
- redis 哨兵(sentinel)
- Redis哨兵模式(sentinel)
- redis的哨兵Sentinel
- redis99.99%高可用及哨兵介绍及搭建(5)