集群 Cluster 与主从+哨兵的区别

集群 Cluster 与主从+哨兵的区别

两种高可用架构概述

Redis 提供了两种主要的分布式方案:主从+哨兵(Sentinel)Redis Cluster。虽然它们都能提供高可用性,但设计目标和适用场景有显著差异。

架构对比

1. 数据分片能力

特性 主从+哨兵 Redis Cluster
数据分片 ❌ 不支持 ✅ 自动分片(16384 个哈希槽)
横向扩展 ❌ 只能垂直扩容 ✅ 可扩展到 1000 个节点
单节点容量 受单机内存限制 可通过增加节点扩展总容量

核心差异:主从+哨兵的所有写操作都集中在主节点,整个系统的总容量受限于单台机器的内存。而 Cluster 通过哈希槽将数据分散到多个主节点上,总容量可以随着节点数线性增长。

2. 高可用实现

特性 主从+哨兵 Redis Cluster
故障检测 哨兵集群负责 集群节点互相探测(Gossip)
故障转移 哨兵选举领导者执行 从节点自动晋升
切换时间 10-30 秒,取决于配置 通常更快,节点间 PING-PONG
依赖组件 额外部署哨兵集群 无需额外组件,节点自带

核心差异:主从+哨兵需要独立部署哨兵进程,而 Cluster 的高可用能力内置在每个节点中。

3. 客户端访问方式

特性 主从+哨兵 Redis Cluster
连接方式 客户端连接哨兵获取主节点地址 客户端直连任意节点,自动重定向
路由逻辑 由客户端或代理处理 客户端实现哈希槽路由
MOVED 重定向 支持(节点间数据迁移时使用)
智能客户端 可选 必需(支持 Cluster 协议的客户端)

4. 功能支持

特性 主从+哨兵 Redis Cluster
多键操作 ✅ 完整支持 ⚠️ 仅在同一槽内支持(Hash Tag 解决)
事务 ✅ 完整支持 ⚠️ 仅同一槽内事务
Lua 脚本 ✅ 完整支持 ⚠️ 仅访问同一槽的 Key
管道 ✅ 完整支持 ✅ 但多槽 Key 需要特殊处理
数据库数量 16 个(0-15) 仅 1 个(db 0)

部署复杂度

主从+哨兵:需要部署 1 主 2 从 + 3 哨兵 = 6 个节点
Cluster:   至少 3 主 3 从 = 6 个节点(功能集成,无需额外进程)

虽然节点数量相近,但 Cluster 的配置和管理更复杂,需要处理分片、重分片、槽迁移等操作。

选型建议

选择主从+哨兵的场景

  1. 数据量可控:单机内存足以承载所有数据
  2. 需要完整的多键操作:事务、Lua 脚本涉及多个 Key
  3. 数据量在可预见的未来不会急剧增长
  4. 团队运维能力有限:哨兵架构相对简单
  5. 需要多个数据库(db 0-15)隔离业务

选择 Redis Cluster 的场景

  1. 数据量超过单机内存:需要水平扩展
  2. 数据量持续增长:未来可能需要扩容
  3. 高可用要求极高:自动分片和自动故障转移一体化
  4. 系统需要弹性伸缩:在线扩容和缩容
  5. 架构标准化:统一的分布式解决方案

总结

简单来说:数据量小、需要多键操作选主从+哨兵;数据量大、需要水平扩展选 Cluster。两者不是替代关系,而是针对不同场景的优化方案。在 Redis 面试中,清楚地阐述这两种架构的适用边界,比单纯罗列功能差异更有说服力。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容