时间不对会连锁出事:NTP 同步与证书、日志、数据库的关系

Linux · 3 分钟阅读· 192 次阅读

时间是最容易被忽略的基础设施。差 5 分钟,HTTPS 证书可能校验失败,JWT 直接过期,数据库主从延迟判断出错。

虚拟机和容器还多一层问题:宿主机休眠后时间跳变,容器内时钟跟着漂。

先说结论

先看当前偏差,再确认同步服务,最后固定时区。 别用 date -s 手动改,会打乱日志与定时任务。

  • timedatectl 看 NTP 是否 active、时区是否正确
  • chronyc tracking 看偏移量与源
  • 容器内确认 /etc/localtime 与 TZ
  • 硬件时钟用 hwclock 校准
  • 监控加时间偏移告警

先把问题说清楚

证书校验依赖时间:客户端时间偏差超过证书有效期窗口就会报「证书未生效」。

数据库的时间戳由服务器生成,主从时间不一致会让「最后写入胜出」的合并逻辑出错。

具体怎么做

按顺序执行,每步都验证完再进下一步:

  • timedatectl 查看 NTP synchronized 与 Time zone
  • chronyc tracking 看 System time 偏移(正常应小于 0.1 秒)
  • chrony 源不通时换国内可用 NTP,或指向内网时间服务器
  • 容器里设置 TZ 环境变量并挂载 /etc/localtime
  • 把时间偏差纳入监控:超过 1 秒告警

参数与成本对照

把关键数值摊开,方便判断该选哪条路:

偏差 影响 处理
< 1 秒 基本无感 保持 NTP
1-60 秒 日志顺序、锁超时 立即校时
几分钟 证书、JWT 失效 校时 + 排查原因
小时级 定时任务错乱 查时区与硬件时钟

时间不对会连锁出事

几个容易踩的坑

下面这些是最常见的错误做法:

  • 用 date -s 手动设时间:会跳变,影响数据库与日志
  • 只改时区不改 NTP:时间还是漂
  • 容器内跑 ntpd:需要特权且与宿主机冲突
  • 忽略虚拟机快照恢复后的时间跳变

最后补两句

时间是最便宜的基础设施投入:配好 NTP,加一条偏移告警,比事后解释日志顺序容易得多。

工具是手段,理解机制才是能力。命令记不住没关系,知道「该看什么」就够了。

评论 (3)

阿
阿哲

照着做了一遍,确实少走弯路。第二步最容易漏,建议顺手加个检查清单。

南
南风

比「一键脚本」有用多了,知道为什么比知道怎么做重要。

K
Kevin

补充一句:不同版本行为会变,动手前先确认自己的版本号。

发表评论

验证码

提交后需站长审核,通过后才会显示。