redis多Master分布式缓存

Redis Cluster

一.Redis Cluster的架构

  • 多个master node,每个master node 都可以挂载多个slave node。
  • 读写分离的架构,对应每个master node来说,写就写到master node,读就从master node对应的slave node去读。
  • 高可用。每个master node都有多个 slave node,如果master node挂了,redis cluster机制就会自动将某个slave node切换成 master node。

二.数据分布算法

(1)redis cluster机制

  • 自动将数据分片,每个master node上面存放一部分数据。
  • 提供内置的高可用支持,部分master node不可用时,还是可以工作的。
  • 在redis cluster架构中,每个redis要开发两个端口,比如一个是6379,那么另一个就是加10000之后的端口号,比如16379。16379端口是用来进行节点间通信的,也就是cluster bus集群总线,cluster bus的通信用来进行故障检测、配置更新、故障转移授权等操作。
  • cluster bus用来一种二进制的协议,主要用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间

(2)最古老的hash算法

原理 :来了一个key之后,计算hash值,然后对master node节点数量取模,将数据哈希到不同的节点。
存在问题 :会导致大量缓存重建的问题。这种情况下,一旦一个master宕机了,所有的请求过来之后,就会对新的节点数量(原节点数量-1)去取模,然后去相应的node取数据,这样会导致请求走不到原本路由到的实例上面去,导致大量的key瞬间全部失效。

在这里插入图片描述

(3)一致性hash算法(自动缓存迁移)

原理 :将所有master node落在一个圆环上面,然后,有一个key过来之后。同样就是hash值,然后会用hash值在圆环对应的各个点上(每个点都有一个hash值)去对比,看hash值落在那个位置,落在圆环上面以后,就会顺时针旋转去寻找距离自己最近的一个节点,数据的存储于读取都在该节点进行。
优势 :保证了任何一个master宕机,只会影响之前在那个master上面的数据,因为照着顺时针走,全部在之前的master上面找不到了,master也宕机了,就会继续顺着顺时针走到下一个master节点去。这样就只会有一部分数据丢失。
存在问题 :假如有3个master,那么就会丢失1/3的数据,这也是很多的。还会存在 缓存热点的问题。 缓存热点问题 :可能在某个hash区间内存在大值特别多,那么就会导致大量的数据进入同一个master,造成该master出现瓶颈。

在这里插入图片描述

(4)一致性哈希(自动缓存迁移)+虚拟节点(自动负载均衡)

为了解决上面的问题,在一致性哈希的基础上增加了虚拟节点方案来处理。
原理 :给每个master都做了一部分的虚拟节点,这部分虚拟节点也分布在这个圆环上面,那么在每个区间内,大量的数据就会均匀的分布在不同节点上。
在这里插入图片描述

(5)hash slot算法

原理 :①redis cluster有固定的16384个hash slot,每个key计算CRC16值,然后多
16384取模,可以获取key对应的hash slot。
②redis cluster中每个master节点都会持有一部分hash slot。
③增加一个master,就讲其他master的hash slot移动一部分给新加入的master。
④减少一个master,就将他的hash slot移动到其他master上面去。
⑤移动hash slot的成本是非常低的。
⑥客户端的api是可以指定hash tag来让数据走同一个hash slot的。

在这里插入图片描述

三.高可用与主备切换原理

redis cluster的高可用原理,几乎和哨兵时类似的。

  1. 判断节点宕机
    ①如果一个节点认为另一个节点道济,那么就是pfail,主观宕机。
    ②如果多个节点都认为另外一个 节点宕机了,那就是fail,客观宕机。
    ③在cluster-node-timeout内,某个几点一直没有返回pong,那么就认为pfail。
    ④如果一个节点认为某个节点pfail了,那么会在gossip ping消息中,发送给其他节点,如果超过半数的节点都认为pfail了,那就好变成fail。
  2. 从节点过滤
    ①对宕机的master node,从其所有的slave node中,选择一个切换成master node。
    ②检查每个slave node与master node断开连接的时机,如果超过了cluster-node-timeout * cluster-slave-validity-factor,那么这个节点就没有资格切换成 master node,直接被过滤。
  3. 从节点选举
    ①每个从几点,都根据自己对master复制数据的offset,来设置一个选举时间,offset越大的从节点,选举时间越靠前,优先进行选举。
    ②所有的master node开始slave选举投票,给要进行选举的slave进行投票,如果大部分master node(N/2 + 1)都投票给了某个从节点,那么选举通过,那个从节点可以切换成master node。
    ③从节点执行主备切换,从节点切换为主节点。
  4. 与哨兵进行比较
    整个流程跟哨兵相比,非常类似,所以说,redis cluster功能强大,直接集成了replication和sentinal的功能
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值