Skip to content

Redis 宕机怎么办

约 1302 字大约 4 分钟

Redis小红书

2025-03-14

⭐ 题目日期:

小红书 - 2024/11/11

📝 题解:

当 Redis 宕机时,系统的可用性和数据一致性可能受到威胁。为了应对这种情况,需要结合 高可用架构设计持久化机制容灾备份降级策略 等多方面措施。以下是完整的解决方案:


一、预防阶段:构建高可用架构

1. Redis 高可用方案

方案核心原理适用场景
主从复制主节点(Master)处理写操作,从节点(Slave)异步复制数据,提供读扩展能力小规模场景,容灾能力较弱
哨兵模式(Sentinel)哨兵集群监控主从节点,自动选举新主节点并切换流量中等规模,自动化故障恢复
Redis Cluster分布式分片,数据分散在多个节点,支持自动故障转移和扩容大规模、高并发、高可用场景

推荐选择

  • 生产环境优先使用 Redis Cluster 或哨兵模式,避免单点故障。

2. 持久化机制

Redis 宕机后数据恢复依赖持久化策略:

持久化方式原理优点缺点
RDB(快照)定时生成数据快照(dump.rdb)恢复速度快,文件小可能丢失最后一次快照后的数据
AOF(追加日志)记录所有写操作命令(appendonly.aof)数据完整性高文件大,恢复速度慢
混合模式RDB + AOF 同时开启(Redis 4.0+)兼顾恢复速度和数据完整性需要更多存储资源

操作建议

  • 至少开启 RDBAOF 中的一种(推荐 AOFappendfsync everysec 模式)。
  • 定期备份持久化文件到异地存储(如云存储、HDFS)。

3. 容灾与备份

  • 跨机房/区域部署:使用 Redis Cluster 跨可用区(AZ)或跨地域(Region)部署。
  • 冷备与热备
    • 冷备:定期手动备份 RDB/AOF 文件到其他存储系统。
    • 热备:通过主从复制实时同步数据到备用集群。

二、宕机时的应急处理

1. 快速恢复服务

  • 自动故障转移(哨兵或 Cluster 模式):

    • 哨兵检测到主节点宕机后,选举新主节点并通知客户端切换连接。
    • Redis Cluster 自动将故障节点的分片迁移到其他节点。
  • 手动干预(主从模式):

    1. 确认主节点状态(如 redis-cli ping)。

    2. 如果主节点不可恢复,手动提升从节点为主节点:

      redis-cli -h <slave-ip> -p <port> REPLICAOF NO ONE
    3. 修改客户端配置,指向新主节点。


2. 降级策略

如果 Redis 完全不可用,需通过降级保障核心业务:

  • 多级缓存
    • 本地缓存(如 Caffeine、Guava Cache)兜底高频数据。
    • 注意:本地缓存可能导致数据不一致,需设置短过期时间。
  • 直接透传数据库
    • 将 Redis 作为缓存时,可临时绕过缓存直接查询数据库。
    • 需评估数据库负载,必要时限流。
  • 返回默认值
    • 对非核心功能(如用户画像、推荐数据),返回静态默认值。

3. 限流与熔断

  • 限流:通过网关或服务网格(如 Nginx、Istio)限制对依赖 Redis 的接口的请求量。
  • 熔断:使用熔断器(如 Hystrix、Sentinel)快速失败,避免雪崩。

三、数据恢复与补偿

1. 持久化文件恢复

  1. 从备份中获取最新的 RDB/AOF 文件。
  2. 将文件复制到 Redis 数据目录。
  3. 重启 Redis,自动加载持久化文件。

2. 数据补偿

  • 基于日志恢复
    • 如果 Redis 作为数据库使用,可通过 AOF 日志重放恢复数据。
  • 业务层补偿
    • 例如,订单系统可通过数据库的流水日志,补偿 Redis 中丢失的库存扣减记录。

四、根因分析与优化

1. 常见宕机原因

  • 内存不足:未设置最大内存(maxmemory)或淘汰策略(maxmemory-policy)。
  • 网络故障:集群节点间网络中断。
  • 硬件故障:磁盘损坏、CPU 过载等。
  • Bug 或误操作:执行 FLUSHALLDEBUG SEGFAULT 等危险命令。

2. 优化措施

  • 监控告警
    • 监控指标:内存使用率、QPS、连接数、持久化延迟。
    • 工具:Prometheus + Grafana + Redis Exporter。
  • 资源规划
    • 预留 20%~30% 内存缓冲,避免写满导致崩溃。
    • 使用 CONFIG SET maxmemory 动态调整内存限制。
  • 安全加固
    • 禁用危险命令(如 FLUSHALL)。
    • 启用密码认证(requirepass)。

五、容灾演练

定期模拟 Redis 宕机场景,验证以下能力:

  1. 哨兵或 Cluster 的自动故障转移是否正常。
  2. 持久化文件恢复的完整性和速度。
  3. 降级策略对用户体验的影响。

总结

阶段核心措施
预防高可用架构(Cluster/Sentinel)+ 持久化(RDB/AOF)+ 容灾备份
应急自动故障转移 + 多级缓存降级 + 限流熔断
恢复持久化文件恢复 + 业务日志补偿
优化根因分析 + 监控告警 + 资源规划

最终目标: 通过架构设计和流程优化,将 Redis 宕机的影响范围最小化,实现 分钟级自动恢复秒级降级,保障业务连续性。