我正在运行几个服务器,它们需要非常严格的时间同步(<50ms),因为它们正在运行 Paxos 算法。这些服务器正在运行 NTP,并在某一时刻成功同步。根据hwclock
启用的 11 分钟机制,因此系统时间应复制到硬件时钟。
但是,我发现重启后系统时间与重启前的时间相比可能会有 300 毫秒的偏差。认为重启后时间应该在重启前时间的 50 毫秒以内,这不合理吗?
答案1
我的第一反应是 300 毫秒似乎太多了,但我确实有数字可以提供,它们表明@Law29 是正确的:
(希望您能读懂图表上的所有数字 - 如果读不懂,请给我留言。)
如您所见,差异相当大。考虑到我的本地网络上有一个 1 级 GPS 源,差异之大以及频率校正需要多长时间才能恢复正常令我感到惊讶。考虑到对等样本在图中聚集得相当紧密,这显然是本地时钟的问题,而不是启动期间不一致的网络延迟。(顺便说一下,硬件是航天飞机 DS437无风扇迷你电脑,配备双核 Celeron 1037U @ 1.8 GHz。
因此,结论可能是:
- 确保 ntpd 成功写入 NTP 漂移文件,
- 确保内核的 11 分钟定时器更新硬件时钟已打开(有关详细信息,请参阅“内核自动同步硬件时钟”
man hwclock
),或者您的关机过程正在更新硬件时钟, - 确保 ntpd 已4-10 个可联系来源(在 iburst 模式下),以及
- 配置启动依赖项,以便 ntpd 有机会在 Paxos 启动之前修复时钟。
答案2
我没有可以提供的数字,但用于在启动时设置时钟的界面似乎只能精确到秒。
您没有说明您的操作系统,但在所有类 Unix 系统上,都可以在启动过程中插入对 NTP 时间的依赖。
NTP 守护进程在启动时启动,但通常它会立即进入后台并继续启动,同时 NTP 守护进程寻找要同步的服务器 - 这样做是为了在机器未连接到网络时不会延迟启动。
在这种情况下,您需要确保 ntp 守护程序以在启动时单步执行以更正偏移的方式启动。例如,这可以是ntpd -gx
或chronyc -q
。您可能还希望在启动工作负载之前插入一个检查,以确保偏移量是可以接受的。