内网一台机器 NTP 停了三天,它发出的回调全部返回 401 timestamp expired,同集群其他机器正常。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
chronyc tracking w32tm /query /status
验签方只允许请求时间和本地相差 60 秒,超出直接拒。那台机器慢了 90 秒,签名本身正确,仍然被窗口挡在外面。窗口设得越紧,对时钟同步的依赖越重。这一点先确认清楚,后面就不用反复试。
「时间戳窗口误杀」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
具体做法是,先算请求 timestamp 和服务器时间的差值;在机器上查 chronyc sources 或 w32tm 的同步状态;把窗口放宽到 300 秒并把偏差记进日志;给所有节点加时钟偏移告警。
改完照着核一遍,偏差回到 1 秒以内 那台机器的回调返回 200 日志里不再出现 timestamp expired。
