Redis Cluster 模式
· 阅读需 22 分钟
引言
Redis Cluster 是 Redis 的分布式解决方案,它提供了一种在多个 Redis 节点间分配数据的方案。本文将深入探讨 Redis Cluster 的架构设计和核心机制,并对比其与主从模式、哨兵模式的区别。我们将从运行机制、节点发现机制、故障转移等方面进行详细分析,帮助读者理解 Redis Cluster 的设计思想和应用场景。
1. Redis 不同模 式的对比
graph TB
subgraph 主从模式
M1[主节点] --> S1[从节点1]
M1 --> S2[从节点2]
end
subgraph 哨兵模式
M2[主节点] --> SS1[从节点1]
M2 --> SS2[从节点2]
ST1[哨兵1] -.监控.-> M2
ST2[哨兵2] -.监控.-> M2
ST3[哨兵3] -.监控.-> M2
end
subgraph Cluster模式
C1[节点1] --- C2[节点2]
C2 --- C3[节点3]
C3 --- C4[节点4]
C4 --- C5[节点5]
C5 --- C6[节点6]
C6 --- C1
end
1.1 主从模式
主从模式是最简单的 Redis 架构,类似于一个小型公 司:
- 一位总经理(master)负责所有决策(写操作)
- 几个部门经理(slave)负责执行和传达(读操作)
- 优点是结构简单,易于部署
- 缺点是主节点存在单点故障风险
1.2 哨兵模式
哨兵模式在主从模式基础上增加了一个董事会(sentinel 集群):
- 负责监控主节点的健康状态
- 在主节点宕机时自动进行故障转移
- 提高了系统的可用性
- 仍然是中心化的架构
1.3 Cluster 模式
Cluster 模式像一个大型企业集团:
- 由多个相对独立的子公司组成
- 每个子公司负责自己的业务范围(slot 范围)
- 具有高可用性、可扩展性和去中心化的特点
2. 核心特性
2.1 数据分片
+----------------+ CRC16 +-------------------------+
| Key | -------> | 16384 slots |
+----------------+ | +---+---+---+---+ |
| | 0 | 1 | 2 |...| 16383|
| +---+---+---+---+ |
+-------------------------+
|
v
+-------------------------+
| Node1 Node2 Node3|
| slots: 0-5461 5462-10922|
| 10923-16383 |
+-------------------------+
- 使用 16384 个槽位(slot)进行数据分片
- 每个节点负责一部分槽位
- 通过 CRC16 算法计算 key 属于哪个槽位
- 支持动态扩展和收缩
- 槽位设计的优势:
- 减少元数据存储:16384 个槽只需要 2KB 内存表示所有槽的分配信息
- 平衡性更好:槽是可以精确均分的,避免传统一致性哈希的数据倾斜问题
2.2 节点发现机制
Redis Cluster 的节点发现机制分为两种场景:
-
创建新集群:
- 使用
redis-cli --cluster create 192.168.1.10:6379 192.168.1.11:6379 192.168.1.12:6379
命令 - 为每个节点分配唯一的 Node ID
- 建立节点间的初始连接
- 分配槽位
- 配置主从关系(如果需要)
- 使用
-
加入已存在的集群:
- 使用
cluster meet
命令 - 新节点只需要知道一个集群成员的地址
- 通过 Gossip 协议传播节点信息
- 使用
sequenceDiagram
participant A as 新节点A
participant B as 已知节点B
participant C as 其他节点C
A->>B: CLUSTER MEET
B->>A: PONG
B->>C: PING(包含A的信息)
C->>A: PING
A->>C: PONG