Redis怎样判断节点是否主观下线_哨兵基于down-after-milliseconds参数的心跳超时判定
down-after-milliseconds 是 Redis Sentinel 用的参数,用于判定节点主观下线;哨兵进程读取该值,Redis Server 完全不使用它。down-after-milliseconds 是谁在用?谁在读它?这个参数不是 Redis Server 自己用的,而是 sentinel 进程在监控主从节点时,用来判断“我是不是该认为这个节点挂了”的核心依据。它只存在于哨兵配置里(sentinel.conf),Redis 实例本身完全无视它。哨兵对每个被监控的主节点或从节点,单独维护一个“最后一次有效响应时间”每次向目标节点发 PING,如果收到 PONG 或 +PONG,就刷新这个时间如果当前时间 ? 最后一次响应时间 > down-after-milliseconds,哨兵就把它标记为“主观下线(SDOWN)”注意:down-after-milliseconds 是毫秒值,但哨兵实际检查频率约每 100ms 一次,所以真实判定延迟可能略高于设定值。为什么改了参数没生效?常见配置陷阱改完 sentinel.conf 后不重启哨兵进程,或者没用 SENTINEL CONFIG SET 动态推送,参数就是白改。修改配置文件后必须执行 redis-sentinel /path/to/sentinel.conf 重启对应哨兵(不能只 kill -HUP)或者用命令动态更新:SENTINEL CONFIG SET mymaster down-after-milliseconds 5000(mymaster 是监控的主节点别名)多个哨兵实例要各自配置,不存在“主哨兵同步参数”这回事;每个哨兵独立读自己的配置容易漏的一点:如果用容器或 systemd 管理哨兵,改完配置文件后忘记 reload service,也会导致配置未加载。设太小 or 设太大,分别会出什么问题?down-after-milliseconds 不是越小越好,也不是越大越稳,得看网络和负载场景:设太小(如 500): Adobe Image Background Remover Adobe推出的图片背景移除工具
