一、主从复制 (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) |
写扩展性 | 单点写入 | 单点写入 | 多主节点写入 |
读扩展性 | 支持 | 支持 | 支持 |
故障转移 | 手动 | 自动 | 自动 |
客户端复杂度 | 简单 | 中等 | 复杂 |
适用场景 | 读多写少 | 需要高可用 | 大规模数据 |
五、选择建议
主从复制:适合读多写少,对可用性要求不高的场景
哨兵模式:需要高可用且数据量不大的场景
Cluster集群:数据量大、需要水平扩展和高可用的场景
实际生产中,Redis Cluster是当前最推荐的集群方案,特别是对于大规模部署。