这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
高可用架构
解决方案概述
Redis 高可用架构
方案一:Redis Sentinel(哨兵模式)
应用层
应用服务器
哨兵层
Sentinel 1 监控中
Sentinel 2 监控中
Sentinel 3 监控中
Redis 数据层
Master
192.168.1.100:6379 写操作
Slave 1
192.168.1.101:6379 读操作 / 热备
Slave 2
192.168.1.102:6379 读操作 / 热备
自动故障转移流程
1 Sentinel 检测到 Master 宕机
→2 Sentinel 投票选举
→3 选出一个 Slave 晋升为 Master
→4 通知应用层新 Master 地址
方案二:Redis Cluster(集群模式)
总槽位数 16384
分片数 3
每主节点 ≈5461 槽
分片 1
主节点
Slot 0-5460 Node 1:6379
从节点
热备 Node 4:6379
分片 2
主节点
Slot 5461-10922 Node 2:6379
从节点
热备 Node 5:6379
分片 3
主节点
Slot 10923-16383 Node 3:6379
从节点
热备 Node 6:6379
核心思路:
- 部署 Redis 集群
- 配置主从复制
- 启用自动故障转移
选型边界
Sentinel 和 Cluster 分别解决什么
- 触发问题
- Redis 已经成为缓存主路径,单节点宕机会把请求重新打回外部 API,引发雪崩。
- 候选方案
- 主从复制、Redis Sentinel、Redis Cluster、云 Redis 高可用版。
- 选择理由
- Sentinel 解决主节点故障转移,Cluster 解决容量和分片扩展;两者对应的问题不同,不能互相替代。
- 代价
- 客户端需要理解故障切换或槽位迁移,运维上也要监控复制延迟、脑裂和节点恢复。
- 暂不解决
- 暂不讨论跨机房 Redis 多活,因为当前故障域仍在单地域缓存层。
Redis Sentinel(哨兵模式)
设计流程
Redis Sentinel(哨兵模式):服务配置
- 步骤 1:声明主从、集群或故障切换关系
- 步骤 2:配置超时、重试和阈值
- 步骤 3:配置日志、监控和告警输出
关注点:命中率、回源压力、TTL 和异常 key 处理。
架构拓扑:
┌─────────────────┐
│ Sentinel 1 │
└────────┬────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Sentinel 2 │ │ Sentinel 3 │ │ 应用层 │
└───────────────┘ └───────────────┘ └───────────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Master │────────▶│ Slave 1 │ │ Slave 2 │
│ (主节点) │ 复制 │ (从节点) │ │ (从节点) │
└─────────┘ └─────────┘ └─────────┘
│
▼ 故障转移
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Slave 1│────────▶│ Master │ │ Slave 2 │
│ 晋升为主 │ 复制 │ (新主) │ │ │
└─────────┘ └─────────┘ └─────────┘Redis Cluster(集群模式)
设计流程
Redis Cluster(集群模式):服务配置
- 步骤 1:声明主从、集群或故障切换关系
- 步骤 2:配置超时、重试和阈值
- 步骤 3:识别请求 key、缓存命中状态和回源数据对象
- 步骤 4:根据命中率、数据新鲜度和回源压力调整策略
关注点:命中率、回源压力、TTL 和异常 key 处理。
集群拓扑:
应用层
│
├───┬───┬───┐
│ │ │ │
▼ ▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐
│Node 1 │ │Node 2 │ │Node 3 │ 主节点(分片)
│Slot │ │Slot │ │Slot │
│0-5460 │ │5461- │ │10923- │
│ │ │10922 │ │16383 │
└───┬───┘ └───┬───┘ └───┬───┘
│ │ │
▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐
│Slave 1│ │Slave 2│ │Slave 3│ 从节点
└───────┘ └───────┘ └───────┘练习
练习 1
Redis Sentinel 和 Redis Cluster 有什么区别?分别在什么场景下使用?
参考答案 (3 个标签)
缓存雪崩 高可用 Redis
答案:
Redis Sentinel(哨兵模式):
- 适用场景:数据量不大(< 10GB),读多写少
- 核心功能:自动故障转移、主从监控
- 优点:部署简单,维护成本低
- 缺点:不支持数据分片,写操作集中在主节点
Redis Cluster(集群模式):
- 适用场景:数据量大(> 10GB),读写都多
- 核心功能:数据分片 + 自动故障转移
- 优点:支持水平扩展,数据自动分布
- 缺点:部署复杂,运维成本高
选择建议:
数据量 < 10GB → Sentinel
数据量 > 10GB → Cluster
需要水平扩展 → Cluster
简单高可用即可 → Sentinel