redis 哨兵模式的架构解析

一 redis的主从复制过程

前言: 哨兵模式作为一段时间很主流的模式,但是其需要部署sentinel集群,相对占资源,其实生产更多用的redis cluster集群,可以看我redis的单独章节有详细的解说。

通过下图,我们一起来了解redis的主从复制过程。

![image](images/rEMTTUX8lJG8K3NHTeGshWSBpxWKSnWeRD0kRltph4U.png)

注意: redis也是可是设置读写分离来提高性能的

其过程如下:

![image](images/LjQmRaQgiRFsgqttsy0cB6u0A0LgBPBmEmtQDN-naP8.png)

  1. 当slave连接master认主
  2. 从节点发送psyn给主节点
  3. master执行bgsave过程,生成rbd快照(于此同时还有adf)
  4. slave读取rbd快捷对自己的数据进行还原
  5. 后续master有更新,都会转发命令给slave

二 什么是redis sentinel(哨兵)高可用集群

如下图是哨兵模式的集群架构:

![image](images/aPfb_zJZ_rkNZze7lLEJD4jPwowxBjTWqYhcKS2weF4.png)

途中所示,我们建立了一个成为sentinel的监控节点集群,他负责对redis的集群进行监控,保活,本身sentinel也是高可用的,具备自己的选主策略,通常我们建议至少6台sentinel节点存在。

接下来我们看当master宕机的情况下集群怎么工作的:

![image](images/OWATg-wxGk0uSVTzyGb59589lgChxu0ldMDEvr8IzPk.png)

![image](images/fXS1OGjCKTMYXsEvC2FRbh0FCqThUrv1LIW-Gp48EoU.png)

![image](images/-7a7qzDOZKqNNlyDWinOB2Yy-DDcKDamRONzpIwR-t0.png)

  1. 若足够多(配置,通常设置为 sentinel数量/2 + 1)的sentinel在指定时间范围(根据实际情况配置)都ping不不通当前master,即标记当前master为客观下线,准备新的选主过程
  2. sentinel开始剔除主观下线、短线、或者最后一次回复ping命令的时间大于5s的slave节点,剔除与失效master连接断开时长超过down-after设置时间10倍的节点
  3. 按同步数据的偏移量选出数据最完整的slave,偏移量相同,选id最小
  4. sentinel向选中的发送SLAVEOF NO ONE命令,转换其为master
  5. 通过发布订阅功能,将更新后的配置传输给其他的sentinel,其他sentinel自行更行
  6. 其余未被选中的slave向master重新建立连接,重放rbd保持数据同步,过程伴随redis实例自己的配置更新,即便重启配置也不会丢失
  7. 原有的master在恢复后会自动降级为slve与master建立连接

三 sentinel节点挂了怎么办?

![image](images/VR1TI3kKkOzlV7y3sOsuw_2DhyH_rMmgmw9SiHKCpV0.png)

Last modification:July 5, 2022
If you think my article is useful to you, please feel free to appreciate