????文章将会总体介绍Redis Cluster的集群模式,介绍之前我们先来看一下 Redis-Sentinel 和 master-slave 和 Redis Cluster 的关系。Redis Cluster 可以是Redis集群的一种方式,可以认为是分片集群,而 master-slave 则是主从集群。 ????上面说到redis-cluster 是分片集群,简易图可以将下图。
????使用redis-cluster可以得到以下的收益 :
????没有使用一致性hash来分片数据,而是使用一个叫 “hash slot”的东西,那样不同的键值对将会分配到不同的node中去,首先用key得到 hash_slot ,然后根据hash_slot 得到数据存放的节点,例如 :
hash_slot 的计算公式为 :
HASH_SLOT = CRC16(key) mod 16384
Redis Cluster 节点需要开放两个端口,高位端口号 = 低位端口号 + 10000 ;例如,Node A 的第端口号为 6379 ,高的就为 16379
????可以看到开头的那种图,p1包含2个 slave,它们都拥有和 master 一样的数据,而 master -slave 之间的数据复制使用的是异步复制,于是也就造成了Redis Cluster is not able to guarantee strong consistency (Redis Cluster 并不能保证前一致性)
????假如A1,B1,C1是A,B,C的分片从节点,而Z1是客户端,节点脑裂发生,A,A1,B1,C1,C 在一边,而 B 和 Z1 在另外一边,此时,假如是短时间内恢复了没有影响,长时间,使得 B1 成为了新的 master ,那么Z1 对 B 的写入将丢失。 ????Z1中的 maximum window 是保存 Z1将要发送给 B 的数量,当 B1 成为 master 时,在另外一边的 B 相关的节点停止接受写入,这也是redis cluster 不能保证强一致性的地方,它有可能会导致写丢失。
文章总结了 redis cluster 的几个重要组件,让我们清晰地有个认识,在后面的文章我们会详细地介绍实现的细节。
官网文档
原文:https://www.cnblogs.com/Benjious/p/12877385.html