Redis 高可用方案简介
- Redis 除了单机部署外,还可以通过主从复制、哨兵模式和集群模式来实现高可用。
- 主从复制:允许一个 Redis 服务器(主节点)将数据复制到一个或多个 Redis 服务器(从节点)。这种方式可以实现读写分离,适合读多写少的场景。
- 哨兵模式:用于监控主节点和从节点的状态,实现自动故障转移。如果主节点发生故障,哨兵可以自动将一个从节点升级为新的主节点。
- 集群模式:Redis 集群通过分片的方式存储数据,每个节点存储数据的一部分,用户请求可以并行处理。集群模式支持自动分区、故障转移,并且可以在不停机的情况下进行节点增加或删除。
一、主从复制(Replication)
1. 核心机制
- 数据同步:主节点(Master)将所有写操作异步复制到从节点(Slave)。
- 读写分离:主节点处理写请求,从节点处理读请求(需客户端配合)。
- 非阻塞复制:主节点通过后台线程同步数据,不影响正常请求处理。
2. 配置示例
# 在从节点redis.conf中配置:
replicaof 192.168.1.100 6379 # 指定主节点IP和端口
replica-read-only yes # 从节点只读
3. 优缺点
优点 | 缺点 |
---|---|
简单易用,成本低 | 主节点宕机需手动切换 |
支持读写分离,减轻主节点压力 | 数据同步有延迟(异步复制) |
二、哨兵模式(Sentinel)
1. 核心功能
- 监控:持续检查主从节点健康状态。
- 自动故障转移:主节点宕机时,选举新主节点并更新配置。
- 配置中心:客户端通过哨兵获取当前主节点地址。
2. 架构组成
3. 故障转移流程
- 主观下线(SDOWN):单个哨兵认为节点不可达。
- 客观下线(ODOWN):多数哨兵确认主节点故障。
- 选举领导者哨兵:通过Raft算法选出一个哨兵执行故障转移。
- 提升新主节点:选择数据最新的从节点(比较
repl_offset
)。
4. 配置示例
# sentinel.conf
sentinel monitor mymaster 192.168.1.100 6379 2 # 2表示需2个哨兵确认故障
sentinel down-after-milliseconds mymaster 5000 # 5秒无响应视为下线
5. 优缺点
优点 | 缺点 |
---|---|
自动故障转移,高可用 | 写操作仍集中在单主节点 |
支持多哨兵部署,防脑裂 | 扩容需手动调整主从 |
三、集群模式(Cluster)
1. 核心特性
- 数据分片:将数据分散到16384个槽(Slot),每个节点负责部分槽。
- 自动路由:客户端访问错误节点时,返回正确节点地址(MOVED重定向)。
- 高可用:每个分片可配置主从,主节点宕机时从节点自动接管。
2. 架构组成
3. 数据分片原理
- 哈希槽分配:
CRC16(key) % 16384
计算键所属槽,例如:- 节点1负责槽0-5460
- 节点2负责槽5461-10922
- 节点3负责槽10923-16383
4. 集群搭建命令
# 创建3主3从集群
redis-cli --cluster create \
192.168.1.100:7000 192.168.1.101:7001 192.168.1.102:7002 \
192.168.1.103:7003 192.168.1.104:7004 192.168.1.105:7005 \
--cluster-replicas 1
5. 优缺点
优点 | 缺点 |
---|---|
数据分布式存储,水平扩展 | 配置复杂,需规划分片 |
原生支持高可用和自动故障转移 | 部分命令受限(如跨槽事务) |
无中心节点,避免单点故障 | 客户端需支持集群协议 |
四、方案对比与选型
特性 | 主从复制 | 哨兵模式 | 集群模式 |
---|---|---|---|
数据分布 | 全量复制 | 全量复制 | 分片存储 |
故障转移 | 手动 | 自动 | 自动 |
扩展性 | 垂直扩展 | 垂直扩展 | 水平扩展 |
适用场景 | 读多写少 | 中小规模高可用 | 大规模高并发 |
五、生产环境建议
-
中小规模场景:
- 使用 哨兵模式(如3哨兵+1主2从),平衡可用性与复杂度。
- 示例配置:
# redis.conf appendonly yes replica-read-only yes
-
超大规模场景:
- 使用 集群模式(如16主16从),分片存储数据。
- 配合客户端连接池(如JedisCluster)优化性能。
-
监控与运维:
- 哨兵/集群状态检查:
redis-cli info replication # 查看主从状态 redis-cli --cluster check 192.168.1.100:7000 # 检查集群健康
- 故障模拟测试:
redis-cli -p 6379 DEBUG SEGFAULT # 模拟主节点崩溃
- 哨兵/集群状态检查:
总结
- 主从复制是基础,适合低成本读写分离。
- 哨兵模式实现了自动化高可用,适合中小规模。
- 集群模式通过分片和自动化管理,支撑海量数据和高并发。
根据业务规模和数据增长需求,选择合适的高可用架构!