chrony vs. systemd-timesyncd - Was sind die Unterschiede und Anwendungsfälle als NTP-Clients?

18

Irgendwie, aber nicht ganz aufbauend auf der älteren Frage "ntpd vs. systemd-timesyncd - Wie erreicht man eine zuverlässige NTP-Synchronisation?" Ich möchte nach den Unterschieden zwischen chrony und systemd-timesyncd in Bezug auf einen NTP- Client fragen .

Ich weiß, dass systemd-timesyncd eine mehr oder weniger minimale NTP-Client-Implementierung ist, während chrony eine vollwertige NTP-Daemon-Lösung ist, die zufällig einen NTP-Client enthält.

In den Versionshinweisen zu Ubuntu Bionic Beaver heißt es :

Für einfache Zeitsynchronisationsanforderungen wird das Basissystem bereits mit systemd-timesyncd geliefert. Chrony wird nur benötigt, um als Zeitserver zu fungieren oder wenn Sie eine genauere und effizientere Synchronisierung bewerben möchten.

Ich mag die Idee, ein minimal vorinstalliertes Tool zu verwenden, und ich bin mir ziemlich sicher, dass systemd-timesyncd die Arbeit für meine Anwendungsfälle erledigt. Trotzdem bin ich neugierig:

  • Was sind die realen Unterschiede zwischen den beiden in Bezug auf die Genauigkeit?
  • Was sind die Unterschiede in der Effizienz?
  • Was braucht eine "nicht einfache" Zeitsynchronisation, auch bekannt als "Use-Cases" für Chrony als NTP-Client?
wedi
quelle

Antworten:

13

Die Ankündigung von systemd-timesyncd in der Datei systemd NEWS sich die Unterschiede dieses Tools im Vergleich zu Chrony und ähnlichen Tools gut erklären. (Hervorhebung von mir):

Ein neuer Daemon "systemd-timesyncd" wurde hinzugefügt, um die Systemuhr über das Netzwerk zu synchronisieren. Es implementiert einen SNTP-Client . Im Gegensatz zu NTP-Implementierungen wie chrony oder dem NTP-Referenzserver wird hier nur eine Clientseite implementiert, und die volle NTP-Komplexität wird nicht beeinträchtigt. Es wird nur die Zeit von einem Remoteserver abgefragt und die lokale Uhr damit synchronisiert . Sofern Sie nicht beabsichtigen, NTP für Netzwerk-Clients bereitzustellen oder eine Verbindung zu lokalen Hardware-Uhren herzustellen, sollte dieser einfache NTP-Client für die meisten Installationen mehr als angemessen sein. [...]

Diese Konfiguration ist ein häufiger Anwendungsfall für die meisten Hosts in einer Serverflotte. Sie werden normalerweise von lokalen NTP-Servern synchronisiert, die wiederum von mehreren Quellen, möglicherweise einschließlich Hardware, synchronisiert werden. systemd-timesyncd versucht, eine benutzerfreundliche Lösung für diesen allgemeinen Anwendungsfall bereitzustellen.


Versuchen Sie, Ihre spezifischen Fragen zu beantworten:

Was sind die realen Unterschiede zwischen den beiden in Bezug auf die Genauigkeit?

Ich glaube, Sie können eine höhere Genauigkeit erzielen, indem Sie Synchronisationsdaten aus mehreren Quellen abrufen. Dies ist insbesondere kein unterstützter Anwendungsfall für systemd-timesyncd. Wenn Sie es jedoch verwenden, um Synchronisierungsdaten von zentralen NTP-Servern abzurufen, die mit Ihrem zuverlässigen internen Netzwerk verbunden sind, ist die Verwendung mehrerer Quellen nicht wirklich relevant und Sie erhalten eine gute Genauigkeit aus einer einzigen Quelle.

