什么是 Redis Cluster?
Redis Cluster 是 Redis 提供的分布式数据库方案,它通过 分片(Sharding) 来提供数据的横向扩展能力,同时通过主从复制和自动故障转移来实现高可用。
与 Sentinel 不同,Redis Cluster 主要是为了解决单机内存限制和高并发写压力而设计的。
核心特性
- 数据分片 (Data Sharding):数据被自动分布在多个节点上。
- 高性能:客户端直接连接节点,没有代理(Proxy)层的性能损耗。
- 高可用 (High Availability):支持主从复制,当某个主节点下线时,其对应的从节点会自动升级为主节点。
- 无中心化:集群中的每个节点都保存着完整的集群状态信息,节点之间通过 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)
- 节点心跳:集群节点之间通过 Gossip 协议交换状态。
- 下线判定:如果集群中半数以上的主节点认为某个主节点下线(PFAIL → FAIL),则触发故障转移。
- 从机竞选:下线主节点的从节点会发起选举,集群中的其他主节点进行投票。
- 角色升级:胜出的从节点执行
SLAVEOF NO ONE成为新的主节点,并接管原有的哈希槽。
Cluster vs Sentinel
关于两种模式的详细对比,请参考:Redis Sentinel vs. Cluster (方案对比)