chrony 与 systemd-timesyncd – 作为 NTP 客户端的区别和用例是什么?

wed*_*edi 27 systemd ntp chrony

不知何故,但不是完全建立在旧问题“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 客户端的用例?

fil*_*den 19

systemd NEWS 文件systemd-timesyncd公告很好地解释了该工具与 Chrony 和类似工具的差异。(强调我的):

添加了一个新的“systemd-timesyncd”守护进程,用于通过网络同步系统时钟。它实现了一个SNTP 客户端。与诸如chrony或 NTP 参考服务器之类的 NTP 实现相反,这仅实现了客户端,并且不关心完整的 NTP 复杂性,只关注从一个远程服务器查询时间并将本地时钟同步到它。除非您打算为联网客户端提供 NTP 服务或想要连接到本地硬件时钟,否则这个简单的 NTP 客户端应该非常适合大多数安装。[...]

此设置是服务器队列中大多数主机的常见用例。它们通常会从本地 NTP 服务器同步,而这些服务器本身从多个源(可能包括硬件)同步。systemd-timesyncd 尝试为该常见用例提供易于使用的解决方案。


试图解决您的具体问题:

就准确性而言,两者在现实世界中有何不同?

我相信您可以通过从多个来源获取同步数据来获得更高的准确性,这尤其不是 systemd-timesyncd 支持的用例。但是,当您使用它从连接到可靠内部网络的中央 NTP 服务器获取同步数据时,使用多个来源并不是那么重要,并且您可以从单一来源获得良好的准确性。

如果您从本地网络和同一数据中心中的受信任服务器同步您的服务器,则 NTP 和 SNTP 之间的准确性差异几乎不存在。NTP 可以将 RTT 考虑在内并进行时间拖延,但是当您的 RTT 非常小时,这是快速本地网络和附近机器的情况,这并不是那么有益。如果您可以信任正在使用的来源,则您也不需要多个来源。

效率上有什么区别?

从单一来源获得同步比从多个来源获得同步要简单得多,因为您不必决定哪些来源比其他来源更好,也不必将来自多个来源的信息结合起来。这些算法要简单得多,对于简单的情况,将需要更少的 CPU 负载。

什么是“非简单”时间同步需要又名 chrony 作为 NTP 客户端的用例?

这在上面的引用中已经解决,但无论如何,这些都是 systemd-timesyncd 未涵盖的 Chrony 用例:

  • 运行 NTP 服务器(以便其他主机可以使用此主机作为同步源);
  • 从多个来源获取 NTP 同步信息(这对于主机从 Internet 上的公共服务器获取该信息很重要);和
  • 从本地时钟获取同步信息,这通常涉及专用硬件,例如可以从卫星获取准确时间信息的 GPS 设备。

这些用例需要 Chrony 或 ntpd 或类似的。

  • @wedi:timesyncd 的准确性主要取决于服务器和网络。只有一台服务器,无法判断服务器是否返回虚假数据,因此您只需要完全信任它。(由此产生的最大误差是无限的)。您可以达到的最大精度将取决于您和服务器之间的网络抖动(可能是几毫秒或更长时间)。 (3认同)

Rui*_*iro 16

正如另一个答案正确指出的那样,chrony实现 NTP 和systemd-timesyncdSNTP。

从时间服务客户端的角度来看:

SNTP 是一个实现起来要简单得多的协议;
NTP 允许按时逐步增加/更正。NTP 的一大优势是它还考虑了答案的 RTT 以获得更准确的时间。

来自https://www.meinbergglobal.com/english/faq/faq_37.htm

虽然功能齐全的 NTP 服务器或客户端通过使用不同的数学和统计方法以及平滑的时钟速度调整,可以达到非常高的准确度并尽可能避免突然的时间步长,但 SNTP 只能推荐用于简单的应用程序,其中要求准确性和可靠性要求不高。通过忽略漂移值并使用简化的系统时钟调整方法(通常是简单的时间步进),与完整的 NTP 实现相比,SNTP 仅实现了低质量的时间同步。

SNTP 采用了更简单的方法。NTP 算法的许多复杂性都被删除了。许多 SNTP 客户端并没有扭曲时间,而是步进时间。这适用于需要简单时间戳的许多应用程序。此外,SNTP 缺乏监控和过滤多个 NTP 服务器的能力。通常使用简单的循环方法,如果一个服务器出现故障,则使用列表中的下一个

来自https://www.masterclock.com/company/masterclock-inc-blog/ntp-vs-sntp

NTP 远比 SNTP 准确和精确,这使其成为大多数企业应用程序中事实上的赢家。另一方面,SNTP 的简单性使其更适合于诸如 IP 摄像机、DVR 和一些网络交换机之类的东西。这些类型的硬件缺乏处理更复杂协议的处理资源,但随着连接设备变得越来越强大,这种情况可能会改变。

SNTP 的一个主要弱点是,您无法通过像网络时间协议默认那样从多个来源检索时间来使其更准确。

另一个主要问题是,当您同时使用虚拟机管理程序和 NTP 守护程序尝试更改 VM 时间时,SNTP 实现比 NTP 在虚拟化方面存在更多问题。特别是当他们没有按时就一些错误配置达成一致导致他们都处于活动状态,这可能会导致大问题。(虽然有能力的系统管理员只会激活一种与时间同步的方法,但也有可能由于配置错误而使它们都处于活动状态)。

PSsystemd-timesyncd不使用时,不应该是一个被通知的替代方案systemd