Appearance
Redis 集群与分片:单机撑不住之后,主从、哨兵、Cluster 分别解决什么问题
很多项目最初 Redis 都是:
- 单机
- 一个实例
- 配点持久化就先用了
但数据量和请求量上来后,就会慢慢遇到这些问题:
- 单机内存不够
- 单点故障风险高
- 读写压力变大
这时通常就会接触:
- 主从
- 哨兵
- Cluster
先说结论
可以先这样理解它们的职责:
- 主从:扩展读能力,提供副本
- 哨兵:解决主从下的故障发现和主从切换
- Cluster:解决横向分片和更大规模扩展
也就是说:
- 主从和哨兵更偏高可用
- Cluster 更偏高可用 + 可扩展
真正选型时,最重要的不是“是不是流行用 Cluster”,而是先分清自己面临的瓶颈到底是什么:
- 可用性不够
- 读压力不够
- 写压力不够
- 单机容量不够
- 热点分布不均
一、单机 Redis 的边界在哪里
单机 Redis 的问题很典型:
- 内存上限受限于单机
- 宕机就是单点故障
- 热点过高时压力集中
所以单机 Redis 通常更适合作为:
- 早期项目
- 中小规模场景
二、主从复制解决什么
主从的核心价值是:
- 主节点负责写
- 从节点同步数据
- 读可以部分分摊到从节点
它主要带来的收益:
- 提高读能力
- 为故障恢复和备份提供基础
但它不能解决:
- 单机内存上限
- 主节点写入瓶颈
- 热点 key 集中在一个主节点的问题
因为数据还是全量复制到从节点,不是分片。
三、哨兵为什么重要
只有主从还不够,因为一旦主节点挂了,还需要有人来:
- 发现故障
- 选新主
- 通知客户端更新连接
这就是哨兵的主要价值。
可以先粗略理解成:
- Redis 主从架构里的高可用管理层
但要注意,哨兵并不会自动帮你解决:
- 数据分片
- 单机容量上限
- 热点写流量集中
它只是把“主从可切换”这件事标准化了。
四、Cluster 在解决什么问题
当问题不只是高可用,而是:
- 单机容量撑不住
- 单个主节点吞吐也不够
就要进入:
- 数据分片
Cluster 的核心价值就是:
- 把数据分散到多个节点上
这意味着它不仅解决可用性问题,还解决:
- 横向扩容问题
- 多主承载更大数据量
- 多主分摊写压力
它的核心机制是槽位分片。
Redis Cluster 把 key 映射到 16384 个 hash slot,再把 slot 分配给不同主节点。
五、为什么 Cluster 和主从/哨兵不是一个层级
很多人会把它们并列理解,其实不完全准确。
可以粗略理解为:
- 主从:复制
- 哨兵:主从高可用治理
- Cluster:分片 + 副本 + 高可用
所以 Cluster 更像是一套完整的分布式 Redis 方案。
在 Cluster 里,每个主节点通常也会有自己的从节点。
也就是说,Cluster 内部其实包含了“分片 + 副本”两层。
六、什么时候该考虑分片
通常是当你开始明显遇到这些问题时:
- 单实例内存快到顶
- 热点数据太重
- 单节点写入压力太高
这时只做主从复制通常不够,因为:
- 它不减少主节点写压力
- 也不扩大单实例可承载的数据上限
再往前一步,如果你已经有下面这些现象,基本就要认真评估 Cluster 了:
- 单机内存接近上限,且还会继续涨
- AOF / RDB 体积已经很大
- 某个主节点 CPU 和网络长期高于其他节点
- 业务需要更大的写并发
七、分片不是万能药
很多团队以为一上 Cluster 就万事大吉,实际上分片会带来新的约束。
1. 多 key 操作受限制
如果多个 key 不在同一个 slot,上层需要重新设计数据模型或使用 hash tag。
2. 热点可能仍然存在
如果一个超级热 key 本身就只有一个,那它无论在哪个分片上,热点都不会自动消失。
3. 运维复杂度上升
你要面对:
- 槽位迁移
- 节点扩缩容
- 客户端路由
- 故障切换后的连接刷新
八、一个更实用的判断顺序
如果你在做 Redis 架构升级,可以先按下面顺序判断:
- 只是怕单点故障吗
- 只是想扩读吗
- 写流量和容量是不是已经超过单主边界
- 业务是否能接受分片后的多 key 约束
一般来说:
- 只补高可用:主从 + 哨兵
- 既要高可用又要横向扩容:Cluster
九、热点治理要单独思考
哪怕已经上了 Cluster,也别忽略热点 key 治理。
因为 Cluster 解决的是“整体分布”,不是“单 key 热点”。
如果热点非常集中,仍可能需要:
- 本地缓存
- 热点副本 key
- 单独热点服务
- 业务侧降级与限流
十、几个常见误区
1. 以为主从就等于扩容
它主要扩的是读,不是总容量。
2. 以为哨兵就是集群
哨兵不负责分片。
3. 以为 Cluster 一上就所有问题都解决
分片之后也会引入:
- 运维复杂度
- 多 key 操作限制
- 热点分布不均问题
4. 把高可用和扩容问题混在一起
很多时候你并不需要立刻上 Cluster,只是需要先把单点和切主治理好。
一句话总结
Redis 从单机走向分布式时,最先要分清“我要解决的是高可用,还是容量扩展”。
主从和哨兵更偏高可用,Cluster 才真正把分片和规模扩展带进来。