Redis Sentinel高可用集群核心是主从复制+哨兵监控+自动故障转移,需三节点部署、统一哨兵配置(quorum=2)、客户端通过sentinel动态获取主节点地址,并确保网络互通与PUB/SUB功能正常。

Linux 下用 Redis Sentinel 搭建高可用缓存集群,核心是“主从复制 + 哨兵监控 + 自动故障转移”。它不依赖复杂分片,适合读多写少、需要强一致性与自动恢复的场景。关键不在装多少服务,而在配置是否闭环、通信是否可靠、切换是否可预期。
一、基础环境与主从结构准备
建议至少三台机器(或单机多端口模拟),例如:
- 主节点:192.168.1.10:6379
- 从节点1:192.168.1.11:6379
- 从节点2:192.168.1.12:6379
每台都安装 Redis(如 Ubuntu 执行 sudo apt install redis-server),并确保:
- 关闭保护模式:protected-mode no
- 监听所有网卡:bind 0.0.0.0(生产环境建议配合防火墙限制源 IP)
- 主节点保持默认;两个从节点的 redis.conf 中添加:
replicaof 192.168.1.10 6379
replica-read-only yes - 重启各节点:sudo systemctl restart redis-server
- 验证主从状态:在任意节点执行 redis-cli info replication,应看到 role:master 和两个 connected_slaves:2
二、哨兵服务配置与启动
每个节点都要部署一个哨兵进程(无需单独安装,redis-server 包含 redis-sentinel)。创建统一配置文件 /etc/redis/sentinel.conf(内容需一致):
port 26379
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile "/var/log/redis/sentinel.log"
dir /tmp
sentinel monitor mymaster 192.168.1.10 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
sentinel deny-scripts-reconfig yes
说明:
- mymaster 是自定义集群名,所有哨兵必须一致
- quorum=2 表示至少 2 个哨兵达成共识才触发故障转移(3 哨兵时防止单点误判)
- down-after-milliseconds 是主观下线阈值,建议设为 3–5 秒
- 启动命令:redis-sentinel /etc/redis/sentinel.conf
三、客户端连接与高可用验证
普通客户端不能直连单个 Redis 实例——它不知道谁是当前主节点。必须通过哨兵发现主节点地址:
- redis-cli -p 26379 sentinel get-master-addr-by-name mymaster 可实时查到当前主节点 IP 和端口
- Python 客户端示例(使用 redis-py):
from redis.sentinel import Sentinel
sentinel = Sentinel([('192.168.1.10', 26379), ('192.168.1.11', 26379)], socket_timeout=0.1)
master = sentinel.master_for('mymaster')
master.set('key', 'value') - Java 推荐 Lettuce 的 RedisSentinelClient,避免 Jedis 的手动重连逻辑
验证故障转移:
- 手动停掉主节点:redis-cli -h 192.168.1.10 -p 6379 shutdown
- 等待约 5–10 秒,观察哨兵日志(/var/log/redis/sentinel.log)中出现 +failover-detected、+switch-master
- 再次执行 sentinel get-master-addr-by-name mymaster,IP 应已变为某台从节点
- 原主节点重启后,会自动成为新主的从节点(无需人工干预)
四、生产级加固要点
上线前务必检查以下细节:
- 持久化策略:主节点建议开启 AOF(appendonly yes + appendfsync everysec),从节点可关闭以提升同步性能
- 内存控制:设置 maxmemory 4gb 和 maxmemory-policy allkeys-lru,防止 OOM
- 网络互通:所有节点间需能 telnet 通 6379(Redis)和 26379(Sentinel)端口;若用云服务器,安全组要放行
- 配置文件权限:确保 sentinel.conf 不可被非 root 用户写入,避免被恶意篡改
- 监控告警:用 redis-cli -p 26379 sentinel master mymaster 定期采集 num-slaves、flags 字段,接入 Prometheus 或 Zabbix
不复杂但容易忽略:哨兵之间靠 __sentinel__:hello 频道通信,如果 Redis 启用了 ACL 或禁用了 PUB/SUB,哨兵将无法同步拓扑信息——务必保留默认发布订阅能力。

















