详解Redis的集群模式(主从复制、哨兵与Cluster)

发布于:2025-06-19 ⋅ 阅读:(22) ⋅ 点赞:(0)

一、主从复制 (Master-Slave Replication)

1. 基本概念

主从复制是Redis最简单的集群模式,由一个主节点(Master)和一个或多个从节点(Slave)组成。

2. 工作原理

  • 数据同步:从节点启动时会向主节点发送SYNC命令,主节点执行BGSAVE生成RDB文件并发送给从节点

  • 命令传播:主节点将写命令持续发送给从节点,保持数据同步

  • 全量/增量同步:初次连接为全量同步,断线重连后可能使用增量同步(PSYNC)

3. 优缺点

  • 优点

    • 读写分离,提高读性能

    • 数据冗余,提高数据安全性

    • 故障恢复相对简单

  • 缺点

    • 主节点故障需要手动切换

    • 写操作仍然集中在主节点

    • 全量同步时网络开销大

二、哨兵模式 (Sentinel)

1. 基本概念

哨兵是Redis的高可用解决方案,由一个或多个哨兵节点监控主从集群,实现自动故障转移。

2. 核心功能

  • 监控:持续检查主从节点是否正常运行

  • 通知:当被监控节点出现问题时,向管理员发送警报

  • 自动故障转移:主节点故障时,自动将一个从节点升级为主节点

  • 配置提供者:为客户端提供最新的主节点地址

3. 工作原理

3.1. 监控机制

每个哨兵节点会:

  • 每秒一次向所有主从节点和其他哨兵节点发送PING命令

  • 如果实例在配置的down-after-milliseconds时间内没有有效回复,该实例会被标记为"主观下线"(SDOWN)

  • 当足够数量的哨兵(通常需要quorum数量)都将主节点标记为"主观下线"时,主节点会被标记为"客观下线"(ODOWN)

3.2. 故障转移流程
  • 选举领头哨兵: 当主节点被判定为客观下线时,哨兵节点会通过Raft算法选举出一个领头哨兵(leader)来负责故障转移

  • 选择新主节点: 领头哨兵会根据以下规则从从节点中选择新的主节点:

    • 优先级高的(由slave-priority配置)

    • 复制偏移量大的

    • 运行ID小的

  • 提升新主节点: 将选中的从节点提升为主节点

  • 重新配置从节点: 让其他从节点改为复制新的主节点

  • 通知客户端: 通知客户端主节点已变更

  • 旧主节点处理: 如果旧主节点重新上线,会被配置为新主节点的从节点

4. 优缺点

  • 优点

    • 自动故障转移,提高可用性

    • 监控功能完善

    • 配置管理自动化

  • 缺点

    • 写操作仍然单点

    • 故障转移期间可能出现数据丢失

    • 集群规模较大时管理复杂

三、Cluster集群模式

1. 基本概念

Redis Cluster是Redis的分布式解决方案,通过数据分片(Sharding)实现水平扩展。

2. 核心特性

  • 数据分片:使用哈希槽(16384个slot)分配数据

  • 高可用:每个分片有主从复制

  • 去中心化:节点间通过Gossip协议通信

3. 工作原理

3.1. 哈希槽分配
  • 当集群启动时,所有哈希槽(0-16383)需要被分配到各个节点上。每个节点负责存储分配给它的哈希槽中的键值对。

  • 例如,一个包含6个节点的集群,可以将哈希槽分配如下:

    • 节点1:0-5460

    • 节点2:5461-10922

    • 节点3:10923-16383

    • 节点4、5、6作为从节点,分别复制节点1、2、3的数据。

3.2. 数据访问
  • 客户端在访问集群时,需要通过哈希槽来定位数据所在的节点。客户端会根据键的哈希值计算出对应的哈希槽,然后根据哈希槽的分配情况找到对应的节点。

  • 如果客户端访问的键所在的节点发生故障,客户端会自动重试,直到找到新的主节点。

3.2. 故障转移
  • Gossip协议

    • 节点间通过TCP端口(默认集群端口=客户端端口+10000)通信

    • 每秒随机选择几个节点进行PING/PONG消息交换

    • 包含的集群元数据:

      • 节点列表和角色

      • 槽位分配信息

      • 节点状态(正常/疑似下线/已下线)

  • 故障检测

    • 节点A标记节点B为"疑似下线"(PFAIL)

    • 通过Gossip协议传播状态

    • 当多数主节点确认B下线,标记为"已下线"(FAIL)

    • 触发故障转移

3.2. 数据迁移
  • 在集群运行过程中,如果需要对哈希槽进行重新分配(例如添加或移除节点),Redis集群支持在线迁移

  • 数据迁移过程是逐步进行的,不会阻塞集群的正常运行。迁移完成后,哈希槽的分配会更新,客户端会根据新的分配情况访问数据。

4. 优缺点 

  • 优点

    • 真正的分布式,支持水平扩展

    • 部分节点故障不影响整体服务

    • 自动故障转移

  • 缺点

    • 不支持多数据库(只能使用db0)

    • 批量操作受限(需所有key在同一slot)

    • 事务限制(所有key必须在同一节点)

    • 迁移大key可能影响性能

四、三种模式对比

特性 主从复制 哨兵模式 Cluster集群
数据分布 全量复制 全量复制 分片(16384 slots)
写扩展性 单点写入 单点写入 多主节点写入
读扩展性 支持 支持 支持
故障转移 手动 自动 自动
客户端复杂度 简单 中等 复杂
适用场景 读多写少 需要高可用 大规模数据

五、选择建议

  1. 主从复制:适合读多写少,对可用性要求不高的场景

  2. 哨兵模式:需要高可用且数据量不大的场景

  3. Cluster集群:数据量大、需要水平扩展和高可用的场景

实际生产中,Redis Cluster是当前最推荐的集群方案,特别是对于大规模部署。


网站公告

今日签到

点亮在社区的每一天
去签到