Redis简明教程:哨兵模式
Redis简明教程:哨兵模式
Redis Sentinel
Redis Sentinel(哨兵模式)是Redis的高可用实现方案,在实际的生成环境中,对提高整个系统的高可用性是非常有帮助的。
主从复制的问题
Redis的主从复制模式可以将主节点的数据改变同步到从节点。
这样从节点就可以起到两个作用:
- 作为主节点的一个备份,一旦主节点出现故障,从节点可以作为后备“顶”上来,并且保证数据尽量不丢失。(主从复制是最终一致性)
- 从节点可以扩展主节点的读能力,当主节点面临大规模的读操作时,从节点可以分担压力。
但是主从复制也带来一些问题,比如当主节点出现故障,我们需要手动选择一个从节点代替它,此时不仅要修改应用方的主节点地址,还要命令其他从节点复制新的主节点,整个过程都需要人工干预。其次,主节点的读写能力、存储能力都受制于单机。
聊一聊高可用
聊到高可用,我们先来了解一下这个概念是什么意思:
“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
通俗理解就是说很少发生故障,即使发生故障也能在最短时间内恢复的系统称之为高可用性。
那显然主从复制模式是无法满足高可用性的,因为一旦主节点宕机,需要人工干预进行故障转移,并且应用方很难第一时间发现问题,肯定会造成数据的读写错误,甚至造成应用法宕机。
既然我们提到哨兵模式,必然是优于主从复制模式的。那他到底是个什么样的架构呢?我们来揭开他的神秘面纱!
哨兵模式
其实啊,哨兵模式只是比主从模式多了若干个Sentinel节点。从下图的逻辑架构上看,Sentinel节点集合会定期对所有节点进行监控,特别是对主节点的故障实现自动转移。
我们来模拟一下故障转移的四个步骤:
1)主节点出现故障,此时两个从节点与主节点失去连接,主从复制失败!
2)每个Sentinel节点通过定期监控发现主节点出现了故障。
3)多个Sentinel节点对主节点的故障达成一致,选举出Sentinel-2节点作为领导者负责故障转移。
4)Sentinel领导者节点执行了故障转移,整个过程自动完成,不需要人工干预!
5)故障转移后,整个拓扑结构如下。
梳理一下哨兵的功能
哨兵名字起得很通俗,放哨的,在Redis Sentinel架构中,它尽职尽责!
- 监控:Sentinel定期检测Redis数据节点、其余的Sentinel是否可达。
- 通知:Sentinel节点会将故障转移的结果通知给应用方。
- 主节点故障转移:实现从节点晋升为主节点并维护后续正确的主从关系。
- 配置提供者:在Redis Sentinel结构中,客户端在初始化的时候连接的是Sentinel节点结合,从中获取主节点信息。
同时哨兵有多个,这样有好处,一个睡着了,其他的接着放哨!
参考资料
- 《Redis开发与运维》