Redis主从模式和集群模式的区别
Redis 的 主从模式(Master-Slave Replication) 和 集群模式(Cluster Mode) 是两种不同的高可用与扩展架构,它们解决的问题、架构设计和适用场景有显著区别。
以下是详细讲解:
📊 一、核心区别概览
特性 | 主从模式(Master-Slave) | 集群模式(Cluster) |
---|---|---|
主要目的 | 数据备份、读写分离、高可用 | 数据分片 + 高可用 + 水平扩展 |
数据分布 | 所有节点数据完全相同 | 数据自动分片(Sharding) |
是否支持水平扩展 | ❌ 不支持(容量受限于单主) | ✅ 支持(可扩展到 1000+ 节点) |
自动故障转移 | ❌ 需借助哨兵(Sentinel) | ✅ 内置自动故障转移 |
客户端访问方式 | 直连主或从 | 需支持 Cluster 的客户端 |
数据容量上限 | 单机内存限制 | 多节点分摊,容量更大 |
复杂度 | 简单 | 较复杂 |
二、主从模式(Master-Slave Replication)
🔧 架构图:
+-------------+| Client |+------+------+|| 写+------v------+| Master | ←---------+| (主节点) | |+------+------+ || 复制 | 读v |+------v------+ +-----v-------+| Slave | | Slave || (从节点) | | (从节点) |+-------------+ +-------------+
✅ 工作原理:
- 主节点(Master):负责处理写操作。
- 从节点(Slave):通过 异步复制 从主节点同步数据,只能处理读操作(可选)。
- 客户端可将读请求分发到从节点,实现读写分离。
✅ 优点:
- 实现数据冗余备份,提高可用性。
- 支持读写分离,提升读性能。
- 配置简单,易于理解。
❌ 缺点:
- 主节点单点故障:如果主节点宕机,无法自动切换(需搭配 Redis Sentinel 实现高可用)。
- 无法水平扩展:所有数据仍在一台主节点上,容量受限。
- 写操作无法扩展:所有写仍集中在主节点。
⚠️ 注意:主从模式本身不提供自动故障转移,必须配合 Redis Sentinel 使用。
三、集群模式(Redis Cluster)
🔧 架构图:
+---------+| Client |+----+----+|+-----------+-----------+| | |[0-5500] [5501-11000] [11001-16383]| | |+----v----+ +----v----+ +----v----+| Master1 | | Master2 | | Master3 || (M) | | (M) | | (M) || / | | / | | / || Slave1 | | Slave2 | | Slave3 || (S) | | (S) | | (S) |+---------+ +---------+ +---------+
✅ 工作原理:
- 数据被划分为 16384 个哈希槽(hash slots)。
- 每个键通过
CRC16(key) % 16384
计算归属的槽。 - 每个主节点负责一部分槽(如 Master1 负责 0~5500)。
- 每个主节点可配置一个或多个从节点,用于故障转移。
- 客户端直接连接任意节点,节点会通过 MOVED/ASK 重定向 引导客户端到正确节点。
✅ 优点:
- 自动分片:数据分布到多个节点,突破单机内存限制。
- 高可用:任一主节点宕机,其从节点会自动升级为主节点(基于 Gossip 协议和投票机制)。
- 水平扩展:可动态添加/删除节点,重新分片。
- 无中心节点:去中心化,节点间通过 Gossip 协议通信。
❌ 缺点:
- 不支持跨节点的多键操作(如
MGET
多个 key 如果不在同一节点会失败)。 - 配置和运维复杂。
- 客户端必须支持 Redis Cluster 协议(如 Jedis、Lettuce)。
四、关键区别详解
1. 数据分布方式
- 主从:全量复制,所有节点数据一致。
- 集群:分片存储,每个节点只存一部分数据。
2. 高可用实现
- 主从:需额外部署 Redis Sentinel 来监控主节点,实现故障转移。
- 集群:内置故障检测和主从切换,无需 Sentinel。
3. 扩展性
- 主从:读可扩展(加从节点),写不可扩展。
- 集群:读写均可扩展(增加主节点)。
4. 客户端行为
- 主从:客户端需知道主从角色,写主读从。
- 集群:客户端通过重定向自动访问正确节点。
五、如何选择?
场景 | 推荐模式 |
---|---|
数据量小,追求简单 | 主从 + Sentinel |
需要读写分离 | 主从 + Sentinel |
数据量大(>10GB),需水平扩展 | Redis Cluster |
高并发写入 | Redis Cluster |
使用多键操作(如 MGET 所有 key) | 主从(或确保 key 在同一 slot) |
微服务架构,独立缓存实例 | 多个主从实例 或 Cluster |
六、常见组合架构
✅ 高可用主从 + Sentinel
Master ←→ Sentinel↓
Slave ←→ Sentinel
- 适合中小规模应用。
✅ Redis Cluster(生产推荐)
3主3从(最小高可用集群)
- 适合大规模、高并发场景。
✅ 总结
一句话总结 | 说明 |
---|---|
主从模式 | “一主多从,数据复制,读写分离” |
集群模式 | “分片存储,自动故障转移,水平扩展” |
🔑 核心口诀:
- 要高可用 → 用 Sentinel + 主从 或 Cluster
- 要水平扩展 → 必须用 Cluster
- 要简单稳定 → 用 主从 + Sentinel