1. Cluster 分片集群

1.1 Cluster 集群的结构和作用

  redis 哨兵模式虽然提供了 redis⾼可⽤、高并发读的解决方案,但是在海量数据应用场景下,仍然存在海量数据存储问题和高并发写的问题。当只有⼀个 Master 对外提供服务时,如果数据量特别⼤,内存占⽤问题严重,数据的高并发写、数据备份和恢复都会⼤⼤降低效率。

  针对这些问题,redis 推出 Cluster 集群架构,该结构具有如下特点:

(1)Redis Cluster 采用的是基于 P2P 的去中心化的网络拓扑架构,没有中心节点,所有节点既是数据存储节点,也是控制节点;

(2)引入槽(slot)的概念,通过 CRC+hashslot 算法支持多个主节点(分片),每个主节点分别负责存储一部分数据,这样理论上可以支持无限主节点的水平扩容以便支持海量吞吐量;

(3)内置类似哨兵的高可用机制,能够实现自动故障转移,保证每个主节点的高可用。

  因此,redis Cluster 集群也叫分片集群,具有分片存储的特性,不需要哨兵也可以完成故障转移的功能,具有⾼可⽤性,性能优于哨兵模式,可实现⾃动扩容(官⽅建议不要超过 1000 个节点)。

 

1.2 Cluster 分片集群的作用

Cluster 分片集群的作用如下:

(1)集群中有多个 master,每个 master 保存不同数据;

(2)每个 master 都可以有多个 slave 节点;

(3)master 之间通过 ping 监测彼此健康状态;

(4)客户端请求可以访问集群任意节点,最终都会被转发到正确节点。

 

1.3 哈希槽(hash slot)

1.3.1 插槽原理

  在 Cluster 集群里设置了 16384 个哈希槽(hash slot),每个 redis 节点负责管理一部分槽的读写操作。Redis 会把每一个 master 节点映射到 0~16383 共 16384 个插槽(hash slot)上。当在 master 节点上写键值对数据时,redis 先对每个键(key),用CRC16 算法对 key 进行运算,然后用 16384 对运算结果取模,余数作为插槽,寻找插槽所在实例即可,就把这个 key 放入相应编号的哈希槽中。

  此外,cluster 集群也支持主从复制模式,每个主节点可以携带一个或多个从节点。