时间是最容易被忽略的基础设施。它不出问题时没人记得,一出问题,排查方向会全部跑偏。
一、时间不准会引发什么
- 日志无法关联:同一笔交易在三台设备上时间差 3 分钟,排障时对不上
- 证书校验失败:偏差超过有效期边界,HTTPS 直接报错
- 双因子失效:TOTP 依赖时间窗口,偏差超 30 秒就验证不过
- 数据库主从异常:时间戳倒序,增量同步漏数据
- 域认证失败:Kerberos 允许偏差默认 5 分钟,超了登录不上
这些故障现象各不相同,但根因都指向同一件事,而排查时几乎没人先去看时间。
二、层级设计:内网一台,外面少问
推荐结构:内网自建 1–2 台 NTP 服务器,向上同步到可信源,向下为所有设备提供服务。
- 核心与汇聚设备、服务器、虚拟化主机 → 指向内网 NTP
- 内网 NTP 本身 → 同步 2–4 个外部源(不同运营商的 ntp 服务器或国家授时源)
- 不要所有设备直接对外查询,出口压力和稳定性都不可控
- 关键设备配置两个内网源,避免单台 NTP 故障导致时间漂移
三、各系统配置要点
| 系统 | 配置方式 | 注意 |
|---|---|---|
| Windows 域 | 域控作为权威时间源,成员机跟随域 | 域控本身要指向可靠外部源,否则全网一起漂 |
| Linux | chronyd / ntpd 指向内网源 | chrony 更适合虚拟机和网络抖动环境 |
| VMware / 虚拟化 | 宿主同步外部,虚拟机跟随宿主或内网源 | 别同时开"与宿主同步"和内部 NTP,会打架 |
| 网络设备 | 配置 ntp server,开启认证 | 设备时间错会导致日志与 SNMP 数据错位 |
| 数据库与中间件 | 跟随操作系统,不单独设时区 | 统一用 UTC 存储,展示层再转本地时区 |
四、四个常见坑
- 时区当时间:把时区设对了不等于时间准。服务器统一 UTC,业务展示按用户时区转换,能省掉大量跨时区问题。
- 域控与外部源混用:部分成员机被单独配了外部 NTP,与域时间不一致,导致认证随机失败。
- 虚拟机时间跳变:快照恢复后时间倒退,触发定时任务重复执行。恢复后应立即强制同步一次。
- NTP 服务被防火墙拦:UDP 123 未放通,配置看起来对,实际一直在本地时钟运行。
用一条命令验证
在服务器上执行 chronyc sources -v 或 w32tm /query /status,看是否真的同步上了、偏差多少。配置存在不等于生效。
五、验证与监控
- 把"时钟偏差"做成监控项:超过 1 秒提示,超过 30 秒告警
- 每月抽查一次关键设备的偏差,尤其是长期不重启的设备和网络设备
- 把 NTP 服务器本身纳入监控:服务状态、上游可达性、同步层级
- 变更后回归:新上架的服务器、虚拟化宿主、备份恢复的机器,都要确认时间同步已生效
这件事做完只需要半天,但能省掉未来很多次"莫名其妙的认证失败"。
#NTP#时间同步#基础运维#故障排查