Redis 哨兵(Sentinel)与集群(Cluster)实现原理详解

一、引言

Redis 在实际生产中不仅要保证高性能,还要保证高可用和可扩展。单机 Redis 虽然快,但存在单点故障风险,无法承载大规模数据量和高并发场景。
为了解决这些问题,Redis 提供了两大核心高可用与扩展方案:

  • 哨兵模式(Sentinel):主从复制 + 自动故障转移

  • 集群模式(Cluster):数据分片 + 主从高可用


二、Redis 哨兵(Sentinel)原理

1. 架构概览

哨兵模式是在主从复制(Master-Slave Replication)基础上增加了 故障监控自动故障转移 的机制。典型架构:

  • 一个主节点(Master)

  • 多个从节点(Slave)

  • 多个哨兵节点(Sentinel)监控集群健康状态

2. 核心功能

  1. 监控(Monitoring):周期性 PING 主从节点,判断是否存活

  2. 通知(Notification):发现节点状态变化,通过 Pub/Sub 通知其它 Sentinel 和客户端

  3. 自动故障转移(Automatic Failover):当 Master 挂掉时,选择一个 Slave 提升为 Master

  4. 配置提供者(Configuration Provider):客户端可通过 Sentinel 获取当前主节点信息

3. 故障检测机制

哨兵的故障判断分为两步:

  • 主观下线(SDOWN):单个 Sentinel 认为节点不可用

  • 客观下线(ODOWN):达到 quorum 数量的 Sentinel 都认同某节点不可用

参数 quorum 定义了判定 ODOWN 所需的最少哨兵数。

4. 故障转移流程

  1. 多个 Sentinel 通过 is-master-down-by-addr 命令交换状态

  2. 发起 领导者选举(基于 Raft 思想,取多数同意的 Sentinel 作为 leader)

  3. Leader Sentinel 从可用 Slave 中选择一个(优先级 → 复制偏移量 → ID 最小)

  4. 发送 SLAVEOF NO ONE 将其提升为新 Master

  5. 通知其他从节点执行 SLAVEOF <new-master>

  6. 更新配置文件,广播新的主节点信息

5. Sentinel 的优缺点

  • 优点

    • 配置简单,适合中小规模高可用部署

    • 自动故障转移,减少人工干预

  • 缺点

    • 不支持数据分片

    • 故障转移期间可能丢失部分数据(异步复制延迟)


三、Redis 集群(Cluster)原理

1. 架构概览

Redis Cluster 通过 哈希槽(Hash Slot) 实现数据分片,并为每个分片配备主从节点,既能 水平扩展 又能 保证高可用

  • 默认 16384 个哈希槽

  • 每个主节点负责一部分槽

  • 从节点作为副本提供冗余

2. 数据路由机制

客户端访问数据时:

  1. 计算键的 CRC16 值

  2. 对 16384 取模,确定哈希槽

  3. 发送请求到负责该槽的主节点

如果访问的节点不是目标槽的节点,会返回 MOVEDASK 重定向信息,客户端再去正确节点请求。

3. Gossip 协议

集群节点通过 Gossip 协议交换状态信息:

  • ping/pong 消息 用于检测节点健康

  • fail 消息 用于广播节点下线

  • 保证集群最终一致性而非强一致性

4. 故障转移流程

  • 当多数主节点检测到某主节点 FAIL 时,进入故障转移

  • 从节点发起选举(基于配置纪元 configEpoch 版本号)

  • 获胜的从节点执行 SLAVEOF NO ONE 升级为主节点

  • 重新分配槽位并广播

5. Redis Cluster 的优缺点

  • 优点

    • 自动分片,线性扩展

    • 主从高可用

    • 客户端直连节点,减少代理层延迟

  • 缺点

    • 不支持多键跨槽事务(除非用 hash tags

    • 配置相对复杂

    • 容忍度有限:每个分片主从全部挂掉则数据不可用


四、应用场景

  • Sentinel 适合:单业务数据库高可用(如缓存层、排行榜等)

  • Cluster 适合:数据量大、访问分布均匀的场景(如社交 Feed、用户画像)


五、典型使用这些原理的系统和中间件

  • ZooKeeper:分布式协调,类似 Sentinel 的 Leader 选举机制

  • Etcd:使用 Raft 协议做强一致性,类似 Cluster 的选主

  • Kafka:分区副本 + Leader 选举,类似 Cluster 的分片模式


六、总结

  • Sentinel 偏向于 高可用,Cluster 兼顾 高可用+水平扩展

  • 二者可结合使用,例如在每个分片内部署 Sentinel 做内部高可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值