摘要:本文介绍了Redis的哨兵模式。
环境
Windows 10 企业版 LTSC 21H2
Redis 7.4.8
1 概述
哨兵模式(Sentinel)是Redis的一种高可用方案,它由一个或多个哨兵进程组成,用于监控主从节点的健康状态,并在主节点发生故障时自动将从节点升级为主节点,实现自动故障转移。
相对于主从复制,哨兵模式可以自动检测主节点故障并进行故障转移,不需要手动干预。
2 作用
哨兵模式的作用:
- 状态监控:监控主节点和从节点的健康状态。
- 故障转移:当主节点发生故障时,自动将从节点升级为主节点。
- 配置管理:当主节点发生故障时,自动更新其他从节点的主节点配置。
- 通知:当节点状态发生变化时,通知应用程序。
3 原理
监控:
- 定期检查:哨兵定期向主节点和从节点发送
PING命令,检查它们的健康状态。 - 主观下线:当哨兵在一定时间内没有收到主节点的回复时,会将主节点标记为主观下线(Subjectively Down,SDOWN)。
- 客观下线:当标记主观下线的哨兵数量超过仲裁票数时,会将主节点标记为客观下线(Objectively Down,ODOWN)。
- 故障转移:当主节点被标记为客观下线时,哨兵会启动故障转移,选举一个从节点作为新的主节点。
故障转移:
- 选举领导哨兵:多个哨兵通过投票选举领导哨兵,由领导哨兵负责故障转移。
- 选择新主节点:领导哨兵会在所有从节点中选择新的主节点:
- 排除状态异常的从节点。
- 按照从节点的优先级、复制偏移量、运行ID进行排序,选择排名最高的从节点作为新的主节点。
- 执行故障转移:领导哨兵会执行以下操作:
- 使用
REPLICAOF NO ONE命令将被选中的从节点设置为新的主节点。 - 使用
REPLICAOF 主节点IP地址 主节点端口命令将其他从节点的主节点设置为新的主节点。 - 更新内部配置,记录新的主节点信息。
- 使用
- 通知应用:哨兵会通知应用程序主节点的变更。
4 配置
修改安装目录下的sentinel.conf配置文件。
4.1 安全模式
默认配置,禁用安全模式:
1 | protected-mode no |
4.2 端口
默认哨兵模式的端口是26379。
默认配置:
1 | port 26379 |
4.3 目录
设置哨兵模式目录:
1 | dir sentineldir |
4.4 监控
当主节点主观下线时,还需要保证哨兵数量超过仲裁票数的半数,才能开启故障转移。
语法:
1 | sentinel monitor 主节点名称 主节点IP地址 主节点端口 主节点仲裁票数 |
默认配置:
1 | sentinel monitor mymaster 127.0.0.1 6379 2 |
5 启动
启动哨兵进程:
1 | redis-sentinel sentinel.conf |
连接哨兵:
1 | redis-cli -p 26379 |
6 状态监控
6.1 查看哨兵状态
使用命令查看哨兵状态:
1 | INFO sentinel |
显示结果:
# Sentinel:哨兵状态sentinel_masters:1:监控的主节点数量sentinel_tilt:0:哨兵是否处于倾斜状态,0表示未进入倾斜状态sentinel_tilt_since_seconds:-1:哨兵进入倾斜状态的时间,单位是秒,-1表示未进入倾斜状态sentinel_running_scripts:0:正在运行的脚本数量sentinel_scripts_queue_length:0:脚本队列长度sentinel_simulate_failure_flags:0:模拟故障标志master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3:主节点名称、主节点状态、主节点IP地址、主节点端口、从节点数量、哨兵数量
6.2 查看主节点状态
使用命令查看主节点状态:
1 | # 查看所有主节点状态 |
6.3 查看从节点状态
使用命令查看从节点状态:
1 | # 查看所有从节点状态 |
6.4 查看其他哨兵状态
使用命令查看其他哨兵状态:
1 | SENTINEL SENTINELS 主节点名称 |
7 最佳实践
建议部署3个或以上的哨兵,以提高系统的可靠性。
条