14-redis cluster集群:redis cluster介绍-数据分布算法:一致性hash算法和redis cluster的hash slot算法


分布式数据存储的核心算法,数据分布的算法

hash算法 -> 一致性hash算法(memcached) -> redis cluster,hash slot算法

用不同的算法,就决定了在多个master节点的时候,数据如何分布到这些节点上去,解决这个问题

1、redis cluster介绍

redis cluster

(1)自动将数据进行分片,每个master上放一部分数据
(2)提供内置的高可用支持,部分master不可用时,还是可以继续工作的

在redis cluster架构下,每个redis要放开两个端口号,比如一个是6379,另外一个就是加10000的端口号,比如16379

16379端口号是用来进行节点间通信的,也就是cluster bus的东西,集群总线。cluster bus的通信,用来进行故障检测,配置更新,故障转移授权

cluster bus用了另外一种二进制的协议,主要用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间

2、最老土的hash算法和弊端(大量缓存重建)

当有n个节点得时候,此时这多个节点都是正常得,这些节点都是固定有序得。当存储一个数据,会对这个数据得key进行取模操作,取模得到得值肯定不会大于节点数量得。通过得到的值去操作对应得节点。

如果此时,有一个节点挂机了,等于之前得节点得顺序改变了。除了失去了这个节点上面得数据外,若此时对key进行取模,就会发现得到的值很有可能找不到对应得节点去拿了,这就可能丢掉得不只是一个节点得数据。

14-redis cluster集群:redis cluster介绍-数据分布算法:一致性hash算法和redis cluster的hash slot算法

3、一致性hash算法(自动缓存迁移)+虚拟节点(自动负载均衡)

14-redis cluster集群:redis cluster介绍-数据分布算法:一致性hash算法和redis cluster的hash slot算法

 

14-redis cluster集群:redis cluster介绍-数据分布算法:一致性hash算法和redis cluster的hash slot算法

4、redis cluster的hash slot算法

redis cluster有固定的16384个hash slot,对每个key计算CRC16值,然后对16384取模,可以获取key对应的hash slot

redis cluster中每个master都会持有部分slot,比如有3个master,那么可能每个master持有5000多个hash slot

hash slot让node的增加和移除很简单,增加一个master,就将其他master的hash slot移动部分过去,减少一个master,就将它的hash slot移动到其他master上去

移动hash slot的成本是非常低的

客户端的api,可以对指定的数据,让他们走同一个hash slot,通过hash tag来实现

所以,redis cluster是通过hash slot去找数据,而不是通过redis去找数据,当有一个主节点挂了,redis cluster也会用最快得速度把该主节点上面得hash slot分配到其他主节点去,这样客户端通过hash slot来找数据得时候,依然能找到数据
 

14-redis cluster集群:redis cluster介绍-数据分布算法:一致性hash算法和redis cluster的hash slot算法