Redis Sentinel 哨兵集群笔记
一、为什么需要 Sentinel?
主从复制存在的问题:
-
主节点故障后,需要手动将从节点提升为主节点
-
需要修改客户端/应用程序的主节点地址
-
需要手动调整其他从节点的复制关系
Sentinel 解决了上述问题,实现了自动故障转移。
二、什么是 Sentinel?
-
Redis 的高可用解决方案
-
分布式架构,包含若干个 Sentinel 节点和 Redis 数据节点
-
每个 Sentinel 节点对数据节点和其他 Sentinel 节点进行监控
-
半数以上 Sentinel 节点认为主节点不可达时,自动完成故障转移
三、故障转移流程(4步)
-
主节点故障,从节点与主节点失联
-
Sentinel 节点发现主节点故障,协商达成一致 ,选举出领导者
-
领导者执行故障转移:选择一个从节点提升为新主
-
故障转移完成,更新拓扑结构
四、Sentinel 实现原理
4.1 三个定时监控任务
| 频率 | 动作 | 作用 |
|---|---|---|
| 每10秒 | 向主/从节点发送 info |
获取最新拓扑结构,发现新从节点 |
| 每2秒 | 向 __sentinel__:hello 频道发布消息 |
发现其他 Sentinel 节点,交换主节点状态 |
| 每1秒 | 发送 ping 心跳检测 |
确认节点是否可达 |
4.2 主观下线 vs 客观下线
| 概念 | 含义 | 触发条件 |
|---|---|---|
| 主观下线(SDOWN) | 当前 Sentinel 认为节点不可达 | 超过 down-after-milliseconds 无有效回复 |
| 客观下线(ODOWN) | 多数 Sentinel 认为主节点不可达 | 超过半数 Sentinel 同意主观下线 |
只有主节点才会有客观下线,从节点和 Sentinel 节点只有主观下线。
4.3 领导者选举(Raft 算法)
-
每个 Sentinel 节点都有资格成为领导者
-
向其他节点发送请求,要求同意自己为领导者
-
获得票数 ≥
max(quorum, num/2+1)即成为领导者 -
一轮未选出则进入下一轮
4.4 故障转移(选主规则)
领导者从从节点中选出新主,优先级:
-
过滤:不健康、断线、响应慢、与主失联过久的节点
-
选择
slave-priority最高的节点 -
选择复制偏移量最大的节点(数据最新)
-
选择
runid最小的节点
五、Sentinel 配置要点
核心配置参数
conf
port 26379 # Sentinel 端口
sentinel monitor mymaster 192.168.115.111 6379 2 # 监控主节点,quorum=2
sentinel down-after-milliseconds mymaster 30000 # 主观下线判定时间(30秒)
sentinel parallel-syncs mymaster 1 # 故障转移时同时复制的从节点数
sentinel failover-timeout mymaster 180000 # 故障转移超时(180秒)
sentinel auth-pass mymaster 123456 # 主节点密码
配置说明
-
quorum:至少多少个 Sentinel 同意,主节点才算真正失效 -
parallel-syncs:值越小故障转移越慢,但影响越小 -
所有 Sentinel 节点的
monitor配置必须一致 -
主从节点的密码必须相同
六、部署架构示例
| IP | 端口 | 角色 |
|---|---|---|
| 192.168.115.111 | 6379 | master |
| 192.168.115.111 | 6380 | slave1 |
| 192.168.115.111 | 6381 | slave2 |
| 192.168.115.111 | 26379 | Sentinel1 |
| 192.168.115.111 | 26380 | Sentinel2 |
| 192.168.115.111 | 26381 | Sentinel3 |
Sentinel 节点数量建议为奇数(3、5、7...),保证选举机制正常运作。
七、常用命令
bash
# 启动 Sentinel
redis-sentinel /path/to/sentinel.conf
# 查看 Sentinel 状态
redis-cli -h <ip> -p <port> info Sentinel
# 查看主从复制状态
redis-cli -h <ip> -p <port> -a <password> info replication
八、Sentinel 集群特点
-
配置文件启动后自动更新(发现从节点和其他 Sentinel 节点)
-
个别 Sentinel 节点不可用,集群依然健壮
-
主节点故障后,原主恢复后会自动变成新主的从节点
九、注意事项
| 问题 | 解决方案 |
|---|---|
| Sentinel 无法选举出新主 | 检查 protected-mode no 是否配置 |
| 主从密码不一致 | 确保所有节点密码相同 |
| 故障转移超时 | 调整 failover-timeout |
| Sentinel 节点数量为偶数 | 改为奇数,避免选举平局 |