• 九、Redis三种集群模式


    系统中只有一台redis服务器是不可靠的,容易出现单点故障。为了避免单点故障,可以使用多台redis服务器组成redis集群。redis支持三种集群模式。

    一、主从模式

    至少需要两台redis服务器,一台主节点(master)、一台从节点(slave),组成主从模式的Redis集群。通常来说,master主要负责写,slave主要负责读,主从模式实现了读写分离。

    集群中有多台redis节点,就必须保证每个节点中的数据是一致的。redis中,为了保持数据一致性,数据总是从master复制到slave,这就是redis的主从复制。

    主从复制的作用:

    • 数据冗余:实现了数据的热备份,是持久化之外的另一种数据冗余方式
    • 故障恢复:master故障时,slave可以提供服务,实现故障快速恢复
    • 负载均衡:master负责写,slave负责读。在写少读多的场景下可以极大提高redis吞吐量
    • 高可用基石:主从复制是redis哨兵模式和集群模式的基础。

    主从复制实现原理:

    主从复制过程主要可以分为3个阶段:连接建立阶段、数据同步阶段、命令传播阶段。

    1. 连接建立阶段:在主从节点之间建立连接,为数据同步做准备。
    2. 数据同步阶段:执行数据的全量(或增量)复制(复制RDB文件)
    3. 命令传播阶段:主节点将已执行的命令发送给从节点,从节点接收命令并执行,从而实现主从节点的数据一致性

    主从模式中,一个主节点可以有多个从节点。为了减少主从复制对主节点的性能影响,一个从节点可以作为另外一个从节点的主节点进行主从复制。

    不足之处:主节点宕机之后,需要手动拉起从节点来提供业务,不能达到高可用。

    二、哨兵模式(Sentinel

    Redis Sentinel是Redis的高可用实现方案,它可以实现对redis的监控、通知和自动故障转移,当redis master挂掉之后,可以自动拉起slave提供业务,从而实现redis的高可用。为了避免Sentinel本身出现单点故障,Sentinel自己也可采用集群模式。

    哨兵模式的原理

    Sentinel是一种特殊的redis节点,每个sentinel节点会维护与其他redis节点(包括master/slave/sentinel)的心跳。

    当一个sentinel节点与master节点的心跳丢失时,这个sentinel节点就会认为master节点出现了故障,处于不可用的状态,这种判定叫作主观下线(即sentinel节点自己主观认为master下线了)

    之后,这个sentinel节点会与其他sentinel节点交换信息,如果发现认为主节点发生故障的sentinel节点的个数超过了某个阈值(通常为sentinel节点总数的1/2+1,即超过半数),则sentinel会认为master节点已经处于客观下线的状态,即大家都认为master故障不可用了。

    之后,sentinel节点中会选举处一个sentinel leader来执行redis主节点的故障转移。

    被选举出的 Sentinel 领导者进行故障转移的具体步骤如下:

    (1)在从节点列表中选出一个节点作为新的主节点

    • 过滤不健康或者不满足要求的节点;

    • 选择 slave-priority(优先级)最高的从节点, 如果存在则返回, 不存在则继续;

    • 选择复制偏移量最大的从节点 , 如果存在则返回, 不存在则继续;

    • 选择 runid 最小的从节点。

    (2)Sentinel 领导者节点会对选出来的从节点执行 slaveof no one 命令让其成为主节点。

    (3)Sentinel 领导者节点会向剩余的从节点发送命令,让他们从新的主节点上复制数据。

    (4)Sentinel 领导者会将原来的主节点更新为从节点, 并对其进行监控, 当其恢复后命令它去复制新的主节点。

    三、集群模式

    主从模式实现了数据的热备份,哨兵模式实现了redis的高可用。但是有一个问题,这两种模式都没有解决,这两种模式都只能有一个master节点负责写操作,在高并发的写操作场景,master节点就会成为性能瓶颈。

    redis的集群模式中可以实现多个节点同时提供写操作,redis集群模式采用无中心结构,每个节点都保存数据,节点之间互相连接从而知道整个集群状态。

    如图所示集群模式其实就是多个主从复制的结构组合起来的,每一个主从复制结构可以看成一个节点,那么上面的Cluster集群中就有三个节点。

  • 相关阅读:
    聚观早报 | 微软将推出首款AI芯片;Galaxy S24系列首发
    mysql安装
    Web应用基础
    SQL Server 2019企业版和标准版的区别?
    使用codeblock开发图形化游戏
    流媒体传输 - RTSP 协议
    GIT实践与常用命令---回退
    Nginx与Tomcat部署Vue前后端分离应用
    CustomNavBar 自定义导航栏视图
    Web开发-AjaxRequest 和$.ajax
  • 原文地址:https://blog.csdn.net/Bejpse/article/details/126553530