Redis集群模式

前言

Redis支持集群化部署,以此来保障系统的可用性和拓展性。Redis支持三种集群模式,主从复制、哨兵模式和cluster模式

一、主从模式

 1.1、概述

        主从模式是Redis最基本也是最常见的一种集群化部署模式,其包含一个主节点(master)和多个子节点(slave)(子节点数量最好为奇数),主节点提供写服务,子节点提供只读服务。如果主节点宕机后,需要人工介入手动升级一台子节点作为主节点,以此来保证系统的可用性。子节点和主节点通过一定的复制规则来保证集群中数据的一致性。

1.2、主从复制原理

        主从复制是Redis集群保障数据一致性的一项重要机制,其可分为两部分操作:同步(PSYNC)和命令传播(command propagate),同步又可分为全量同步和整理同步。

        全量同步用于初始化,是slave主动拉取master的数据,来更新自己的数据,以此保证自己和主服务器的数据一致。具体的操作为,slave先发送PSYNC ? -1(全量同步)命令给master,master收到命令后,开始生成RDB快照文件(RDB和AOF的优缺点参考),生成完毕后,master将RDB快照文件发送给slave,slave接收到RDB快照文件后开始载入数据。在此期间,master会将自己收到的写命令存储于自己的缓存区中。slave数据载入完成后,master将自己缓存区写命令发送给slave,slave载入这部分写数据。至此,slave的数据初始化完成。

        增量同步用于网络等原因导致主节点和从节点断开连接后,主节点发起增量同步请求。避免全量同步。全量同步在数据量很大是,会造成很大的网络开销。增量同步可参考:Redis 主从复制原理--增量复制原理分析-CSDN博客

        命令传播(command propagate)是在slave数据初始化完成后,为了保证后续和master的数据一致性,master在接收到写命令后会先缓存写命令,然后再将写命令同步给slave,循环往复运行。

1.3、主从模式优缺点

    优点:

  1. 实现了读写分离,提高了系统可用性,避免单机故障
  2. 主从复制是异步执行的,不阻塞用户的使用

    缺点:

  1. 一旦master宕机后,需要人为介入切换maste节点,并且手动修改用户端新master节点的信息。在此期间还存在部分数据无法同步的问题,
  2. master宕机,新master选取出来后,slave会重新发送SYNC命令请求同步,会造成master压力倍增。
  3. 扩容比较复杂。

二、哨兵模式(Sentinel

2.1、概述

        为了解决主从模式中,master宕机后人为处理困难、处理时效长等问题。Sentinel由此应运而生。Sentinel模式可主动的监控master是否宕机,并在master宕机后通过一定的规则选举出新的master,选取完成之后,自动更新客户端master和slave节点的连接信息。

        Sentinel本质也是一个redis服务,只是其并不提供服务,只监管。

2.2、故障转移

        Sentinel系统的主要功能为故障转移。其大致的流程为:1、监控master节点,确定节点宕机后,触发选取。2、选举:通过一定的规则从slave中选举出一个新的master。3、选取完成后,主动修改客户端的节点配置。最终完成故障转移。

2.2.1、如何确定master宕机

        Sentinel系统每隔1s就会向master发送PING命令,并接收信息。如果超过一定时间(down-after-milliseconds)没有回复,则代表此节点下线。为了防止虚假下线,Sentinel系统也需要部署三台以上(奇数个),每台都监听master。如果其中半数以上的Sentinel均认为master下线,master才算做真正下线。

         以上步骤涉及到两个名词:主观下线和客观下线

  • 主观下线:一台哨兵认为master下线,这时候master还不算下线
  • 客观下线:半数以上的哨兵均认为master下线,这个时候master真正下线

2.2.2、如何选举新master

        当哨兵开始进行主从切换时,他们选择新的master一般来说可总结为"筛选+排序",Sentinel系统首先通过选举机制(RAFT算法)先选出一个leader哨兵来执行Redis的主从切换。这个leader哨兵开始进行主从切换时,他们选择新的master一般来说可总结为"筛选+排序"两个过程。

筛选机制:

  1. 筛选掉已经下线或者断线的slave
  2. 筛选掉没有响应的slave
  3. 筛选掉与原master断开超过down-after-milliseconds*10毫秒的slave,保证剩下的slave保存的数据都是最新的

排序机制:

  1. 首先根据slave服务器配置的优先级,选择出优先级最高的一个slave
  2. 如果都一致,则按照复制偏移量来,选择出复制偏移量最大的slave
  3. 如果上诉选择后仍有多个,则选择出runid最大的一个

2.2.3、如何实现主从的自动切换

        当新master选取出来后,其他的slave和客户端都需要知道新master的信息,这时哨兵进程通过修改以下角色的配置文件,来实现主从的自动切换。

  1. 修改原主节点和从节点的配置文件:将配置文件中的slaveof参数修改为新的主节点的地址和端口
  2. 修改哨兵自己的配置文件:将主节点的地址和端口修改为新的主节点地址和端口

        Redis采用哨兵模式部署后,客户端在寻找主从地址时,就不会直接去redis中寻找,而是通过哨兵模式来寻址。当主从切换完成后,哨兵里面的master地址也会是新的地址。这时候客户端来访问时,自然的也就是访问到的新master地址了。

2.3、哨兵模式优缺点

优点:

  • 具备主从复制模式的优点
  • 具备自动故障转移的能力

缺点

  • 扩容困难
  • 故障转移期间无法提供写服务
  • master提供写服务,slave提供读服务,资源浪费比较大。 

三、Redis Cluster 模式

3.1、概述

        Cluster模式实际上就是一种服务器分片技术,旨在实现Redis集群基本功能的基础下,还可以进行更好的扩容和资源的利用。

3.2、Cluster 模式

        Redis Cluster采用节点+hash slot的方式实现,每个节点可以可以理解为一个服务器,每个节点上面有一个master和多个slave,当master挂掉后,集群自动将slave升级为master。数据存储采用分片的方式,分片采用hash slot,Redis集群总共有16384个slot,每个节点管理着一部分slot。当读写请求来时,Redis首先会将Key通过CRC16校验后判断该Key应该放置的slot。然后判断该slot处于哪个节点上,最终通过访问指定的节点来实现数据的读写。

        通过这种方式,Redis可以很轻松的实现扩容,并且每个节点都承担了一部分的读写,没有了内存和IO瓶颈的限制。当其中的一个节点宕机后,Redis会重新分配slot到剩下的节点,提高了系统的可用性。

        当集群需要新增节点或者删除节点时,这时由于需要重新分配slot,所以需要进行Redis数据的迁移与备份。可参考:redis 6.2 集群 迁移节点,添加节点,删除节点_--cluster add-node-CSDN博客

3.2.1、请求重定向

        在该模式下,每个节点之间也是会相互通信的,每个节点都保存有其他节点的信息,以及其他节点维护的slot信息。当客户端第一次请求时,会随机到一个节点上,此时该节点会先计算Key所存储的slot,然后判断在哪个节点上。如果在自己节点上,那么直接保存或者返回value值。如果在其他节点上,那么会返回客户端一个重定向的消息,让客户端重新请求重定向的节点。

参考:

https://blog.csdn.net/weixin_43798031/article/details/122555409

Redis三种集群模式详解-腾讯云开发者社区-腾讯云

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值