down-after-milliseconds 是什么
down-after-milliseconds 决定一个实例「多久没有有效响应」就被判为主观下线(SDOWN)。哨兵会周期性 PING 被监控的实例,只要在设定的毫秒数内没有收到有效回复,就由当前哨兵单方面标记它已下线;这个标记只是某个哨兵的判断,还需要其他哨兵认同才会升级为客观下线并进入切换流程。因此这个参数同时影响误判率与故障窗口长度。
基本信息
| 默认值 | 30000 毫秒,即 30 秒 |
|---|---|
| 作用范围 | 同时影响主库、从库与其他哨兵的判定 |
| 配置位置 | sentinel down-after-milliseconds <master-name> <毫秒> |
| 判定结果 | 该哨兵视角下的 SDOWN,其他哨兵可能有不同判断 |
| 常见调优 | 链路稳定的内网可调小到 5 至 10 秒,跨地域链路适当放大 |
典型使用场景
- 缩短故障窗口:内网环境将阈值下调,让真正的故障更快被识别并完成切换
- 降低误切换:链路抖动频繁或主库偶发慢操作时适当放大,避免无谓切换
- 主库执行重操作前的准备:已知会有长时间阻塞时,提前评估是否会触发判定
- 跨地域部署:跨机房链路 RTT 高且抖动大,阈值需要按实测基线调整
- 复盘切换事件:对照日志中的判定时间与阈值设置,判断切换是否由真实故障触发
查看与调整
查看与调整
redis-cli -p 26379 SENTINEL MASTER mymaster | grep -A1 down-after
redis-cli -p 26379 SENTINEL GET-MASTER-ADDR-BY-NAME mymaster
# 运行期调整(部分版本支持,需结合配置文件一起改)
redis-cli -p 26379 SENTINEL SET mymaster down-after-milliseconds 10000
redis-cli -p 26379 SENTINEL FLUSHCONFIG # 写回配置文件
tail -f /var/log/redis/sentinel.log # 观察 +sdown 与 -sdown 事件取值取舍
| 取值 | 效果 | 风险 |
|---|---|---|
| 过小(如 1 秒) | 故障识别快 | 网络抖动或慢查询即触发误判与无谓切换 |
| 默认 30 秒 | 兼顾稳定性与恢复速度 | 真实故障的切换窗口偏长 |
| 5 至 10 秒 | 内网常用区间 | 需确认主库不会出现超过该时长的阻塞 |
| 跨地域放大 | 容忍链路抖动 | 故障窗口随之延长 |
该参数会向下传递:哨兵在判定从库和其他哨兵时也使用同一套阈值,因此它不只影响主库的切换速度。链路质量差的环境统一放大,比只针对主库单独设置更容易维护。
主库出现长时间阻塞同样会被判定下线:执行 SAVE、加载大快照、运行大批量命令都可能让处理时间超过阈值,触发一次没有必要的切换。切换本身有代价(重新同步、客户端重连),因此任何可能长时间阻塞主库的操作都应先评估该阈值。