0
点赞
收藏
分享

微信扫一扫

Redis 三大集群方案:主从 / 哨兵 / Cluster

Redis 三大集群方案:主从 / 哨兵 / Cluster,选型不再踩坑

Redis 的高可用之路,本质上是一场可用性与扩展性的博弈。主从复制解决了数据冗余,哨兵模式补上了自动故障转移的短板,而 Cluster 集群则彻底打破了单机瓶颈——三者不是替代关系,而是层层递进的进化链。

一、三种架构,一张图看清本质

架构

核心角色

数据分布

高可用机制

扩展方式

主从复制

1 Master + N Slave

全量数据(每个节点存完整数据)

❌ 无,主节点宕机需人工切换

仅读扩展(加从节点)

哨兵模式

1 Master + N Slave + M Sentinel

全量数据

✅ 哨兵自动故障转移(秒级)

仅读扩展,写仍瓶颈

Cluster 集群

N Master + N Slave(3主3从起)

数据分片(16384 哈希槽)

✅ 内置 Gossip + 自动 Failover

读写均可水平扩展

二、逐个拆解:原理、优缺点、适用场景

1. 主从复制(Master-Slave)—— 最简单的"备胎方案"

原理:主节点处理所有写请求,从节点通过全量同步(首次)+ 增量同步(后续)实时复制数据,同时分担读请求。

✅ 优点

  • 架构极简,部署成本最低,新手 10 分钟可上手
  • 数据备份可靠,主节点宕机后从节点有完整副本
  • 读写分离,从节点可分担读压力(适合读多写少场景)

❌ 缺点

  • 主节点故障 = 服务停摆,必须人工执行 SLAVEOF NO ONE 提升从节点,恢复时间分钟级
  • 所有节点存全量数据,3 个从节点 = 3 倍内存浪费
  • 写请求全部压在主节点,QPS 上限约 10 万+,无法突破单机瓶颈
  • 主从同步存在毫秒级延迟,极端场景下数据可能不一致

🎯 适用场景:内部非核心服务、数据量小、可接受人工干预故障恢复

2. 哨兵模式(Sentinel)—— 高可用的"自动挡"

原理:在主从架构上增加 3 个及以上哨兵进程(不存数据),通过心跳检测 + 投票选举,实现主节点故障时的自动故障转移

核心流程:

1哨兵每1秒发PING → 主节点超时未响应 → 标记"主观下线"
2→ 多个哨兵投票确认 → 标记"客观下线"(需 ≥ quorum 个同意)
3→ 选举Leader哨兵 → 选最优从节点提升为新主
4→ 通知所有从节点切换复制目标 → 通知客户端新主地址
5
1哨兵每1秒发PING → 主节点超时未响应 → 标记"主观下线"
2→ 多个哨兵投票确认 → 标记"客观下线"(需 ≥ quorum 个同意)
3→ 选举Leader哨兵 → 选最优从节点提升为新主
4→ 通知所有从节点切换复制目标 → 通知客户端新主地址
5

✅ 优点

  • 秒级自动切换(通常 10-30 秒),无需人工干预,保障 7×24 可用
  • 客户端连接哨兵即可自动获取主节点地址,无需硬编码 IP
  • 继承主从的读写分离能力,运维成本低于 Cluster
  • 一套哨兵可监控多组 Redis,降低部署成本

❌ 缺点

  • 写瓶颈未解决:所有写请求仍集中在单个主节点,QPS 无法突破单机上限
  • 内存浪费依旧:所有节点存全量数据,多从节点 = 多倍内存消耗
  • 故障转移期间有短暂服务不可用窗口(哨兵投票 + 选举需要时间)
  • 哨兵本身需额外维护,参数配置不当可能导致误切换

🎯 适用场景:QPS ≤ 5 万、数据量 ≤ 100GB、读多写少、要求高可用但无需水平扩展的业务(电商商品缓存、用户信息查询等)

生产标准配置:1 主 + 2 从 + 3 哨兵(最小高可用组合)

3. Redis Cluster 集群—— 分布式的"满血方案"

原理:官方原生分布式方案,将 16384 个哈希槽分配给多个主节点,数据自动分片存储。节点间通过 Gossip 协议通信,内置故障检测与自动转移。

数据路由算法:

1HASH_SLOT = CRC16(key) mod 16384
2→ 客户端计算 key 对应的槽位 → 路由到对应主节点
3
1HASH_SLOT = CRC16(key) mod 16384
2→ 客户端计算 key 对应的槽位 → 路由到对应主节点
3

