Redis 三种高可用方案完整详解
核心概念 Redis 高可用三种方案:主从复制、Sentinel 哨兵模式、Redis Cluster 集群模式,各有适用场景。
1. 前置区分三种架构适用场景
- 主从复制:仅数据备份、读写分离,无自动故障转移,无高可用,单机主挂业务中断;
- 哨兵 Sentinel:一主多从 + 哨兵集群,自动故障切换,适合单分片中小业务(数据量几十G内);
- Redis Cluster 分片集群:16384个槽位分片,横向扩容存储,每个分片自带主从哨兵,适合大数据量、高并发业务。
一、方案1:哨兵高可用(Sentinel 主流中小型业务)
2. 架构组成
- 1个Master + N个Replica从节点(推荐至少1主2从)
- 至少3个Sentinel哨兵实例(奇数,防止脑裂,独立部署不同机器)
核心能力:
- 持续监控主、从节点存活状态;
- 主节点宕机,哨兵集群投票自动选举最优从升级为新Master;
- 自动修改剩余从节点复制新主;
- 对外提供统一服务地址,客户端自动感知新主IP。
3. 部署规划示例(3台机器)
| 机器 | Redis实例 | Sentinel实例 |
| node1 | Master 6379 | Sentinel 26379 |
| node2 | Replica1 6379 | Sentinel 26379 |
| node3 | Replica2 6379 | Sentinel 26379 |
4. Redis主从基础配置
4.1. Master redis.conf 关键配置
port 6379
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis/6379.log"
dbfilename dump.rdb
dir /data/redis/6379
# 持久化保障,主必须开启
appendonly yes
appendfilename "appendonly.aof"
# 密码(线上必开)
requirepass Redis@123
# 从库同步密码
masterauth Redis@123
4.2. Replica从库配置(仅增加replicaof)
# 其余配置和主一致,追加
replicaof node1 6379
replica-read-only yes
masterauth Redis@123
启动三台redis,验证主从同步:
redis-cli -a Redis@123 info replication
5. Sentinel哨兵配置 sentinel.conf(三台哨兵完全一致)
port 26379
daemonize yes
logfile "/var/log/redis/sentinel.log"
pidfile /var/run/sentinel_26379.pid
# 格式:sentinel monitor 集群名 主IP 端口 投票法定人数(哨兵半数+1)
sentinel monitor mymaster node1 6379 2
# 主节点密码
sentinel auth-pass mymaster Redis@123
# 哨兵判定节点失联毫秒(30000=30s)
sentinel down-after-milliseconds mymaster 30000
# 故障切换时,同时并行同步新主的从库数量
sentinel parallel-syncs mymaster 1
# 故障切换超时时间
sentinel failover-timeout mymaster 180000
# 禁止哨兵自动重置配置文件保护
sentinel config-epoch mymaster 0
6. 启动与验证
# 启动redis
redis-server /etc/redis/6379.conf
# 启动哨兵
redis-sentinel /etc/redis/sentinel.conf
# 查看集群监控状态
redis-cli -p 26379
127.0.0.1:26379> info sentinel
127.0.0.1:26379> sentinel masters
127.0.0.1:26379> sentinel replicas mymaster
7. 故障切换流程
- 某哨兵发现Master无法ping通,标记为主观下线SDOWN;
- 同步询问其余哨兵,超过法定票数判定客观下线ODOWN;
- 哨兵集群发起投票,选举一个哨兵作为故障切换执行者;
- 筛选合格从库:优先级最高、复制偏移量最新、无故障;
- 发送指令将选中从提升为Master;
- 剩余从节点自动
replicaof新主; - 客户端通过哨兵获取最新主节点地址,自动重连。
8. 哨兵生产避坑
- 哨兵数量必须奇数3/5台,防止脑裂;
- 主节点必须开启AOF/RDB持久化,否则宕机丢失全量数据;
- 配置min-replicas-to-write半同步,减少数据丢失;
- 客户端必须使用哨兵模式连接,不能硬编码主IP;
- 防火墙放行6379、26379端口互通。
二、方案2:Redis Cluster 分片集群(大数据量高并发标准)
9. 核心原理
- 哈希槽分区:总共 16384个slot,均匀分配给多个Master分片;
- 每个Master配套1~N个Replica从库,分片内部主从复制;
- 集群内置简易哨兵能力,分片主宕机自动切换从;
- 横向扩容:新增分片自动迁移槽位,无需停机;
- 客户端自动路由key到对应分片,跨槽事务有限制。
10. 标准部署架构(3主3从最小生产架构)
共6个Redis实例,3台服务器交叉部署避免单点故障:
- node1:master1(6379)、replica3(6382)
- node2:master2(6380)、replica1(6379)
- node3:master3(6381)、replica2(6380)
11. 单实例集群核心配置 redis-cluster.conf
port 6379
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis/cluster_6379.log"
dbfilename dump.rdb
dir /data/redis/cluster/6379
appendonly yes
requirepass Redis@123
masterauth Redis@123
# 集群开关
cluster-enabled yes
# 集群节点信息持久文件
cluster-config-file nodes-6379.conf
# 节点失联超时
cluster-node-timeout 15000
# 从库不参与哈希槽分配,仅备份
replica-read-only yes
12. 一键创建集群命令(Redis5+ redis-cli —cluster)
- 全部6个实例启动完成,互通端口;
- 执行创建命令,分配3主3从:
redis-cli --cluster create \
node1:6379 node2:6380 node3:6381 \
node2:6379 node3:6380 node1:6382 \
--cluster-replicas 1 -a Redis@123
--cluster-replicas 1 代表每个主分配1个从节点。
13. 集群常用运维命令
# 查看集群整体状态
redis-cli -c -a Redis@123 --cluster check node1:6379
# 查看槽位分配
redis-cli -c -a Redis@123 --cluster slots node1:6379
# 新增主分片扩容
redis-cli --cluster add-node new-node:6379 现有主节点:6379 -a xxx
# 手动迁移槽位均衡分片
redis-cli --cluster rebalance node1:6379 -a xxx
# 故障手动切换(分片主宕机)
redis-cli --cluster failover node:port -a xxx
14. Cluster 高可用故障切换逻辑
- 集群各节点互相PING/PONG心跳;
- 分片主失联,集群内其余节点投票;
- 该分片下正常从库升级为新Master,承接对应slot;
- 旧主恢复后自动变为新主的从节点;
- 客户端
-c参数自动跳转key所属分片,无需手动处理路由。
15. Cluster 限制(业务开发必须注意)
- 多key操作必须落在同一个哈希槽,否则不支持事务/mset;
解决方案:哈希标签{tag}key1{tag}key2强制同槽; - 不支持多库(db0以外db1/db2失效);
- 跨分片复杂聚合、keys * 遍历性能极差;
- 扩容迁移槽位会短暂阻塞对应key写入。
三、哨兵 vs Cluster 选型对比
| 维度 | Sentinel 哨兵 | Redis Cluster 分片集群 |
| 数据容量 | 单节点上限,几十G | 多分片横向扩容,TB级 |
| 分片能力 | 无,全量数据存一套主从 | 16384槽位分片,分布式存储 |
| 故障转移 | 独立哨兵集群投票 | 集群内置节点投票 |
| 事务支持 | 完整多key事务 | 仅同槽多key支持事务 |
| 适用场景 | 中小型缓存、单库业务 | 海量数据、百万QPS高并发 |
| 扩容方式 | 只能垂直升级机器配置 | 水平新增分片无缝扩容 |
四、通用生产高可用最佳实践
16. 持久化规范
- 主节点必须同时开启 RDB + AOF;
- AOF策略:everysec 折中平衡性能与数据安全;
- 禁止关闭持久化,主重启直接清空内存数据。
17. 复制高可用优化
- 调大
repl-backlog-size 128mb减少频繁全量同步; - 开启半同步
min-replicas-to-write 1,至少1个从同步成功再返回写入; - 调整slave输出缓冲区,避免同步连接断开。
18. 内存与淘汰策略
maxmemory 80gb
maxmemory-policy volatile-lru
限制内存,防止OOM杀死进程;缓存场景用LRU淘汰过期key。
19. 安全加固
- 强密码requirepass,主从同步配置masterauth;
- bind内网IP,禁止公网直接暴露6379;
- 禁用危险命令:flushall、config、keys;
- 防火墙仅放行集群、哨兵互通端口。
20. 监控指标(高可用告警必备)
- 哨兵:主观/客观下线、故障切换记录;
- 主从:复制偏移量差、同步延迟、全量同步事件;
- Cluster:槽位缺失、分片离线、集群状态fail;
- 内存、持久化AOF阻塞、CPU、客户端连接数。
五、快速搭建步骤总结
21. 哨兵部署流程
- 部署多台Redis,配置一主多从复制;
- 3台独立机器部署Sentinel;
- 配置哨兵监控主节点、投票阈值;
- 启动所有redis与sentinel,验证自动故障切换。
22. Redis Cluster部署流程
- 多机器交叉部署主从实例,全部开启cluster-enabled;
- 使用redis-cli —cluster create一键组建3主3从集群;
- 检查槽位分配、主从复制状态;
- 业务客户端使用
-c集群模式连接。
关联文档