OpenEuler Redis Sentinel 哨兵模式(一主二从 + 三哨兵)完整配置流程环境
Master(主机):192.168.95.88(Redis 端口 6379)Slave1:192.168.95.133(Redis 端口 6379)Slave2:192.168.95.131(Redis 端口 6379)Sentinel 端口:每台机器统一使用 26379(与 Redis 6379 端口不同,符合"配置不同端口"要求)操作系统:OpenEuler已完成主从复制(如果还未配置,请先执行上一次的主从步骤)不考虑 SELinux 和防火墙
架构说明:三台机器每台部署 1 个 Sentinel 实例(共 3 个哨兵),组成 Sentinel 集群。Sentinel 互相发现、共同监控 Master,quorum=2(至少 2 个哨兵同意才能执行故障转移)。
- 三台机器统一操作:准备 Sentinel 配置文件在 88、133、131 三台机器上全部执行: Bash# 备份(如果存在默认文件) sudo cp /etc/redis/sentinel.conf /etc/redis/sentinel.conf.bak 2>/dev/null || true
创建/覆盖 sentinel.conf(推荐使用此完整配置)
sudo cat > /etc/redis/sentinel.conf << 'EOF'
Sentinel 基本配置(端口与 Redis 不同)
port 26379bind 0.0.0.0protected-mode nodaemonize yes
日志和数据目录
logfile "/var/log/redis/sentinel.log"dir "/var/lib/redis"
监控 Master(关键配置)
mymaster 是自定义的集群名称,192.168.95.88 是当前 Master IP
6379 是 Redis 端口,2 是 quorum(3 个哨兵中至少 2 个同意才 failover)
sentinel monitor mymaster 192.168.95.88 6379 2
其他常用参数(推荐默认值)
sentinel down-after-milliseconds mymaster 10000sentinel failover-timeout mymaster 180000sentinel parallel-syncs mymaster 1sentinel deny-scripts-reconfig yesEOF
授权和目录权限
sudo chown redis:redis /etc/redis/sentinel.confsudo mkdir -p /var/log/redis /var/lib/redissudo chown -R redis:redis /var/log/redis /var/lib/redis
- 三台机器启动 Sentinel在 88、133、131 三台机器上全部执行: Bash# 启动 Sentinel(使用 --sentinel 参数) sudo redis-server /etc/redis/sentinel.conf --sentinel
或者使用 redis-sentinel 命令(效果相同)
sudo redis-sentinel /etc/redis/sentinel.conf
查看进程是否启动
ps -ef | grep sentinel
设置开机自启(推荐方式,创建 systemd 服务)
sudo tee /etc/systemd/system/redis-sentinel.service > /dev/null << 'EOF'[Unit]Description=Redis SentinelAfter=network.target redis.service
Service\]Type=simpleUser=redisGroup=redisExecStart=/usr/bin/redis-server /etc/redis/sentinel.conf --sentinelRestart=alwaysRestartSec=5LimitNOFILE=65535 \[Install\]WantedBy=multi-user.targetEOF sudo systemctl daemon-reloadsudo systemctl enable --now redis-sentinelsudo systemctl status redis-sentinel 1. 详细验证过程(必须一步步操作)步骤①:验证 Sentinel 集群是否正常 在任意一台机器(推荐在 Master 88 上)执行: Bash# 连接任意 Sentinel redis-cli -h 192.168.95.88 -p 26379 ## 查看 Sentinel 信息(关键命令) > INFO sentinel ## 预期输出关键内容: ## sentinel_masters:1 ## sentinel_tilt:0 ## sentinel_running_scripts:0 ## sentinel_scripts_queue_length:0 ## sentinel_simulate_failure_flags:0 ## master0:name=mymaster,status=ok,address=192.168.95.88:6379,slaves=2,sentinels=3 在三台机器上都执行一次 INFO sentinel,确认每台 Sentinel 都看到: sentinels=3(三个哨兵互相发现)slaves=2status=ok 步骤②:查看 Sentinel 对 Master/Slave 的监控状态Bashredis-cli -p 26379 SENTINEL mastersredis-cli -p 26379 SENTINEL slaves mymasterredis-cli -p 26379 SENTINEL sentinels mymaster预期:能看到 Master IP、两个 Slave、三个 Sentinel 信息全部正常。步骤③:故障转移(Failover)实测(最重要验证) 在 Master(88) 上停止 Redis(模拟宕机):Bashsudo systemctl stop redis立即在任意一台 Sentinel 上持续监控(新开终端):Bashredis-cli -p 26379 -h 192.168.95.88 > INFO sentinel # 反复执行,观察 status 变化查看 Sentinel 日志(实时观察切换过程):Bashtail -f /var/log/redis/sentinel.log预期日志关键字(会出现):+sdown master mymaster ...(检测到 Master 下线)+odown master mymaster ...(客观下线)+new-epoch / +vote-for-leader+failover-end master mymaster ...(切换完成)+switch-master mymaster 192.168.95.88 6379 192.168.95.xxx 6379(新 Master 出现) 切换完成后验证(大约 10\~30 秒后):在原来 Slave1(133)或 Slave2(131) 上查看角色(其中一台会变成 Master):Bashredis-cli -h 192.168.95.133 > INFO replication ## 预期其中一台显示:role:master 在新 Master 上写入测试数据:Bashredis-cli -h \<新Master-IP\> > SET failover_test "Sentinel 切换成功"在另一个 Slave 上读取(确认同步):Bashredis-cli -h \<另一个Slave-IP\>GET failover_test 恢复旧 Master(验证自动变为 Slave):Bash# 在 88 上重启 Redissudo systemctl start redis等待 10 秒后检查:Bashredis-cli -h 192.168.95.88 INFO replication ## 预期:role:slave + master_host 指向新的 Master IP 1. 客户端连接 Sentinel(生产推荐方式)客户端不再直接连 Redis IP,而是连 Sentinel 询问当前 Master: Bashredis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster ## 返回当前 Master 的 IP:端口 完成!