Wenn Sie Ihren Server von einem vertrauenswürdigen Server in einem lokalen Netzwerk und im selben Datencenter synchronisieren , ist der Unterschied in der Genauigkeit zwischen NTP und SNTP praktisch nicht vorhanden. NTP kann RTT berücksichtigen und Zeitmessungen durchführen, aber das ist nicht so vorteilhaft, wenn Ihre RTT sehr klein ist, was bei einem schnellen lokalen Netzwerk und einem nahe gelegenen Computer der Fall ist. Sie brauchen auch nicht mehrere Quellen, wenn Sie der von Ihnen verwendeten vertrauen können.

Was sind die Unterschiede in der Effizienz?

Das Abrufen der Synchronisierung von einer einzelnen Quelle ist viel einfacher als das Abrufen von mehreren Quellen, da Sie nicht entscheiden müssen, welche Quellen besser sind als andere, und möglicherweise Informationen aus mehreren Quellen kombinieren müssen. Die Algorithmen sind viel einfacher und erfordern im einfachen Fall weniger CPU-Last.

Was braucht eine "nicht einfache" Zeitsynchronisation, auch bekannt als "Use-Cases" für Chrony als NTP-Client?

Dies wird im obigen Zitat angesprochen, aber in jedem Fall handelt es sich um Anwendungsfälle für Chrony, die nicht von systemd-timesyncd abgedeckt werden:

  • Ausführen eines NTP-Servers (damit andere Hosts diesen Host als Quelle für die Synchronisierung verwenden können);
  • Abrufen von NTP-Synchronisierungsinformationen von mehreren Quellen (was wichtig ist, wenn Hosts diese Informationen von öffentlichen Servern im Internet abrufen); und
  • Abrufen von Synchronisationsinformationen von der lokalen Uhr, wobei es sich normalerweise um spezielle Hardware wie GPS-Geräte handelt, die genaue Zeitinformationen von Satelliten abrufen können.

Diese Anwendungsfälle erfordern Chrony oder ntpd oder ähnliches.

filbranden
quelle
1
Vielen Dank für Ihre ausführliche Antwort und Daumen hoch für die gezielte Beantwortung meiner Fragen. Um dies näher zu erläutern: - - 1. Wie groß ist die Größenordnung des Genauigkeitsdeltas? Zu wissen, dass dies der Entscheidungsfindung definitiv etwas Substanz verleihen würde. Sprechen wir über 10 ^ -9 oder 10 ^ -1 Sekunden? - - 2. Ihre Antwort in Bezug auf Effizienz hat mich noch mutiger gemacht: Trägt - blasphemisch gesprochen - eine Mittelung einiger Zahlen so viel zur CPU-Auslastung bei, dass Sie sie in den Ubuntu-Versionshinweisen erwähnen müssen?
Mittwoch,
3
@wedi: Die Genauigkeit von timesyncd hängt hauptsächlich vom Server und vom Netzwerk ab. Bei nur einem Server kann nicht festgestellt werden, ob der Server gefälschte Daten zurückgibt, daher müssen Sie ihm nur voll vertrauen. (Der maximale Fehler hieraus ist unbegrenzt). Die maximale Genauigkeit, die Sie erzielen können, wird durch den Netzwerk-Jitter zwischen Ihnen und dem Server bestimmt (kann einige Millisekunden oder länger betragen).
TooTea
1
Vielen Dank, @TooTea! In Ordnung. Aha. Die erhöhte Genauigkeit ergibt sich aus der Verwendung von mehr als einer Quelle, und jede spezielle magische Chronik, die mit einer einzigen Quelle durchgeführt wird, kann vernachlässigt werden. Mein Verständnis: - - 1. Verwendung des einzelnen Zeitservers metadata.google.internal auf einer GCE-Instanz => kein messbarer Unterschied in der Genauigkeit (schließen wir Zeitmessung usw. aus) - - 2. Verwendung von drei Zeitservern mit gutem Ruf auf einem VM bei einigen niedergelassenen Hosting-Unternehmen => sehen Sie einen Unterschied, aber nicht "viel" (was auch immer dies sein mag) - - 3. Wenn Sie pool.ntp.org auf einer Raspi verwenden, die über einen ISP verbunden ist => sind Sie so glücklich wie möglich
Mittwoch,
Ich würde auf allen drei @wedi richtig sagen. Insbesondere (1) wenn Sie einen Zeitserver im selben "lokalen Netzwerk" wie Ihr Computer und im Wesentlichen im selben Rechenzentrum (mit sehr geringer Geschwindigkeit und sehr geringem Jitter) verwenden, die Vorteile von NTP und Zeitmessung im Vergleich zu SNTP in Bezug auf die Genauigkeit, wird sehr niedrig sein. Es gibt also keinen Grund, in diesen Anwendungsfällen NTP (und nicht SNTP) auszuführen!
5.
@wedi Die Antwort wurde aktualisiert, um die Verwendung eines vertrauenswürdigen Servers in einem lokalen Netzwerk ausdrücklich zu erwähnen.
Filbranden
14

