redis集群模式的工作原理

redis cluster原理

redis cluster(多master + 读写分离 + 高可用)
我们只基于redis cluster去搭建redis集群即可,不需要手工去搭建replication复制+主从架构+读写分离+哨兵集群+高可用

redis cluster vs replication + sentinal

replication + sentinal :
如果你的数据量很少,主要是承载高并发高性能的场景,比如你的缓存一般就几个G,单机足够了
replication,一个master,多个slave,要几个slave跟你的要求的读吞吐有关系,然后自己搭建一个sentinal集群,去保证redis主从架构的高可用性,就可以了

redis cluster : 主要是针对海量数据 + 高并发 + 高可用的场景,海量数据,如果你的数据量很大,那么建议就用redis cluster

数据分布的算法

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

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

  • 最老土的hash算法和弊端(大量缓存重建)
  • 一致性hash算法(自动缓存迁移,在一个圆上弄节点)+虚拟节点(自动负载均衡)防止热点数据过于集中
  • redis cluster的hash slot算法

redis cluster有固定16384个hash slot,对每个可以计算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来实现

通信原理

一般有两种第一种是基于Zookeeper的集中式,第二种是gossip,redis使用的是第二种

  • gossip: 更集中式不同,而是互相之间不断的通信,保持整个集群所有节点的数据是完整的,好处时元数据比较分散,缺点是有延迟
  • 集中式: 集元数据(节点信息,故障,等等)集中存储在某一个节点上,好处是集中式存储,缺点是压力全部集中在一个地方

gossip协议,小道留言
所有节点都持有一份元数据,

redis集群的高可用

master node开始投票,给所有的slave进行投票,如果大部分master node (N/2 +1) 都投票给了某个从节点,那么选举通过