✅ 优点

能力

说明

写性能线性扩展

写请求分散到多个主节点,增加主节点 = 提升写 QPS(实测 6 节点集群吞吐量是单机的 3.8 倍)

海量数据存储

数据分片存储,每个节点仅存部分数据,支持 TB 甚至 PB 级

高可用有保障

每个主节点有从节点备份,故障自动转移,恢复时间 < 1 秒

动态扩容

cluster addslots 在线添加节点,无需停机

智能客户端

客户端缓存槽位映射,支持自动重定向(MOVED/ASK)

❌ 缺点

限制

说明

运维复杂度高

10 节点集群 = 30 个进程,配置错误风险高,监控难度大

跨槽操作受限

MSET/MGET/事务/Lua 脚本要求 key 在同一槽位,否则报 CROSSSLOT 错误

客户端要求高

必须使用支持 Cluster 协议的驱动(JedisCluster 相对成熟)

仅支持 db 0

不支持多数据库,SELECT 命令不可用

大键问题

单个 key 过大(如 10MB)会导致迁移阻塞

🎯 适用场景:QPS ≥ 5 万、数据量 ≥ 100GB、读写均高并发、需水平扩展的大型业务(电商大促、社交平台会话存储、在线支付等)

生产标准配置:3 主 3 从(最小集群规模,确保高可用 + 分片能力)

三、终极对比:一张表定选型

维度

主从复制

哨兵模式

Cluster 集群

主要目标

数据备份 + 读写分离

高可用(HA)

高可用 + 水平扩展(Sharding)

数据分布

全量(每个节点存完整数据)

全量(每个节点存完整数据)

分片(16384 哈希槽)

写扩展

❌ 单机瓶颈

❌ 单机瓶颈

✅ 线性扩展

内存效率

⭐⭐(多从 = 多倍浪费)

⭐⭐(多从 = 多倍浪费)

⭐⭐⭐⭐⭐(按需分配)

高可用

❌ 手动切换

✅ 秒级自动切换

✅ <1秒自动切换

运维复杂度




客户端要求

简单

中等(Sentinel 协议)

高(Cluster 协议 + 重定向)

跨 Key 操作

✅ 无限制

✅ 无限制

⚠️ 需在同一槽位

数据量上限

单机内存(建议 ≤16GB)

单机内存(建议 ≤100GB)

TB/PB 级

四、选型决策树(直接套用)

1你的 QPS 和数据量是多少?
2│
3├─ QPS ≤ 5万 且 数据量 ≤ 100GB
4│   └─ 需要高可用?→ ✅ 哨兵模式(性价比最高)
5│   └─ 不需要高可用?→ ✅ 主从复制(最简单)
6│
7└─ QPS ≥ 5万 或 数据量 ≥ 100GB 或 业务快速增长
8    └─ 需要高可用 + 扩展?→ ✅ Redis Cluster(唯一选择)
9    └─ 只读扩展就够?→ ⚠️ 哨兵模式 + 读写分离(过渡方案)
10
1你的 QPS 和数据量是多少?
2│
3├─ QPS ≤ 5万 且 数据量 ≤ 100GB
4│   └─ 需要高可用?→ ✅ 哨兵模式(性价比最高)
5│   └─ 不需要高可用?→ ✅ 主从复制(最简单)
6│
7└─ QPS ≥ 5万 或 数据量 ≥ 100GB 或 业务快速增长
8    └─ 需要高可用 + 扩展?→ ✅ Redis Cluster(唯一选择)
9    └─ 只读扩展就够?→ ⚠️ 哨兵模式 + 读写分离(过渡方案)
10

五、关键配置参数速查

参数

哨兵模式

Cluster 集群

down-after-milliseconds

30000(30秒判下线)

cluster-node-timeout 15000

quorum

哨兵数的一半+1(3哨兵设为2)


failover-timeout

180000(3分钟超时)


parallel-syncs

1(一次同步一个从节点)


cluster-enabled


yes

appendonly

yes(建议开启)

yes(建议开启)

六、一句话总结

架构

一句话定位

主从复制

有备胎,但翻车了得自己换

哨兵模式

有备胎,翻车了自动换,但车还是那一辆

Cluster 集群

车队出行,一辆翻车不影响整体,还能随时加车

选型的核心判断标准就一句话:数据能装下单机,要高可用 → 哨兵;数据量巨大或 QPS 极高,要扩展 → Cluster。 选对了架构,Redis 才能真正成为业务的"定海神针"。

举报
0 条评论