集群 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 的配置和管理更复杂,需要处理分片、重分片、槽迁移等操作。
选型建议
选择主从+哨兵的场景
- 数据量可控:单机内存足以承载所有数据
- 需要完整的多键操作:事务、Lua 脚本涉及多个 Key
- 数据量在可预见的未来不会急剧增长
- 团队运维能力有限:哨兵架构相对简单
- 需要多个数据库(db 0-15)隔离业务
选择 Redis Cluster 的场景
- 数据量超过单机内存:需要水平扩展
- 数据量持续增长:未来可能需要扩容
- 高可用要求极高:自动分片和自动故障转移一体化
- 系统需要弹性伸缩:在线扩容和缩容
- 架构标准化:统一的分布式解决方案
总结
简单来说:数据量小、需要多键操作选主从+哨兵;数据量大、需要水平扩展选 Cluster。两者不是替代关系,而是针对不同场景的优化方案。在 Redis 面试中,清楚地阐述这两种架构的适用边界,比单纯罗列功能差异更有说服力。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容