Redis5 哨兵(Sentinel)集群完整搭建教程

架构:1 主 2 从 + 3 哨兵(生产标准最小架构,避免脑裂)节点规划示例(可自行改 IP、端口)

角色IP端口
主节点 master 192.168.1.100 6379
从节点 slave1 192.168.1.101 6379
从节点 slave2 192.168.1.102 6379
哨兵 sentinel-1 192.168.1.100 26379
哨兵 sentinel-2 192.168.1.101 26379
哨兵 sentinel-3 192.168.1.102 26379

前提:所有机器已经装好 Redis5(源码编译 /usr/local/redis),所有服务器互通、防火墙放行 6379、26379 端口

重要:Redis5 哨兵不支持配置文件动态重写密码,主从密码必须统一!

一、先部署主从复制(所有 redis 实例操作)

1. redis.conf 关键配置(master 节点)

bind 0.0.0.0
protected-mode no
port 6379
daemonize yes
pidfile /usr/local/redis/redis.pid
logfile "/usr/local/redis/logs/redis.log"
dir /usr/local/redis/data
requirepass Redis@123456          # 统一密码
masterauth Redis@123456           # 主从密码一致,故障切换必备
dbfilename dump.rdb
appendonly yes

2. slave 节点额外增加从配置

slaveof 192.168.1.100 6379
slave-read-only yes
# 同样配置 requirepass、masterauth 和master保持一致

3. 启动所有 redis 服务

/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

验证主从:登录 master

redis-cli -a Redis@123456
info replication

能看到两个 slave 信息代表主从正常。

二、部署 Sentinel 哨兵(3 台机器都部署)

1. 创建哨兵配置文件

mkdir -p /usr/local/redis/conf
cp /usr/local/src/redis-5.0.14/sentinel.conf /usr/local/redis/conf/sentinel.conf

2. 修改 sentinel.conf(三台哨兵配置仅 IP 对应,内容几乎一致)

清空原有内容,直接写入下面模板

bind 0.0.0.0
port 26379
daemonize yes
pidfile /usr/local/redis/sentinel.pid
logfile "/usr/local/redis/logs/sentinel.log"

# 格式:sentinel monitor 主节点名称 主IP 主端口 投票法定人数(quorum)
# quorum=2:3个哨兵至少2个判定主节点失联才启动故障转移
sentinel monitor mymaster 192.168.1.100 6379 2

# 主节点密码(必须配置!否则哨兵无法监控、切换失败)
sentinel auth-pass mymaster Redis@123456

# 哨兵多久没收到主节点响应,判定主观下线(毫秒)
sentinel down-after-milliseconds mymaster 5000

# 故障转移时,新主同时并行同步的从节点数量,建议1
sentinel parallel-syncs mymaster 1

# 故障转移超时时间 180000ms=3分钟
sentinel failover-timeout mymaster 180000

# 禁止哨兵使用保护模式
protected-mode no

 注意:不要手动修改配置文件里自动生成的从节点、其他哨兵信息,启动后哨兵自动发现集群节点。

三、启动哨兵(三台分别执行)

/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel.conf

验证哨兵状态

redis-cli -p 26379
# 查看集群监控信息
sentinel master mymaster
sentinel slaves mymaster
sentinel sentinels mymaster

正常可以看到:1 主、2 从、3 个哨兵全部识别。

四、配置 systemd 哨兵服务(可选,开机自启)

新建 /usr/lib/systemd/system/redis-sentinel.service

[Unit]
Description=Redis Sentinel
After=network.target redis.service

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel.conf
ExecStop=/usr/local/redis/bin/redis-cli -p 26379 shutdown
PrivateTmp=true

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable redis-sentinel
systemctl start redis-sentinel

五、防火墙放行端口(所有节点)

firewall-cmd --add-port=6379/tcp --permanent
firewall-cmd --add-port=26379/tcp --permanent
firewall-cmd --reload

六、故障模拟测试

1、停止 master redis

redis-cli -a Redis@123456 shutdown
  • 2、观察哨兵日志 /usr/local/redis/logs/sentinel.log
     
    哨兵会进行投票,将其中一个 slave 提升为新 master;
     
    剩余另一个 slave 自动指向新 master。
  • 3、旧 master 重新启动:自动变成新 master 的从节点。

七、重点避坑(Redis5 高频问题)

  1. 设置了密码但忘记 sentinel auth-pass mymaster xxx
    → 哨兵无法连接 redis,故障转移失效
  2. 从节点缺少 masterauth
    主从切换后,新从节点无法同步新主,一直同步失败
  3. quorum 数值设置错误
    3 哨兵推荐 quorum=2;不要设置成 3,网络抖动容易无法触发切换
  4. 不要单哨兵部署!极易脑裂,生产最少 3 哨兵
  5. Redis5 哨兵没有 acl,只能全局密码,所有实例密码统一
  6. Lettuce 高版本连接 Redis5 哨兵报错:使用 Lettuce5.x,或者切换 Jedis

八、客户端连接哨兵示例(Java 思路)

客户端连接哨兵端口 26379,询问 mymaster 地址,自动获取当前主节点,不要直连固定 redis 地址。
posted @ 2026-08-07 09:00  潇湘客2  阅读(1)  评论(0)    收藏  举报