架构上,高可用性,需要保证公式99.99%(四个9)。
即一年365天,有365*99.99%天数系统是可用的。

Redis的不可用性情况

单实例

单机的Redis宕机,无法对外提供缓存服务,所有的请求服务全部走数据库,导致数据库并发处理请求太多,造成数据库不可用,进而造成系统不可用。

主从架构不可用

master节点宕机,无法处理写请求,mater缓存失效。
slave节点无法同步master节点数据,一定程度下不可用。

slave节点宕机,并不会影响可用性,master节点还可以继续对外提供服务。

Redis主从架构如何保证高可用性

使用哨兵机制实现系统的高可用性。
在master节点宕机后,哨兵可以检测到master节点的状态,客观确认宕机后,哨兵会通过选举的方式,在可用的slave节点上,选举一台机器,切换为master节点。后续,旧的master节点恢复后,就作为新的slave节点加入集群当中。
只有在做切换的过程当中,redis集群是不可用的,这个过程时间很短,只有几分钟。
这种保证高可用的架构,称为主备切换(或故障转移)。

哨兵的介绍

sentinal,哨兵。

主要功能

1、集群监控:负责监控 redis master和slave进程是否正常工作。
2、消息通知:如果某个redis实例出现故障,那么哨兵会负责发送消息报警通知。
3、故障转移:如果master节点挂掉,会自动将一个slave节点切换为master节点。
4、配置中心:故障转移发生后,会通知client客户端新的master节点地址。

哨兵集群

故障转移时,判断一个master节点宕机,需要大部分哨兵都统一才行(涉及到分布式选举的问题);
即使部分哨兵节点挂掉,哨兵集群还是能正常工作。
哨兵架构必须为集群架构。

哨兵核心知识

哨兵至少需要3个实例来保证自己的健壮性。
哨兵+redis主从部署架构,是不会保证数据零丢失的,只能保证redis集群的高可用性。
对于哨兵+redis主从这种复杂的部署架构,需要在测试环境和生产环境上,都进行充足的测试和演练。

为什么哨兵集群必须部署2个以上节点

如果哨兵集群只部署2个哨兵实例,则对应的quorum=1。

quorum,主要表示:在master宕机之后,需要有多少个哨兵认为master宕机。

同时需要保证有majority个哨兵是运行的,保证哨兵的选举。

majority主要表示:需要多少个哨兵运行,才能允许执行故障转移。(2个哨兵的majority=2,3个哨兵的majority=2,5个哨兵的majority=3)。

  1. +-----+ +-----+
  2. | M1 |-------------| R1 |
  3. | S1 | | S2 |
  4. +-----| +-----+
  5. 两台机器
  6. 两个节点,一个master节点M1,一个slave节点 R1
  7. 两个哨兵实例, S1 S2
  8. 对应的quorum=1majority=2
  9. 此时,如果运行M1S1的机器宕机,就会导致哨兵只有1个,没有majoryity个哨兵实例来允许执行故障转移
  10. 故障转移失败

经典的3哨兵集群

  1. +----+
  2. | M1 |
  3. | S1 |
  4. +----+
  5. |
  6. +----+ | +----+
  7. | R2 |----+----| R3 |
  8. | S2 | | S3 |
  9. +----+ +----+
  10. Configuration: quorum = 2majority=2
  11. 如果M1所在机器宕机了,那么三个哨兵还剩下2个,S2S3可以一致认为master宕机,
  12. 然后选举出一个来执行故障转移。
  13. 同时3个哨兵的majority2,所以还剩下的2个哨兵运行着,就可以允许执行故障转移。