Redis

Redis 三种高可用方案完整详解

·12 分钟阅读·4790 字

梳理Redis 三种高可用方案的实施流程、关键配置与运维注意事项

📋 目录

Redis 三种高可用方案完整详解

核心概念 Redis 高可用三种方案:主从复制、Sentinel 哨兵模式、Redis Cluster 集群模式,各有适用场景。

1. 前置区分三种架构适用场景

  1. 主从复制:仅数据备份、读写分离,无自动故障转移,无高可用,单机主挂业务中断;
  2. 哨兵 Sentinel:一主多从 + 哨兵集群,自动故障切换,适合单分片中小业务(数据量几十G内);
  3. Redis Cluster 分片集群:16384个槽位分片,横向扩容存储,每个分片自带主从哨兵,适合大数据量、高并发业务。

2. 方案1:哨兵高可用(Sentinel 主流中小型业务)

3. 架构组成

  • 1个Master + N个Replica从节点(推荐至少1主2从)
  • 至少3个Sentinel哨兵实例(奇数,防止脑裂,独立部署不同机器)
    核心能力:
  1. 持续监控主、从节点存活状态;
  2. 主节点宕机,哨兵集群投票自动选举最优从升级为新Master;
  3. 自动修改剩余从节点复制新主;
  4. 对外提供统一服务地址,客户端自动感知新主IP。

4. 部署规划示例(3台机器)

机器Redis实例Sentinel实例
node1Master 6379Sentinel 26379
node2Replica1 6379Sentinel 26379
node3Replica2 6379Sentinel 26379

5. Redis主从基础配置

5.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

5.2. Replica从库配置(仅增加replicaof)


# 其余配置和主一致,追加

replicaof node1 6379

replica-read-only yes

masterauth Redis@123

启动三台redis,验证主从同步:


redis-cli -a Redis@123 info replication

6. 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

7. 启动与验证


# 启动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

8. 故障切换流程

  1. 某哨兵发现Master无法ping通,标记为主观下线SDOWN;
  2. 同步询问其余哨兵,超过法定票数判定客观下线ODOWN;
  3. 哨兵集群发起投票,选举一个哨兵作为故障切换执行者;
  4. 筛选合格从库:优先级最高、复制偏移量最新、无故障;
  5. 发送指令将选中从提升为Master;
  6. 剩余从节点自动replicaof新主;
  7. 客户端通过哨兵获取最新主节点地址,自动重连。

9. 哨兵生产避坑

  1. 哨兵数量必须奇数3/5台,防止脑裂;
  2. 主节点必须开启AOF/RDB持久化,否则宕机丢失全量数据;
  3. 配置min-replicas-to-write半同步,减少数据丢失;
  4. 客户端必须使用哨兵模式连接,不能硬编码主IP;
  5. 防火墙放行6379、26379端口互通。

10. 方案2:Redis Cluster 分片集群(大数据量高并发标准)

11. 核心原理

  1. 哈希槽分区:总共 16384个slot,均匀分配给多个Master分片;
  2. 每个Master配套1~N个Replica从库,分片内部主从复制;
  3. 集群内置简易哨兵能力,分片主宕机自动切换从;
  4. 横向扩容:新增分片自动迁移槽位,无需停机;
  5. 客户端自动路由key到对应分片,跨槽事务有限制。

12. 标准部署架构(3主3从最小生产架构)

共6个Redis实例,3台服务器交叉部署避免单点故障:

  • node1:master1(6379)、replica3(6382)
  • node2:master2(6380)、replica1(6379)
  • node3:master3(6381)、replica2(6380)

13. 单实例集群核心配置 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

14. 一键创建集群命令(Redis5+ redis-cli —cluster)

  1. 全部6个实例启动完成,互通端口;
  2. 执行创建命令,分配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个从节点。

15. 集群常用运维命令


# 查看集群整体状态

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

16. Cluster 高可用故障切换逻辑

  1. 集群各节点互相PING/PONG心跳;
  2. 分片主失联,集群内其余节点投票;
  3. 该分片下正常从库升级为新Master,承接对应slot;
  4. 旧主恢复后自动变为新主的从节点;
  5. 客户端-c参数自动跳转key所属分片,无需手动处理路由。

17. Cluster 限制(业务开发必须注意)

  1. 多key操作必须落在同一个哈希槽,否则不支持事务/mset;
    解决方案:哈希标签 {tag}key1 {tag}key2 强制同槽;
  2. 不支持多库(db0以外db1/db2失效);
  3. 跨分片复杂聚合、keys * 遍历性能极差;
  4. 扩容迁移槽位会短暂阻塞对应key写入。

18. 哨兵 vs Cluster 选型对比

维度Sentinel 哨兵Redis Cluster 分片集群
数据容量单节点上限,几十G多分片横向扩容,TB级
分片能力无,全量数据存一套主从16384槽位分片,分布式存储
故障转移独立哨兵集群投票集群内置节点投票
事务支持完整多key事务仅同槽多key支持事务
适用场景中小型缓存、单库业务海量数据、百万QPS高并发
扩容方式只能垂直升级机器配置水平新增分片无缝扩容

19. 通用生产高可用最佳实践

20. 持久化规范

  1. 主节点必须同时开启 RDB + AOF;
  2. AOF策略:everysec 折中平衡性能与数据安全;
  3. 禁止关闭持久化,主重启直接清空内存数据。

21. 复制高可用优化

  1. 调大repl-backlog-size 128mb减少频繁全量同步;
  2. 开启半同步 min-replicas-to-write 1,至少1个从同步成功再返回写入;
  3. 调整slave输出缓冲区,避免同步连接断开。

22. 内存与淘汰策略


maxmemory 80gb

maxmemory-policy volatile-lru

限制内存,防止OOM杀死进程;缓存场景用LRU淘汰过期key。

23. 安全加固

  1. 强密码requirepass,主从同步配置masterauth;
  2. bind内网IP,禁止公网直接暴露6379;
  3. 禁用危险命令:flushall、config、keys;
  4. 防火墙仅放行集群、哨兵互通端口。

24. 监控指标(高可用告警必备)

  1. 哨兵:主观/客观下线、故障切换记录;
  2. 主从:复制偏移量差、同步延迟、全量同步事件;
  3. Cluster:槽位缺失、分片离线、集群状态fail;
  4. 内存、持久化AOF阻塞、CPU、客户端连接数。

25. 快速搭建步骤总结

26. 哨兵部署流程

  1. 部署多台Redis,配置一主多从复制;
  2. 3台独立机器部署Sentinel;
  3. 配置哨兵监控主节点、投票阈值;
  4. 启动所有redis与sentinel,验证自动故障切换。

27. Redis Cluster部署流程

  1. 多机器交叉部署主从实例,全部开启cluster-enabled;
  2. 使用redis-cli —cluster create一键组建3主3从集群;
  3. 检查槽位分配、主从复制状态;
  4. 业务客户端使用 -c 集群模式连接。

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro