Redis集群(一)

目录

前言

主从模式

工作原理

全量复制

部分复制 

复制风暴问题

哨兵模式

哨兵的作用

Sentinel领导者节点的选举

故障转移

哨兵架构图(一主二从三哨兵)


前言

为什么需要集群?

        1、性能方面:虽然Redis本身的QPS已经可以满足大部分的场景了,但是在海量并发的情况下,还是会有性能上的影响的,集群可以分担并发的压力。

        2、高可用方面:保证高可用,当只有一个redis实例时,服务器宕机会导致redis无法提供服务了,对业务会造成影响

        3、存储方面:当数据量过大时,一个redis实例的内存有限,会无法满足相应的需求了。

下面介绍redis的主从模式和哨兵模式

主从模式

为什么需要主从?

       因为redis是单线程的,读多写少的场景,当大量读请求时,写请求就会被延迟写入。主从可以主写,从读,减轻主节点压力。

        但是主从也会有复制数据延迟,读到过期数据,从节点故障的问题。

主从模式只有1个主节点,多个子节点。默认情况下自己都是主节点,根据配置指定主节点和子节点。

复制的数据流是单向的。

Redis5.0版本前是配置slaveof 配置,5.0之后是replicaof 配置

slaveof {masterHost} {masterPort}

replicaof {masterHost} {masterPort}

工作原理

        1、当有一个子节点连接上主节点时,会向master节点发送一个psync命令。

        2、master和slave会建立一个socket长连接

        3、master接受到psync命令后开始将当前内存中的数据生成RDB快照

        4、在生成RDB快照的期间产生的写入命令给缓存起来

        5、RDB快照生成完后将快照发送给slave节点,slave节点会先将RDB快照持久化,然后再根据RDB快照将数据加载到内存中

        6、再将生成快照期间产生的写入命令发送至slave节点,slave根据命令同步数据

        7、master与slave因网络原因断开,slave会自动重连master

        8、若有多个slave向master发送psync命令。master只会持久化RDB快照一次,分别发送给各个slave

psync命令有2个参数,用来控制是全量复制还是部分复制的。

命令格式:psync {runId} {offset}

runId:运行id

offset:已复制数据偏移量。第一次复制时为-1

全量复制

部分复制 

当主从断开连接时,master会将断开后的写入数据放在buffer缓存中,等slave节点继续连接上后,根据psync的offset偏移量可以继续传输写入命令。如果发现offset偏移量已经不在缓存里面了,那么则会进行全量复制。

复制风暴问题

        复制风暴是指大量从节点对同一主节点或者对同一台机器的多个主节点短时间内发起全量复制的过程。复制风暴对发起复制的主节点或者机器造成大量开销,导致 CPU、内存、带宽消耗。因此我们应该提前采用合理的方式规避 。

哨兵模式

为什么需要哨兵模式?

        因为主从模式的话,当master宕机后,需要手动将一台slave节点 设置为master节点。这会导致一段时间内redis不可对外提供服务,而且也需要人工干预处理。因此出现了哨兵模式

哨兵模式是多几台redis节点为哨兵节点,哨兵节点不对外提供服务,只是用来监听redis对外提供服务的节点的。

哨兵的作用

        1、发送命令给主子redis服务器,监控其运行状态

        2、选举master节点,当哨兵检测到master节点无法提供服务时,会从slave中选举一个新的master节点,并通知其他slave节点切换master节点。同时通知客户端切换master。

哨兵(sentienl) 有三个定时任务:

        1、每10s sentinel 会对master和slave执行info命令        作用:确认主从节点

        2、每 2s 每个sentinel 通过master节点的channel交换信息        作用:master节点上有个发布订阅的功能,可以通过该功能进行信息交换

        3、每 1s 每个sentinel 对其他sentinel和redis节点执行ping操作。        作用:心跳检测

主观下线:

        当单台的sentienl 发现某个服务发送的ping没有回复,如果在主观下线判断时间范围内没有得到回复,那么认为该实例主观下线了,将其状态修改为SRI_S_DOWN。

客观下线:

        当多个sentienl将同一个服务器都标记为主观下线时,该服务器则会被标记为客观下线。只有当master被标记为客观下线时,才会进行故障迁移,重新进行master的选举。

Sentinel领导者节点的选举

当主节点挂掉后,哨兵是如何进行处理的呢?

当sentinel节点对主节点做了客观下线后,并不是立马进行选举主节点,进行故障转移。

这里可以想一下,需要重新选举主节点,那么谁来选举?哨兵来选举,那么是多数哨兵选举的就是主节点嘛?

实际并不是这样的,而是让其中一个哨兵来进行主节点选举工作。难么哪个哨兵来进行选举主节点呢?这就得提到sentinel领导者节点了。哪个节点会成为领导者节点?是通过sentinel各个节点选举出来的。选举思路如下:

        1、每个哨兵节点都有可能成为领导者,当它确认主节点已经下线后,会向其他哨兵节点发送sentinel is-master-down-by-addr 命令,自己想成为领导者

        2、收到命令的其他哨兵节点,如果没有过其他哨兵给他发过sentinel is-master-down-by-addr 命令,将会同意,否则会拒绝。就是收到第一个发送过来的命令的节点会被同意成为领导者。

        3、当该哨兵节点发现自己得到同意的票数已经大于哨兵节点的半数,则会成为哨兵的领导者。

        4、如果此过程没有选举出领导者,则会再一次选举。

故障转移

当主节点挂掉后,需要进行故障转移。具体负责故障转移的是上面刚选举出来的sentinel领导者。

        1、在从节点列表中选择一个节点作为新的主节点,选择哪个从节点呢?

                a)过滤节点,将网络不稳定的节点过滤掉。

                b)选择slave-priority(从节点优先级)最高的从节点列表,如果有就选择,没有就往下继续找。

                c)选择复制偏移量最大的从节点(复制数据最多最完整的),如果有就选择,没有就往下继续找。

                d)选择runid最小的从节点。

        2、sentinel领导者节点会对新选择出来的从节点发送slaveof on one 命令使其成为主节点。

        3、sentinel领导者节点会通知剩下的从节点,让它们重新绑定主节点。

        4、sentinel领导者节点会将原来的主节点更新为从节点,并关注其状态,当其恢复后会使其成为从节点,并且绑定新的主节点。

哨兵架构图(一主二从三哨兵)

 这里主要介绍了redis集群中的主从和哨兵模式。

Redis Cluster集群模式:Redis集群(二)_玄郭郭的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值