什么是 Redis Cluster?

Redis Cluster 是 Redis 提供的分布式数据库方案,它通过 分片(Sharding) 来提供数据的横向扩展能力,同时通过主从复制和自动故障转移来实现高可用。

与 Sentinel 不同,Redis Cluster 主要是为了解决单机内存限制高并发写压力而设计的。


核心特性

  1. 数据分片 (Data Sharding):数据被自动分布在多个节点上。
  2. 高性能:客户端直接连接节点,没有代理(Proxy)层的性能损耗。
  3. 高可用 (High Availability):支持主从复制,当某个主节点下线时,其对应的从节点会自动升级为主节点。
  4. 无中心化:集群中的每个节点都保存着完整的集群状态信息,节点之间通过 Gossip 协议 进行通信。

工作原理:哈希槽 (Hash Slot)

Redis Cluster 没有使用传统的哈希取模,而是引入了 哈希槽(Hash Slot) 的概念。

1. 槽位分配

  • 集群中固定有 16384 (2^14) 个哈希槽。
  • 每个主节点负责处理一部分槽位。例如,一个 3 节点的集群:
    • 节点 A:负责 0 - 5460 号槽。
    • 节点 B:负责 5461 - 10922 号槽。
    • 节点 C:负责 10923 - 16383 号槽。

2. 数据映射

当客户端要存取一个 Key 时:

  • 先对 Key 使用 CRC16 算法计算出一个结果。
  • 将结果对 16384 取模,得到该 Key 所属的槽位编号。
  • 客户端根据槽位编号找到对应的节点。

故障转移 (Failover)

  1. 节点心跳:集群节点之间通过 Gossip 协议交换状态。
  2. 下线判定:如果集群中半数以上的主节点认为某个主节点下线(PFAIL FAIL),则触发故障转移。
  3. 从机竞选:下线主节点的从节点会发起选举,集群中的其他主节点进行投票。
  4. 角色升级:胜出的从节点执行 SLAVEOF NO ONE 成为新的主节点,并接管原有的哈希槽。

Cluster vs Sentinel

关于两种模式的详细对比,请参考:Redis Sentinel vs. Cluster (方案对比)