Redis:高可用——哨兵模式

Redis:高可用——哨兵模式

Redis Sentinel

  Redis Sentinel(哨兵模式)是Redis的高可用实现方案,在实际的生成环境中,对提高整个系统的高可用性是非常有帮助的。

主从复制的问题

  Redis的主从复制模式可以将主节点的数据改变同步到从节点。

  Redis:高可用——哨兵模式_第1张图片  

  这样从节点就可以起到两个作用

  • 作为主节点的一个备份,一旦主节点出现故障,从节点可以作为后备“顶”上来,并且保证数据尽量不丢失。(主从复制是最终一致性)
  • 从节点可以扩展主节点的读能力,当主节点面临大规模的读操作时,从节点可以分担压力

  但是主从复制也带来一些问题,比如当主节点出现故障,我们需要手动选择一个从节点代替它,此时不仅要修改应用方的主节点地址,还要命令其他从节点复制新的主节点,整个过程都需要人工干预。其次,主节点的读写能力、存储能力都受制于单机。

聊一聊高可用

   聊到高可用,我们先来了解一下这个概念是什么意思:

“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。

  通俗理解就是说很少发生故障,即使发生故障也能在最短时间内恢复的系统称之为高可用性

  那显然主从复制模式是无法满足高可用性的,因为一旦主节点宕机,需要人工干预进行故障转移,并且应用方很难第一时间发现问题,肯定会造成数据的读写错误,甚至造成应用法宕机。

   既然我们提到哨兵模式,必然是优于主从复制模式的。那他到底是个什么样的架构呢?我们来揭开他的神秘面纱!

哨兵模式  

   其实啊,哨兵模式只是比主从模式多了若干个Sentinel节点。从下图的逻辑架构上看,Sentinel节点集合会定期对所有节点进行监控,特别是对主节点的故障实现自动转移

  Redis:高可用——哨兵模式_第2张图片

  我们来模拟一下故障转移的四个步骤:

  1)主节点出现故障,此时两个从节点与主节点失去连接,主从复制失败!

  Redis:高可用——哨兵模式_第3张图片

  2)每个Sentinel节点通过定期监控发现主节点出现了故障。

  Redis:高可用——哨兵模式_第4张图片

 

  3)多个Sentinel节点对主节点的故障达成一致,选举出Sentinel-2节点作为领导者负责故障转移。

  Redis:高可用——哨兵模式_第5张图片

  4)Sentinel领导者节点执行了故障转移,整个过程自动完成,不需要人工干预!

  Redis:高可用——哨兵模式_第6张图片

  5)故障转移后,整个拓扑结构如下。

  Redis:高可用——哨兵模式_第7张图片

 

梳理一下哨兵的功能

  哨兵名字起得很通俗,放哨的,在Redis Sentinel架构中,它尽职尽责!

  • 监控:Sentinel定期检测Redis数据节点、其余的Sentinel是否可达。
  • 通知:Sentinel节点会将故障转移的结果通知给应用方。
  • 主节点故障转移:实现从节点晋升为主节点并维护后续正确的主从关系。
  • 配置提供者:在Redis Sentinel结构中,客户端在初始化的时候连接的是Sentinel节点结合,从中获取主节点信息。

  同时哨兵有多个,这样有好处,一个睡着了,其他的接着放哨

 

参考资料

  • 《Redis开发与运维》

你可能感兴趣的