chrony vs. systemd-timesyncd –作为NTP客户端有什么区别和用例?


18

以某种方式但并非完全基于较旧的问题“ ntpd与systemd-timesyncd-如何实现可靠的NTP同步?” ,我想问一下NTP 客户端上 chrony和systemd-timesyncd之间的区别。

我知道systemd-timesyncd是一个或多或少的ntp客户端实现,而chrony是一个完整的NTP守护程序解决方案,恰好包含一个NTP客户端。

ubuntu Bionic Beaver发行说明指出以下内容:

为了实现简单的时间同步,基本系统已经附带了systemd-timesyncd。仅需要Chrony充当时间服务器,或者如果您想要播发的广告更加准确和高效地同步。

我喜欢使用最小的预安装工具来完成这项工作的想法,并且我很确定systemd-timesyncd会在我的用例中完成这项工作,但我仍然很好奇:

  • 两者在准确性方面的真实世界有何不同?
  • 效率有何不同?
  • 什么是“非简单”时间同步又需要作为NTP客户端的chronase用例?

Answers:


13

在systemd NEWS文件对systemd-timesyncd声明很好地解释了该工具与Chrony和类似工具的区别。(强调我的):

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

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


尝试解决您的特定问题:

两者在准确性方面的真实世界有何不同?

我相信您可以通过从多个来源获取同步数据来获得更高的准确性,特别是systemd-timesyncd不支持使用案例。但是,当您使用它从连接到可靠内部网络的中央NTP服务器获取同步数据时,使用多个源实际上并没有太大关系,并且可以从单个源获得良好的准确性。

如果要从本地网络和同一数据中心中的受信任服务器同步服务器,则NTP和SNTP之间的精度差异实际上将不存在。NTP可以考虑RTT并进行时间规划,但是当您的RTT很小时(这对于快速的本地网络和附近的计算机而言)并不是那么有用。如果您可以信任所使用的资源,则也不需要多个资源。

效率有何不同?

从一个来源获得同步比从多个来源获得同步要简单得多,因为您不必决定哪个来源比其他来源更好,并且可以合并来自多个来源的信息。该算法更加简单,在这种情况下,所需的CPU负载也更少。

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

上面的引用中已经解决了这个问题,但是无论如何,这些都是Chrony的用例,它们不在systemd-timesyncd范围内:

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

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


1
非常感谢您的详尽回答,也感谢您专门回答我的问题。详细说明:– – 1.精度增量的数量级是多少。知道这一点肯定会增加决策的实质。我们是在说10 ^ -9还是10 ^ -1秒?– – 2.您对效率的回答让我更加好奇:–亵渎地说–一些平均值的平均会给CPU负载增加太多,您需要在Ubuntu发行说明中提及吗?
wedi

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

1
谢谢@TooTea!好。我知道了。因此,使用多个源可以提高准确性,并且可以忽略使用单个源进行的任何特殊魔术时态。我的理解:– – 1.在GCE实例上使用单个时间服务器metas.google.internal =>准确性上没有可测量的差异(不包括测时等)– – 2.在虚拟机上使用三个享有很高声誉的时间服务器在某个已定居的托管公司=>中,您会看到差异,但看不到“太大”(无论如何)– – 3.在通过某些ISP连接的raspi上使用pool.ntp.org,您会感到很高兴,因为larry可以得到。
wedi

我对所有三个@wedi说正确。特别是(1),如果您在与计算机相同的“本地网络”上并且基本上在同一数据中心(非常低的rtt和非常低的抖动)中使用时间服务器,那么就准确性而言,NTP和时标与SNTP相比,会很低。因此,在这些用例中几乎没有理由运行NTP(而不是SNTP)!
filbranden

@wedi更新了答案,以明确提及使用本地网络上的受信任服务器。
filbranden

14

当其他答案正确说明时,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时间时,我可以看到的另一个主要观点是,与NTP相比,SNTP实现带来的问题更多。特别是由于他们在某些配置上的时间安排不一致,导致它们都处于活动状态,这可能会引起大问题。(尽管称职的系统管理员将仅使一种与时间同步的方法处于活动状态,但可能由于配置错误而使它们同时处于活动状态)。

systemd-timesyncd不使用PS 时,不建议使用PS systemd


1
这并不完全明显。从理论上讲,一个systemd-timesyncd程序可以在另一个服务管理器下运行。service-manager自2018年以来,我已经提供了一个在nosh工具箱下运行该服务的服务包。您所错过的是,系统化的人员(每个Debian错误#812522)鼓励VirtualBox来宾服务以及其他人与该systemd-timesyncd服务显式冲突,以防止其使用在虚拟机中。
JdeBP '19

@JdeBP有趣的一句话。我在不使用systemd...的情况下使用Debian。但是,vmtools timesync可以并且将被禁用,并且应该在提供NTP服务的服务器(例如NTP服务器VM)中禁用,并且某些sysadmin会通过vmtools保持同步,其他人遵循禁用vmtools timesync的VmWare论文(仅当您知道自己在做什么时才应使用)。该错误不是线性的要解决的问题,它是人们遵循VmWare建议不使用vmtools timesync的建议时很容易忽略的一个额外配置。
Rui F Ribeiro

(根据您的评论编辑我的回答,在有关管理vmtools vs(S)NTP的文字上犯了一个错误,并使其更加明确)
Rui F Ribeiro

1
@wedi对于VmWare,可以在Vcenter,VM映像配置或Linux端禁用与虚拟机管理程序的时间同步。请参阅相关的unix.stackexchange.com/questions/492487/…vmware-toolbox-cmd timesync disable无论VmWare家伙是否已为这些VM禁用了时间同步,我总是在NTP服务器上进行操作。(我通常也更喜欢使用chrony作为NTP客户端)
Rui F Ribeiro

1
很高兴您指出了可能的时间同步竞赛!谨记这一点很好!
wedi

0

chrony不是fork形式,ntpd而是从头开始实现。它实现了完整的NTPv4协议(RFC5905)的客户端服务器模式。在企业级用户中,我们看到了从传统到类似Red Hat(从RHEL 7开始)和SuSE(从SLES 15开始)的趋势。ntpdchrony

systemd-timesyncd仅实现SNTP协议(RFC4330客户端模式。因此,不能涵盖复杂的用例systemd-timesyncd。例如,SNTP无法像默认情况下一样通过从多个来源检索时间来使其更加准确。结果systemd-timesyncd无法提供像那样的高精度时间chrony


1
嗯 我没有注意到有人声称chrony是一个fork,我在我的问题中提到chrony实现了服务器和客户端,而systemd-timesyncd仅是客户端。感谢您提及相关的RFC。
wedi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.