Appearance
Cluster集群
概述
Redis Cluster是Redis的分布式解决方案,数据自动分片(16384个槽),支持高可用。
数据分片
槽分配
c
slot = CRC16(key) % 16384槽位映射
| 节点数 | 每节点槽数 |
|---|---|
| 3 | 5460 |
| 6 | 2730 |
| 9 | 1819 |
MOVED重定向
GET key
- MOVED 12345 192.168.1.1:6379 # 槽12345在192.168.1.1客户端缓存槽位映射,减少重定向。
故障转移
故障检测
- 节点定期ping/pong
- 超过半数master认为某节点不可达
- 标记节点fail
从节点选举
- 主节点fail后
- 从节点向其他master发送选举
- 获得多数票的从节点成为新主
面试考点
Q: Cluster vs Sentinel?
| 特性 | Sentinel | Cluster |
|---|---|---|
| 数据分片 | 否 | 是 |
| 故障转移 | 手动/自动 | 自动 |
| 节点数 | 奇数 | 至少3主 |
| 客户端 | 需要 sentinel | 需要 cluster |
Q: 为什么是16384个槽?
- 槽位信息小(2KB),便于Gossip传播
- 足够分散,支持足够多节点
- 没必要太多,增加心跳开销
