当前位置: 首页 > news >正文

缓存 --- Redis的三种高可用模式

缓存 --- Redis的三种高可用模式

  • 主从复制(Replication)
  • 哨兵模式(Sentinel)
  • 集群模式(Cluster)
  • 总结对比
  • 选择建议

Redis 的高可用架构模式主要有三种:主从复制(Replication)哨兵模式(Sentinel)集群模式(Cluster)。它们分别针对不同场景下的高可用性需求,以下是详细讲解:


主从复制(Replication)

原理

  • 核心思想:通过数据冗余实现读写分离和故障恢复。
    • 主节点(Master):负责写操作,数据变更后异步同步到从节点。
    • 从节点(Slave):负责读操作,通过复制主节点的数据实现数据冗余。
  • 数据同步流程
    1. 从节点启动时向主节点发送 SYNC 命令。
    2. 主节点执行 BGSAVE 生成 RDB 快照,并将期间的写命令缓存到缓冲区。
    3. 主节点将 RDB 文件发送给从节点,从节点加载 RDB 数据。
    4. 主节点将缓冲区中的命令发送给从节点,完成增量同步。

优缺点

  • 优点
    • 读写分离,提升读性能。
    • 数据冗余,提高数据安全性。
  • 缺点
    • 主节点单点故障主节点宕机后需手动切换从节点为主节点。
    • 数据同步延迟:异步复制可能导致从节点数据短暂不一致。

适用场景

  • 读多写少的业务场景(如内容发布平台)。
  • 需要数据冗余但无需自动故障转移的场景。

配置示例

# 主节点配置(redis.conf)
daemonize yes
port 6379# 从节点配置(redis.conf)
daemonize yes
port 6380
replicaof 127.0.0.1 6379  # 指定主节点IP和端口

哨兵模式(Sentinel)

原理

  • 核心思想:通过独立的哨兵进程监控主从节点,实现自动故障转移
    • 哨兵(Sentinel):独立运行的进程,监控主从节点的健康状态。
    • 功能
      1. 监控:定期检测主从节点是否存活。
      2. 通知:通过 API 或消息队列通知管理员节点状态变化。
      3. 自动故障转移:主节点宕机时,选举新的主节点并切换从节点。
      4. 配置提供:客户端通过哨兵获取当前主节点地址。

工作流程

  1. 主观下线(SDOWN):单个哨兵认为主节点不可用。
  2. 客观下线(ODOWN):多个哨兵达成共识确认主节点不可用。
  3. 选举领导者哨兵:通过 Raft 算法选出一个哨兵执行故障转移。
  4. 故障转移:选举一个从节点升级为主节点,其他从节点切换复制新主节点。

优缺点

  • 优点
    • 自动故障转移,解决主从模式单点故障问题。
    • 对客户端透明,客户端通过哨兵获取主节点地址。
  • 缺点
    • 写性能瓶颈:主节点仍为单点,无法水平扩展写能力。
    • 配置复杂:需部署多个哨兵节点避免误判(通常至少 3 个)。

适用场景

  • 需要自动故障转移的中小型应用(如电商秒杀系统)。
  • 对写性能要求不高但需高可用的场景。

配置示例

# 哨兵配置文件(sentinel.conf)
daemonize yes
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2  # 监控主节点,2表示需2个哨兵确认故障
sentinel down-after-milliseconds mymaster 5000  # 5秒无响应判定为主观下线
sentinel failover-timeout mymaster 60000  # 故障转移超时时间60秒

集群模式(Cluster)

原理

  • 核心思想:通过数据分片(Sharding)和节点冗余实现高可用与水平扩展。
    • 数据分片:将数据划分为 16384 个哈希槽(Slot),每个节点负责部分槽。
    • 节点角色
      • 主节点:处理读写请求,负责部分哈希槽。
      • 从节点:复制主节点数据,主节点宕机时自动接替。
    • 高可用机制
      • 每个主节点至少有一个从节点(推荐每个主节点配 1~2 个从节点)。
      • 主节点宕机时,从节点自动升级为主节点。

