在为 Redis 选择高可用方案时,Sentinel(哨兵)和 Cluster(集群)是最常见的两种选择。虽然它们都能提供自动故障转移功能,但设计初衷和适用场景有着显著区别。

核心对比

特性Redis Sentinel (哨兵模式)Redis Cluster (集群模式)
设计初衷侧重 高可用侧重 可扩展性 (Scalability)
数据分片不支持。每个节点都保存全量数据支持。数据分布在不同的哈希槽中
数据量限制受限于单机物理内存可以横向扩展,理论支持海量数据
读写能力单主节点。写能力受限,读能力可通过从机扩展多主节点。写能力随节点增加而增强
故障发现由 Sentinel 集群外部监控并判定节点之间通过 Gossip 协议互相监控判定
复杂度较低。易于配置和管理较高。涉及分片、重定向、哈希槽迁移等
客户端支持需连接 Sentinel 获取主地址需支持 Cluster 协议(处理 MOVED 重定向)

详细差异分析

1. 数据分布与扩展性

  • Sentinel:属于主从架构的升级版。虽然可以有多个从节点,但每个节点存储的都是完全相同的数据。如果你的数据量超过了单台服务器的内存容量,Sentinel 无法解决这个问题。
  • Cluster:通过分片将数据分散存储。每个主节点只负责 16384 个哈希槽中的一部分。你可以通过增加节点来线性提升集群的总内存容量和并发写能力。

2. 故障转移机制

  • Sentinel:是一个独立的进程集群。它像是一个“裁判”,在外部盯着 Redis 节点。当裁判达成共识认为 Master 挂了,就去扶持一个新的 Master。
  • Cluster:是无中心化的。节点之间通过 Gossip 协议不停地交换心跳。当超过半数的主节点认为某个节点挂了,集群内部会自动发起选举和切换。

3. 运维复杂度

  • Sentinel:部署相对简单,对现有架构的侵入性较小。
  • Cluster:对 Key 的操作受到限制(例如 MGET 等多键操作要求 Key 必须在同一个哈希槽中),且在进行扩缩容(Resharding)时需要处理哈希槽的迁移,运维压力较大。

如何选择?

优先选择 Sentinel 的场景:

  • 你的数据量较小,单台服务器的内存完全能够支撑。
  • 你更在乎架构的简单性和稳定性。
  • 主要需求是主从备份和自动故障恢复。

优先选择 Cluster 的场景:

  • 你的数据量巨大,单机内存无法装下。
  • 你的系统有极高的并发写请求,需要多个主节点共同分担。
  • 你需要系统具备良好的横向扩展能力,能通过加机器解决性能瓶颈。