不知何故,但并不完全建立在旧问题“ntpd vs. systemd-timesyncd - 如何实现可靠的 NTP 同步?”之上。,我想问一下 chrony 和 systemd-timesyncd 在 NTP客户端方面的区别。
我知道 systemd-timesyncd 或多或少是一个最小的 ntp 客户端实现,而 chrony 是一个完整的 NTP 守护进程解决方案,恰好包含一个 NTP 客户端。
ubuntu Bionic Beaver 发行说明声明如下:
对于简单的时间同步需求,基本系统已经带有 systemd-timesyncd。Chrony 只需要充当时间服务器,或者如果您想要宣传的更准确和有效的同步。
我喜欢使用最小的预装工具来完成这项工作的想法,我很确定 systemd-timesyncd 会为我的用例完成这项工作,但我仍然很好奇:
- 就准确性而言,两者之间在现实世界中的差异是什么?
- 效率有什么区别?
- 什么是“非简单”时间同步需求,也就是 chrony 作为 NTP 客户端的用例?
systemd NEWS 文件中 systemd-timesyncd的公告很好地解释了该工具与 Chrony 和类似工具相比的差异。(强调我的):
此设置是服务器队列中大多数主机的常见用例。它们通常会从本地 NTP 服务器同步,而本地 NTP 服务器本身会从多个源同步,可能包括硬件。systemd-timesyncd 尝试为该常见用例提供易于使用的解决方案。
试图解决您的具体问题:
我相信您可以通过从多个来源获取同步数据来获得更高的准确性,这尤其是 systemd-timesyncd 不支持的用例。但是,当您使用它从连接到可靠内部网络的中央 NTP 服务器获取同步数据时,使用多个源并不是那么相关,并且您可以从单个源获得良好的准确性。
如果您从本地网络和同一数据中心中的受信任服务器同步您的服务器,则 NTP 和 SNTP 之间的准确性差异几乎不存在。NTP 可以将 RTT 考虑在内并进行时间涂抹,但是当您的 RTT 非常小时(例如快速本地网络和附近机器的情况)时,这并不是那么有益。如果您可以信任您正在使用的来源,您也不需要多个来源。
从单一来源获得同步比从多个来源获得同步要简单得多,因为您不必决定哪些来源比其他来源更好,也不必组合来自多个来源的信息。算法要简单得多,并且对于简单的情况需要更少的 CPU 负载。
这在上面的引用中得到了解决,但无论如何,这些都是 systemd-timesyncd 未涵盖的 Chrony 用例:
这些用例需要 Chrony 或 ntpd 或类似的。
正如其他答案正确指出的那样,
chrony
实现 NTP 和systemd-timesyncd
SNTP。从时间服务客户端的角度来看:
SNTP 是一个实现起来要简单得多的协议;
NTP 允许按时逐步增加/更正。NTP 的一个主要优点是它还考虑了答案的 RTT 以获得更准确的时间。
来自https://www.meinbergglobal.com/english/faq/faq_37.htm
来自https://www.masterclock.com/company/masterclock-inc-blog/ntp-vs-sntp
另一个要点我可以看到 SNTP 实现比 NTP 在虚拟化中带来更多问题,当您同时拥有管理程序和 NTP 守护程序试图更改 VM 时间时。尤其是他们不同意时间与一些错误配置导致他们都处于活动状态,这可能会导致大问题。(虽然称职的系统管理员只会保持激活一种与时间同步的方法,但可能会由于配置错误而使它们都处于活动状态)。
PS
systemd-timesyncd
不应该是不使用时的建议替代品systemd
。chrony
不是分叉形式ntpd
,但它是从头开始实现的。它实现了完整的 NTPv4 协议 ( RFC5905 )的客户端和服务器模式。在企业级用户中,我们看到了从传统转向像 Red Hat(RHEL 7 及更高版本)和 SuSE(从 SLES 15 开始)的趋势。ntpd
chrony
systemd-timesyncd
仅实现 SNTP 协议 ( RFC4330 )客户端模式。因此,复杂的用例不包含在systemd-timesyncd
. 例如,SNTP 无法通过像 NTP 默认那样从多个来源检索时间来使其更准确。因此systemd-timesyncd
无法提供如chrony
.