工作流程

  1. 客户端请求路由:客户端根据 Key 计算哈希槽,直接访问对应节点。
  2. 跨槽操作:若 Key 不在当前节点,返回 MOVED 错误并重定向到正确节点。
  3. 故障转移
    • 主节点宕机时,从节点发起选举成为新主节点。
    • 其他节点更新拓扑信息,客户端自动重定向到新主节点。

优缺点

  • 优点
    • 数据分片,支持水平扩展和高并发。
    • 自动故障转移,无单点故障。
  • 缺点
    • 事务限制:仅支持同一节点上的多 Key 事务。
    • 运维复杂:需管理分片逻辑和集群状态。

适用场景

  • 大规模数据和高并发场景(如社交平台、物联网数据存储)。
  • 需要横向扩展读写能力的业务。

配置示例

# 节点1配置(redis-7000.conf)
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf# 节点2配置(redis-7001.conf)
port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf# 启动集群
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \
--cluster-replicas 1  # 每个主节点配1个从节点

总结对比

模式主从复制哨兵模式集群模式
核心能力数据冗余、读写分离自动故障转移数据分片、自动故障转移
扩展性垂直扩展(读能力)垂直扩展(读能力)水平扩展(读写能力)
单点故障主节点单点故障主节点单点故障(写瓶颈)无单点故障
适用场景小规模读写分离中小规模高可用大规模高并发与高可用
配置复杂度简单中等复杂

选择建议

  1. 主从复制:适合简单读写分离场景,无需自动故障转移。
  2. 哨兵模式:适合中小规模业务,需自动故障转移但无需水平扩展。
  3. 集群模式:适合大规模数据和高并发场景,需同时支持分片和高可用。

通过合理选择架构模式,可以显著提升 Redis 的可用性和性能!

相关文章:

  • 重构之去除多余的if-else
  • Kubernetes相关的名词解释Dashboard界面(6)
  • 年化26.9%的稳健策略|polars重构因子计算引擎(python策略下载)
  • 03【变量观】`let`, `mut` 与 Shadowing:理解 Rust 的变量绑定哲学
  • c++STL——list的使用和模拟实现
  • go环境安装mac
  • 02【初体验】安装、配置与 Hello Cargo:踏出 Rust 开发第一步
  • Three.js + React 实战系列-3D 个人主页 :完成 Navbar 导航栏组件
  • Mac-VScode-C++环境配置
  • Git拉分支技巧:从零开始创建并推送分支
  • 深入理解 CICD 与 Jenkins 流水线:从原理到实践
  • 基于Docker+k8s集群的web应用部署与监控
  • 【esp32 点亮led】-解决不能闪烁问题
  • 深入理解Linux中的线程控制:多线程编程的实战技巧
  • 常用算法解析:从基础排序到图论应用
  • 51单片机的原理图和PCB绘制
  • 常用的几种 Vue 父子组件传值方式
  • 使用 GitHub Actions 和 Nuitka 实现 Python 应用(customtkinter ui库)的自动化跨平台打包
  • 状态管理最佳实践:Bloc架构实践
  • Android Jetpack Compose 状态管理解析:remember vs mutableStateOf,有啥不一样?为啥要一起用?
  • 用了半年的洗衣机竟比马桶还脏,别再这样洗衣服了
  • “棉花糖爸爸”陈生梨:女儿将落户到贵州纳雍
  • 义乌女老板对CNN霸气喊话:美国要货就给,不要就分给其他客户
  • 马上评|机器人马拉松,也是具身智能产业的加速跑
  • 错失两局领先浪费赛点,王楚钦不敌雨果无缘世界杯男单决赛
  • 天文学家、民盟江苏省委会原常务副主委任江平逝世