分布式缓存-Redis主从和哨兵

Redis主从

单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。

数据同步

主节点有了从节点之后,就需要进行数据同步

全量同步流程:

1、slave节点请求同步

2、主节点开启子线程将内存数据生成RDB,发送RDB到slave

3、slave清空本地数据,利用RDB文件同步主节点数据

4、主节点将开启子线程之后的新增命令记录在repl_baklog,发给从节点进一步同步

增量同步流程:

从节点提交自己的offset到master,主节点获取repl_baklog中从offset之后的命令,发送给从节点

全量增量选择:

1、主从第一次同步->全量

2、断开时间太久了,repl_baklog中的offset已经被覆盖了(想增量也办不到了)->全量

3、能找到offset->增量

slave从节点宕机恢复后可以找master主节点同步数据,那master节点宕机怎么办?

哨兵的作用 

Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下:

1、监控:哨兵不断检查主从节点是否正常工作

2、自动故障恢复:主节点故障,哨兵将一个从节点提升为主节点。当故障恢复继续使用新主节点

3、通知:哨兵充当Redis客户端的服务发现来源,主从节点发生变化推送给redis客户端

服务状态监控:

Sentinel基于心跳机制检测服务状态,每隔一秒向集群的每个实例发送ping命令:

1、主观下线:哨兵集群中的某个哨兵发现某个实例未在规定时间响应,则该哨兵认为实例主观下线

2、客观下线:若集群中超过一半的哨兵都认为该实例主观下线,则认为该实例客观下线(真故障了)

如何选举新的master

一旦发现master故障,sentinel需要在从节点中选出一个新主节点

1、首先判断从节点与主节点断开时间长短,断开时间过长直接排除

2、判断从节点的slave-priority值,值越小优先级越高

3、slave-priority一样,则判断从节点offset值,越大->数据越新->优先级越高

4、判断从节点运行id大小,越小->优先级越高

如何实现故障转移?

选中要成为主节点的从节点后,

1、哨兵给备选从节点发送slave of no one 命令,晋升为主节点

2、哨兵给其他从节点发送命令,让其他从节点的master变成新主节点,并开始从新主节点上同步数据

3、将原故障主节点标记为slave,故障恢复后自动成为新主节点的从节点

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值