高可用架构

解决方案概述

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. 步骤 1:声明主从、集群或故障切换关系
  2. 步骤 2:配置超时、重试和阈值
  3. 步骤 3:配置日志、监控和告警输出
关注点:命中率、回源压力、TTL 和异常 key 处理。

架构拓扑

                    ┌─────────────────┐
                    │   Sentinel 1    │
                    └────────┬────────┘

        ┌────────────────────┼────────────────────┐
        │                    │                    │
        ▼                    ▼                    ▼
┌───────────────┐   ┌───────────────┐   ┌───────────────┐
│   Sentinel 2  │   │   Sentinel 3  │   │    应用层     │
└───────────────┘   └───────────────┘   └───────────────┘

        ┌────────────────────┼────────────────────┐
        │                    │                    │
        ▼                    ▼                    ▼
   ┌─────────┐         ┌─────────┐         ┌─────────┐
   │  Master │────────▶│ Slave 1 │         │ Slave 2 │
   │ (主节点) │  复制   │ (从节点) │         │ (从节点) │
   └─────────┘         └─────────┘         └─────────┘

       ▼  故障转移
   ┌─────────┐         ┌─────────┐         ┌─────────┐
   │  Slave 1│────────▶│  Master │         │ Slave 2 │
   │ 晋升为主 │  复制   │ (新主)  │         │         │
   └─────────┘         └─────────┘         └─────────┘

Redis Cluster(集群模式)

设计流程
Redis Cluster(集群模式):服务配置
  1. 步骤 1:声明主从、集群或故障切换关系
  2. 步骤 2:配置超时、重试和阈值
  3. 步骤 3:识别请求 key、缓存命中状态和回源数据对象
  4. 步骤 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

当前架构