物理主机时钟同步:chrony 时间源、偏差与失步验收

物理主机时钟同步:chrony 时间源、偏差与失步验收

支付回调被判定过期、登录令牌偶发失效、跨进程日志顺序颠倒,可能来自同一个问题:系统时钟没有稳定同步。修改时区只能改变显示,不能修正时间偏差。排查应从时间源、同步状态和业务容忍度入手,而不是直接执行强制校时命令。

本文以 Debian 12 的 chrony 为例,建立“检查来源—解释偏差—设置门禁—验证恢复”的流程。AmdMetal 物理主机付款后在控制台查看凭据,通过 SSH 接入;多个 IPv4 时使用第一个地址。以下操作不修改网络地址,也不需要公开管理端口。

一、建立基线,区分显示与校正

先记录系统时间、时区、内核版本与当前校时服务。业务日志宜统一采用带时区的时间格式,排查记录同时保留 UTC,避免把显示差异误认为时钟漂移。

date --iso-8601=seconds
date -u --iso-8601=seconds
timedatectl status
uname -r
systemctl is-active chrony systemd-timesyncd

timedatectl 的同步字段可作线索,不能代替时间源检查。还应确认没有其他校时进程或配置管理任务同时调整时钟。宿主中的虚机也要分别检查,不能因为宿主正常就认定来宾系统正常。

未安装 chrony 时,可通过系统软件源安装;但安装可能启动服务并使用发行版预置配置。已有业务运行的机器,应先审查拟生效的配置及包安装行为,不宜直接安装后再观察。

sudo apt-get update
sudo apt-get install chrony
systemctl status chrony --no-pager

运行中的数据库、认证服务和任务调度器可能受墙上时钟跳变影响。没有评估业务行为前,不执行 date -s、chronyc makestep,也不通过反复重启校时服务尝试“修好时间”。

二、检查时间源,不把可达当成可信

安装后检查主配置及其引用文件。时间源地址使用组织批准的来源;不照搬来源不明的公共地址,也不把某个固定源当成本站提供的基础设施。

sudo grep -R -E \
'^[[:space:]]*(server|pool|peer|sourcedir|confdir|include|makestep|local|offline)' \
/etc/chrony
chronyc activity
chronyc sources -v
chronyc sourcestats -v

server、pool 定义来源,包含目录可能引入额外设置。重复来源应按实际服务器去重,多个名字也可能最终指向同一基础设施,不能简单按配置行数判断独立性。

在 sources -v 中,* 表示当前选中的同步源,+ 表示参与组合的源,? 表示当前不可用于选源,可能与不可达、样本不足等情况有关。Reach 是八进制可达历史,377 表示最近八次轮询均收到响应,不代表时间一定准确。

来源异常的排查顺序

先确认名称解析,再检查源地址的路由与出站策略,随后观察样本是否持续更新。NTP 响应可达,只证明通信成立;源时间异常、延迟不对称或样本分歧仍会影响选源。不要为消除 ? 标记而直接放宽整台机器的防火墙。

三、解释偏差,避免单字段误判

chronyc tracking
journalctl -u chrony -b --no-pager -n 100

Reference time 应持续更新;Leap status 为 Not synchronised 时不能通过验收。System time 是 chrony 估计的剩余校正量,接近零不等于相对真实 UTC 的误差已经被独立证明。

Last offset 与 RMS offset 反映样本和统计情况,Root delay、Root dispersion 则提供到参考时钟路径及不确定性的线索。需要把这些字段与来源状态一起读,而不是只截取一个小数作为合格证据。

建议连续记录多组结果,覆盖若干轮询周期。冷启动后的收敛过程、网络恢复后的样本重建,与稳定运行期应分开判断。不能为了缩小一次观测值而不停调整配置,否则难以识别是哪项变更产生效果。

四、建立有上限的同步门禁

对依赖时间的业务,可在启动或发布检查中加入有界等待。以下数值仅是工程示例,实际阈值应由令牌有效期、审计要求和业务测试确定,不是服务承诺。

chronyc waitsync 12 0.05 0 5

该命令最多检查十二次,检查间隔五秒;要求进入同步状态,并使剩余校正量小于 0.05 秒。第三个参数为零,表示不额外限制 skew。成功退出表示这些条件满足,不保证真实 UTC 误差小于五十毫秒。

自动化任务必须读取退出码,不能把失败输出吞掉:

if chronyc waitsync 12 0.05 0 5; then
    printf '%s\n' 'Clock gate passed'
else
    printf '%s\n' 'Clock gate failed' >&2
    exit 1
fi

门禁失败应阻止相关启动步骤并通知运维,不应自动执行跳时修复。network-online.target 只涉及网络准备状态,也不能证明时钟同步完成。

反向验证门禁

在隔离测试环境验证无可用来源时门禁会非零退出,再恢复来源验证成功路径。不要在生产物理主机上修改全局时间制造偏差;这会同时影响所有服务,并污染用于判断事故先后的日志。

五、恢复后验收,保存可解释的证据

若来源被手动标为离线,确认网络恢复后才执行 chronyc online。需要补充样本时,可对已配置来源执行一次 chronyc burst 4/4,随后重新观察选源和 tracking;不要循环调用造成无意义请求。

审查 makestep 时,尤其注意类似 makestep 1.0 3 的配置:它允许在启动后的前几次时钟更新中,对超过阈值的偏差直接跳变。重启服务可能重新进入该阶段,因此“重启一下”不是无风险操作。确需大幅跳时,应先隔离受影响业务并完成恢复预案。

最终检查应包括:

耗时统计与超时控制应优先使用单调时钟,业务时间戳才使用墙上时钟。把应用计时方式与主机同步验收分开,才能避免一次校时把正常耗时变成负数,也让后续故障记录具备可解释性。

常见问题

时区设置正确,是否说明物理主机已经同步时间?

不能。时区只影响时间的显示方式,不证明系统时钟准确。需要结合 chronyc sources -v 的选源结果与 chronyc tracking 的参考时间、Leap status 和误差指标确认。

chronyc waitsync 成功后,能否承诺真实 UTC 误差小于 50 毫秒?

不能。示例中的 0.05 限制的是 chrony 报告的剩余校正量,不是对真实 UTC 误差的独立测量。还应检查时间源可信度、Root delay、Root dispersion 及持续采样结果。

AMD EPYC 7543P 独享物理主机

$458.7/月起

配置 AmdMetal 物理主机 查阅 AmdMetal 租用价格

物理主机配置逐项确认

AMD EPYC 7543P 整机独享,机型与选配在配置页统一核算。