1. 概述

本文将深入探讨 Redis 的两种核心部署策略:Redis SentinelRedis Cluster。通过对比它们的实现原理、适用场景和关键差异,帮你彻底搞懂如何根据业务需求选择合适的部署方案。

读完本文,你将能清晰判断哪种策略更符合你的项目需求,避免踩坑。

2. Redis 基础介绍

Redis 是开源的内存数据结构存储系统,可作为键值数据库、缓存等多种用途,主打高性能数据访问。本文重点分析 Redis 的两种部署策略:

Redis Sentinel

  • 本质:独立运行的监控进程,为标准 Redis 提供高可用能力
  • 核心功能
    • 实时监控 Redis 实例状态
    • 自动故障检测与通知
    • 主节点自动发现
    • 基于多数投票的故障转移
    • 主节点自动选举
  • 关键点:Sentinel 本身是分布式系统,与标准 Redis 部署配合使用

Redis Cluster

  • 本质:原生分布式部署方案
  • 核心能力
    • 自动分片(Sharding)
    • 故障转移
    • 配置管理
  • 突出优势:支持线性扩展至 1000 节点,通过分片突破单机性能瓶颈

简单粗暴地说:Sentinel 是给单机 Redis 加保险,Cluster 是直接上分布式舰队。

3. 核心概念解析

理解这些基础概念是掌握 Redis 部署策略的关键,部分概念同时适用于两种方案:

3.1 数据库(Databases)

  • Redis 支持多逻辑数据库(默认 16 个,可配置)
  • 虽然数据持久化在同一文件,但不同数据库可存在同名键
  • 类比:相当于 MySQL 中的不同 schema
  • 重要特性:Redis 是单线程模型,所有操作串行执行

3.2 哈希槽(Hash Slots)

  • Cluster 专属机制:用于实现自动分片
  • 关键数字:每个 Cluster 固定包含 16384 个哈希槽
  • 工作原理
    • 客户端计算键的哈希值:CRC16(key) % 16384
    • 根据结果定位目标节点
  • 限制
    • 每个节点只支持 database 0
    • 多键操作要求所有键在同一哈希槽,否则报错

3.3 哈希标签(Hash Tags)

  • 作用:强制将一组键映射到同一哈希槽
  • 实现方式:在键中使用 {} 包裹子串
    # 示例:这两个键将落在同一哈希槽
    app1{user:123}.mykey1
    app1{user:123}.mykey2
    
  • 计算规则:Redis 只对 {} 内的子串计算哈希

3.4 异步复制(Asynchronous Replication)

  • 共同特性:Sentinel 和 Cluster 均采用异步复制
  • 关键缺陷
    • 主节点不等待从节点确认写入
    • 存在数据丢失窗口(网络分区时可能丢失已确认写入)
  • 一致性保证:Redis 不提供强一致性保证

3.5 故障转移(Failover)

  • 故障检测机制
    • Cluster:基于心跳和 Gossip 协议
    • Sentinel:独立监控进程 + 节点间通信
  • 触发条件:基于健康检查和超时配置
  • 处理流程:检测故障 → 执行切换 → 广播新配置

3.6 主节点选举(Master Election)

Sentinel 选举流程

  1. 法定人数(Quorum):需多数 Sentinel 确认主节点不可达
  2. 故障转移授权:需绝对多数 Sentinel 批准
  3. 执行者选举:选出一个 Sentinel 负责故障转移
  4. 新主选择:从从节点中选出最优候选者
  5. 配置广播:向所有 Sentinel 同步新配置

Cluster 选举流程

  1. 检测者:从节点发现主节点故障
  2. 投票发起:从节点向主节点请求选票
  3. 投票结果:获得多数主节点支持的从节点胜出
  4. 角色转换:胜出者晋升为新主节点

经验法则:集群节点数务必使用奇数,避免投票平局!

3.7 网络分区(Network Partition)

网络分区是 Redis 面临的最棘手场景,典型问题:脑裂(Split Brain)

脑裂场景示例

初始状态:
   [Client A] → [节点1] ←→ [节点2]
                  ↘       ↙
                   [节点3] ←→ [节点4]
                      ↑
                  [Client B]

网络分区后:
   分区A:Client A + 节点1,2
   分区B:Client B + 节点3,4
  • 分区A:无法达到法定人数(假设 quorum=3)
  • 分区B:满足法定人数,节点3晋升为主节点
  • 风险点:分区恢复时可能产生数据冲突

应对策略

  • 强制奇数节点:确保存在多数派
  • 配置参数:如 min-replicas-to-write 限制写入条件
  • 核心原则:只有多数派分区可执行故障转移

4. Sentinel vs Cluster 对比

特性 Redis + Sentinel Redis Cluster
架构模式 主从+监控代理 原生分布式
分片能力 ❌ 不支持 ✅ 自动分片
扩展性 垂直扩展(单机瓶颈) 水平扩展(线性至1000节点)
多数据库支持 ✅ 支持16个逻辑数据库 ❌ 仅支持database 0
故障转移 ✅ 自动(需3+节点) ✅ 自动(内置)
脑裂风险 中等(依赖配置) 较低(内置保护机制)
运维复杂度 低(部署简单) 高(需管理分片和节点)
适用场景 中小规模/读多写少 大规模/高吞吐/数据量大

选型建议

  • 选 Sentinel 当

    • 数据量适中(<50GB)
    • 读写比高(可通过读副本扩展)
    • 运维资源有限
    • 需要多数据库隔离
  • 选 Cluster 当

    • 数据量巨大(TB级)
    • 写入吞吐量高
    • 需要自动分片能力
    • 能接受运维复杂度

踩坑提示:Cluster 的多键操作限制(需同哈希槽)常让新手懵圈,提前设计好键结构!

5. 总结

通过深度解析 Redis 的两种部署策略,我们明确了:

  1. Sentinel:轻量级高可用方案,适合中小规模场景,通过主从复制+监控代理实现故障转移
  2. Cluster:企业级分布式方案,通过哈希槽分片实现水平扩展,专为大规模数据和高吞吐设计

最终选型应基于:

  • 数据规模
  • 读写负载特征
  • 一致性要求
  • 运维能力

掌握这些核心差异,你就能像老驱动一样精准匹配业务需求与 Redis 部署策略,避开那些年我们一起踩过的坑。


原始标题:Redis Sentinel vs Clustering