chronyImplementiert, wie in der anderen Antwort richtig angegeben, NTP und systemd-timesyncdSNTP.

Aus Sicht eines Zeitdienstkunden:

SNTP ist ein viel einfacher zu implementierendes Protokoll.
NTP ermöglicht schrittweise Inkremente / Korrekturen auf Zeit. Ein Hauptvorteil von NTP ist, dass es auch die RTT der Antwort berücksichtigt, um eine genauere Zeit zu erhalten.

Von https://www.meinbergglobal.com/english/faq/faq_37.htm

Während ein NTP-Server oder -Client mit vollem Funktionsumfang ein sehr hohes Maß an Genauigkeit erreicht und durch die Verwendung verschiedener mathematischer und statistischer Methoden und sanfter Taktratenanpassungen plötzliche Zeitschritte so weit wie möglich vermeidet, kann SNTP nur für einfache Anwendungen empfohlen werden, bei denen die Anforderungen für Genauigkeit und Zuverlässigkeit sind nicht zu anspruchsvoll. Durch das Ignorieren von Driftwerten und die Verwendung vereinfachter Methoden zur Anpassung der Systemuhr (häufig einfache Zeitschritte) erzielt SNTP im Vergleich zu einer vollständigen NTP-Implementierung nur eine Zeitsynchronisation mit geringer Qualität.

SNTP geht viel einfacher vor. Viele der Komplexitäten des NTP-Algorithmus werden entfernt. Anstatt die Zeit zu verschieben, werden viele SNTP-Clients schrittweise ausgeführt. Dies ist für viele Anwendungen in Ordnung, bei denen ein einfacher Zeitstempel erforderlich ist. Darüber hinaus ist SNTP nicht in der Lage, mehrere NTP-Server zu überwachen und zu filtern. Häufig wird ein einfacher Round-Robin-Ansatz verwendet. Fällt ein Server aus, wird der nächste in einer Liste verwendet

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

NTP ist weitaus genauer und präziser als SNTP und somit de facto der Gewinner in den meisten Unternehmensanwendungen. Andererseits ist SNTP aufgrund seiner Einfachheit besser für IP-Kameras, DVRs und einige Netzwerk-Switches geeignet. Diesen Hardwaretypen fehlen die Verarbeitungsressourcen, um komplexere Protokolle zu verarbeiten. Mit zunehmender Leistungsfähigkeit der angeschlossenen Geräte kann sich dies jedoch ändern.

Eine große Schwachstelle von SNTP ist, dass Sie die Genauigkeit nicht verbessern können, indem Sie die Zeit aus mehreren Quellen abrufen, wie dies das Network Time Protocol standardmäßig tut.

Ein weiterer wichtiger Punkt, den ich sehe, sind SNTP-Implementierungen, die mehr Probleme bereiten als NTP, in der Virtualisierung, wenn sowohl der Hypervisor als auch der NTP-Dämon versuchen, die VM-Zeit zu ändern. Insbesondere wenn sie nicht rechtzeitig mit einer falschen Konfiguration einverstanden sind, sind sie beide aktiv, was zu großen Problemen führen kann. (Während kompetente Systemadministratoren nur eine Methode zur Synchronisation mit der Zeit aktiv lassen, kann es vorkommen, dass beide durch einen Konfigurationsfehler aktiv sind.)

