Chrony 时间同步与时钟漂移排查实战 - 夜莺博客

Chrony 时间同步与时钟漂移排查实战

很多"查无实据"的灵异故障,复盘到最后根因都是同一个被忽视的维度——时钟。数据库主从复制中断、TLS 证书握手失败、分布式锁提前失效、日志时间轴对不齐,背后常常只是两台机器的时间差了几秒甚至几分钟。本文基于一线运维实战,整理 Chrony/NTP 的选型对比、配置要点、管理命令,以及时钟漂移引发典型故障的排查清单。

NTP 与 Chrony 怎么选

传统 ntpd 设计目标是"长期精密守时",冷启动同步慢(可能几十分钟),对网络抖动敏感;chronyd 是 NTP 协议的现代实现,冷启动可步进校正、断网后靠漂移模型守时、资源占用极低,对虚拟机时钟跳变容忍度高。新部署环境(虚拟化、云、容器)优先选 Chrony;老系统或需要兼容老旧设备时继续用 NTP。

Chrony 配置与常用命令

# /etc/chrony.conf
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
allow 192.168.1.0/24          # 作为服务器时允许客户端同步
local stratum 10              # 上游全挂时内网仍自洽
makestep 1.0 3                # 偏差超1秒时前3次同步直接步进
rtcsync                       # 定期写回硬件时钟

systemctl start chronyd
systemctl enable chronyd

chronyc sources -v            # 查看时间源状态
chronyc sourcestats           # 同步统计
chronyc tracking              # 查看系统时间偏移(Last offset)

典型故障与排查

  • 时间同步不生效:先 systemctl status chronyd,再 netstat -unlp | grep :123 检查端口,然后 chronyc sources -v 确认上游可达。最常见原因是防火墙挡了 UDP 123 或上游服务器不可达。
  • 时间偏移过大:用 makestep 步进校正;偏差极大时先手动同步一次再启动服务。
  • 虚拟机时间跳跃:宿主机负载过高导致,确认 kvm-clock 时钟源,快照/迁移后主动 chronyc makestep 校准。
  • 容器时间不一致:容器不要各自跑 NTP(共享宿主时钟),只需校准宿主机。

闰秒与避坑底线

闰秒硬跳变会让依赖单调时钟的程序算出负间隔甚至崩溃。现代做法是 闰秒 smear——把 1 秒平滑分摊到数小时(如 Google 的 20 小时线性 smear)。内网时间源配 leapsecmode slew + smoothtime。应用层一律用单调时钟(CLOCK_MONOTONIC)做间隔测量。

监控 chronyc tracking 的 Last offset,超过阈值(如 100ms)告警。生产铁律:任何证书错误、复制中断、诡异定时任务的排查清单里,第一步先看时钟。更多 Linux 排障方法见 Linux 性能排障指南Linux 运维高阶命令实战

原文链接:https://www.scrcx.cn/posts/chrony-time-sync