尽管启动前进行了 NTP 同步,但系统时间仍偏差数百毫秒

尽管启动前进行了 NTP 同步,但系统时间仍偏差数百毫秒

我正在运行几个服务器,它们需要非常严格的时间同步(<50ms),因为它们正在运行 Paxos 算法。这些服务器正在运行 NTP,并在某一时刻成功同步。根据hwclock启用的 11 分钟机制,因此系统时间应复制到硬件时钟。

但是,我发现重启后系统时间与重启前的时间相比可能会有 300 毫秒的偏差。认为重启后时间应该在重启前时间的 50 毫秒以内,这不合理吗?

答案1

我的第一反应是 300 毫秒似乎太多了,但我确实有数字可以提供,它们表明@Law29 是正确的:

  1. 我的一台机器在正常一周内的情况如下:
    • 频率:频率
    • 系统对等偏移量:系统偏移量
  2. 相同的系统,更短的时间,但需要重新启动:
    • 频率:频率重启
    • 系统对等偏移量:系统偏移-重新启动
    • 同行散点图peerstatsplot-重启

(希望您能读懂图表上的所有数字 - 如果读不懂,请给我留言。)

如您所见,差异相当大。考虑到我的本地网络上有一个 1 级 GPS 源,差异之大以及频率校正需要多长时间才能恢复正常令我感到惊讶。考虑到对等样本在图中聚集得相当紧密,这显然是本地时钟的问题,而不是启动期间不一致的网络延迟。(顺便说一下,硬件是航天飞机 DS437无风扇迷你电脑,配备双核 Celeron 1037U @ 1.8 GHz。

因此,结论可能是:

  1. 确保 ntpd 成功写入 NTP 漂移文件,
  2. 确保内核的 11 分钟定时器更新硬件时钟已打开(有关详细信息,请参阅“内核自动同步硬件时钟” man hwclock ),或者您的关机过程正在更新硬件时钟,
  3. 确保 ntpd 已4-10 个可联系来源(在 iburst 模式下),以及
  4. 配置启动依赖项,以便 ntpd 有机会在 Paxos 启动之前修复时钟。

答案2

我没有可以提供的数字,但用于在启动时设置时钟的界面似乎只能精确到秒。

您没有说明您的操作系统,但在所有类 Unix 系统上,都可以在启动过程中插入对 NTP 时间的依赖。

NTP 守护进程在启动时启动,但通常它会立即进入后台并继续启动,同时 NTP 守护进程寻找要同步的服务器 - 这样做是为了在机器未连接到网络时不会延迟启动。

在这种情况下,您需要确保 ntp 守护程序以在启动时单步执行以更正偏移的方式启动。例如,这可以是ntpd -gxchronyc -q。您可能还希望在启动工作负载之前插入一个检查,以确保偏移量是可以接受的。

相关内容