8. 【Redis主从架构】哨兵基础知识


文章目录

  • 8. 【Redis主从架构】哨兵基础知识
  • 1. 哨兵介绍
  • 1.1 哨兵主要功能
  • 2 哨兵集群
  • 2.1 哨兵集群工作原理
  • 3. 哨兵的核心知识
  • 4. 为什么redis哨兵集群只有2个节点无法正常工作
  • 4. 经典的3节点哨兵集群


1. 哨兵介绍

sentinal, 中文名是哨兵,哨兵是redis集群架构中非常重要的一个组件

1.1 哨兵主要功能

  • (1)集群监控,负责监控redis master 和 slave 进程是否正常工作。
  • (2)消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员
  • (3)故障转移,如果master node挂掉了,会自动转移到slave node上。
  • (4)配置中心,如果故障转移发生了,会通知client客户端更新最新的master地址。

2 哨兵集群

哨兵本身也是分布式的,作为一个哨兵集群去运行,互相协同工作保证哨兵的高可用

2.1 哨兵集群工作原理

  • (1)故障转移时,判断一个master node是否宕机了,需要大部分的哨兵同意才行,涉及到了分布式选举的问题。
  • (2)即使部分哨兵节点挂掉了哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就坑爹了。

3. 哨兵的核心知识

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

4. 为什么redis哨兵集群只有2个节点无法正常工作

+----+         +----+
| M1 |---------| R1 |
| S1 |         | S2 |
+----+         +----+

哨兵集群中有两个关键的配置

  • quorum: 只有有最少quorum个哨兵认为master宕机了,就认为master宕机了。
  • majority: 只要有最少majority个哨兵是正常运行的,就允许执行故障转移

问题分析:为什么只有两个哨兵节点的哨兵集群不能正常运行?

  1. 假如master m1宕机了,只要有s1或s2中其中一个认为master宕机了,就认为master宕机了。
  2. 如果此时需要进行故障转移,就需要 majority 个哨兵都是运行的,并且从中选举出一个哨兵执行故障转移2个哨兵的majority是2(2的majority是2,3的majority是2,4的majority是3,5的majority是3),计算公式是:n/2 + 1

但是如果整个M1和S1所在的机器宕机了,那么哨兵就只剩下一个了,此时没有足够的majority的哨兵来允许执行故障转移,因此就不会进行故障转移。

4. 经典的3节点哨兵集群

+----+
       | M1 |
       | S1 |
       +----+
          |
+----+    |    +----+
| R2 |----+----| R3 |
| S2 |         | S3 |
+----+         +----+

三个节点的哨兵:quorum配置一般是2,majority也为2