Linux个人心得27 (redis哨兵模式实战)

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 个哨兵同意才能执行故障转移)。

  1. 三台机器统一操作:准备 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

  1. 三台机器启动 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'UnitDescription=Redis SentinelAfter=network.target redis.service

ServiceType=simpleUser=redisGroup=redisExecStart=/usr/bin/redis-server /etc/redis/sentinel.conf --sentinelRestart=alwaysRestartSec=5LimitNOFILE=65535

InstallWantedBy=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:端口

完成!

相关推荐
艾莉丝努力练剑9 小时前
【Linux网络】网络层IP协议(三):网段划分(下)
linux·运维·服务器·网络·tcp/ip
CodeStats9 小时前
从 CPU 指令执行到权限管控:对比三大操作系统,梳理编程语言演进,解读 HTML/CSS/JS 浏览器解析的共通底层逻辑
java·linux·windows
尔染君子9 小时前
嵌入式Linux驱动开发(基于树莓派rasberrypi 5的LED驱动开发)
linux·运维·驱动开发
2601_961194029 小时前
考研专业课在哪里参加考试|考点|流程|资料已整理
linux·考研·ubuntu·缓存·centos·负载均衡
闪电悠米9 小时前
黑马点评-Redis 消息队列-01_why_redis_mq
java·数据库·spring boot·redis·缓存·junit·消息队列
IT策士9 小时前
Redis 从入门到精通:初识 Redis
数据库·redis·缓存
IT策士10 小时前
Redis 从入门到精通:数据结构Hash 与 List
数据结构·redis·哈希算法
Wireless_wifi610 小时前
Why IPQ5018 Continues to Thrive in the Wi-Fi 7 Era
linux·5g
das2m10 小时前
Arch Linux (WSL2) Docker 环境踩坑记
linux·docker·eureka
snow@li10 小时前
nginx:详解与速查表 / Nginx = 反向代理 + 负载均衡 + 静态服务器 + HTTP 缓存 / 请求分发、静态加速、上线不中断
linux·服务器·nginx