PS systemd-timesyncdsollte keine empfohlene Alternative sein, wenn es nicht verwendet wird systemd.

Rui F Ribeiro
quelle
1
Es ist nicht ganz offensichtlich. Theoretisch könnte man das systemd-timesyncdProgramm unter einem anderen Servicemanager ausführen . Ich habe ein Service-Bundle bereitgestellt, um es service-managerseit 2018 unter dem nosh-Toolkit auszuführen. Was Sie vermisst haben, ist, dass die System-Leute (gemäß Debian-Fehler # 812522) VirtualBox-Gastdienste und andere dazu anregen, explizit mit dem systemd-timesyncdService in Konflikt zu treten , um dessen Verwendung zu verhindern in virtuellen Maschinen.
JdeBP
@JdeBP Interessante Bemerkung. Ich verwende Debian ohne systemd... Trotzdem kann und wird vmtools timesync in Servern deaktiviert sein, die NTP-Dienste ausführen (zum Beispiel die VMs der NTP-Server), und einige Sysadmins werden weiterhin von vmtools synchronisiert. Andere folgen den VmWare-Anweisungen zum Deaktivieren von vmtools timesync (diese sollten nur verwendet werden, wenn Sie wissen, was Sie tun). Dieser Fehler ist nicht linear zu beheben, und es wird ein zusätzlicher Konfigurationspunkt sein, der von Leuten leicht übersehen wird, die den VmWare-Empfehlungen folgen, vmtools timesync nicht zu verwenden.
Rui F Ribeiro
(Bearbeiten Sie meine Antwort auf der Grundlage Ihrer Bemerkung. Sie hatten einen Fehler in diesem Text zum Verwalten von vmtools vs. (S) NTP und machen Sie es expliziter.)
Rui F. Ribeiro,
1
@wedi Im Falle von VmWare kann die Zeitsynchronisierung mit dem Hypervisor sowohl in der Vcenter-, VM-Image-Konfiguration als auch auf Linux-Seite deaktiviert werden. siehe verwandte unix.stackexchange.com/questions/492487/... ich es immer tue vmware-toolbox-cmd timesync disablein meinem NTP - Server, ob die VmWare Jungs für diejenigen VMs deaktiviert timesync haben. (Ich bevorzuge auch normalerweise die Verwendung von chrony als NTP-Client)
Rui F Ribeiro
1
Ich bin froh, dass Sie auf das mögliche Zeitsynchronisierungsrennen hingewiesen haben! Gut, das im Hinterkopf zu behalten!
Mittwoch,
0

chronyist keine Gabelform, ntpdsondern wird von Grund auf neu implementiert. Es implementiert sowohl Client und Server - Modi Voll NTPv4 Protokoll ( RFC5905 ). Bei Anwendern auf Unternehmensebene ist ein Trend zu beobachten, der von traditionell ntpdzu chronyRed Hat (ab RHEL 7) und SuSE (ab SLES 15) wechselt.

systemd-timesyncdImplementieren Sie nur den Client- Modus mit SNTP- Protokoll ( RFC4330 ) . Komplexe Anwendungsfälle werden daher von nicht abgedeckt . Beispielsweise kann SNTP die Genauigkeit nicht verbessern, indem die Zeit aus mehreren Quellen abgerufen wird, wie dies bei NTP standardmäßig der Fall ist. Infolgedessen kann keine so genaue Zeit wie angegeben werden .systemd-timesyncdsystemd-timesyncdchrony

PT Huynh
quelle
1
Mmmh. Ich habe nicht bemerkt, dass jemand behauptet, Chrony sei ein Fork, und ich erwähnte in meiner Frage, dass Chrony Server und Client implementiert, während systemd-timesyncd nur Client ist. Vielen Dank, dass Sie die relevanten RFCs erwähnt haben.
Mittwoch,