38 Zeitsynchronisierung mit NTP #
Der NTP-(Network Time Protocol-)Mechanismus ist ein Protokoll für die Synchronisierung der Systemzeit über das Netzwerk. Erstens kann ein Computer die Zeit von einem Server abrufen, der als zuverlässige Zeitquelle gilt. Zweitens kann ein Computer selbst für andere Computer im Netzwerk als Zeitquelle fungieren. Es gibt zwei Ziele – das Aufrechterhalten der absoluten Zeit und das Synchronisieren der Systemzeit aller Computer im Netzwerk.
Das Aufrechterhalten der genauen Systemzeit ist in vielen Situationen wichtig. Die integrierte Hardware-Uhr erfüllt häufig nicht die Anforderungen bestimmter Anwendungen, beispielsweise Datenbanken oder Cluster. Die manuelle Korrektur der Systemzeit würde schwerwiegende Probleme nach sich ziehen; das Zurückstellen kann beispielsweise zu Fehlfunktionen wichtiger Anwendungen führen. Die Systemzeiten der in einem Netzwerk zusammengeschlossenen Computer müssen in der Regel synchronisiert werden. Es empfiehlt sich aber nicht, die Zeiten manuell anzugleichen. Vielmehr sollten Sie dazu NTP verwenden. Der NTP-Dienst passt die Systemzeit ständig anhand zuverlässiger Zeitserver im Netzwerk an. Zudem ermöglicht er die Verwaltung lokaler Referenzuhren, beispielsweise funkgesteuerter Uhren.
Ab SUSE Linux Enterprise Server 15 ist chrony
Standardimplementation von NTP. chrony
besteht aus zwei Teilen; der Daemonchronyd
kann beim Booten gestartet werden und mit dem Kommandozeilenschnittstellenprogramm chronyc
ist es möglich, die Leistung von chronyd
zu überwachen und verschiedene Betriebsparameter zur Laufzeit zu ändern.
Ab SUSE Linux Enterprise Server 15.2 konfiguriert das YaST-Modul für die NTP-Client-Konfiguration den systemd-timer anstelle des cron daemon, um chrony
auszuführen, wenn es nicht zur Ausführung als Daemon konfiguriert ist.
38.1 Konfigurieren eines NTP-Clients mit YaST #
Der NTP-Daemon (chronyd
) im chrony
-Paket ist so voreingestellt, dass die Hardware-Uhr des lokalen Computers als Zeitreferenz verwendet wird. Die Präzision einer Hardware-Uhr ist stark von der Zeitquelle abhängig. Eine Atomuhr oder ein GPS-Empfänger ist beispielsweise eine sehr genaue Zeitquelle, ein normaler RTC-Chip ist dagegen keine zuverlässige Zeitquelle. YaST erleichtert die Konfiguration von NTP-Clients.
Im Fenster für die YaST-NTP-Client-Konfiguration (
› ) können Sie den Zeitpunkt für den Start des NTP-Daemons sowie den Typ der Konfigurationsquelle angeben und benutzerdefinierte Zeitserver einfügen.38.1.1 Start des NTP-Daemons #
Zum Starten des NTP-Daemons stehen drei Optionen zur Auswahl:
Wählen Sie
, um denchrony
-Daemon manuell zu starten.Wählen Sie
aus, um die Systemzeit regelmäßig festzulegen, ohne dasschrony
ständig ausgeführt wird. Sie können das festlegen.Wählen Sie
, umchronyd
automatisch beim Booten des Systems zu starten. Diese Einstellung wird empfohlen.
38.1.2 Typ der Konfigurationsquelle #
Wählen Sie im Dropdown-Feld
entweder die Option oder . Verwenden Sie , wenn Ihr Server nur mit einer bestimmten Gruppe (öffentlicher) NTP-Server arbeitet, und , wenn Ihr internes Netzwerk NTP-Server über DHCP anbietet.38.1.3 Konfigurieren von Zeitservern #
Im unteren Bereich des Fensters
werden die Zeitserver aufgelistet, die der Client abfragen kann. Bearbeiten Sie diese Liste nach Bedarf mithilfe der Optionen , und .Klicken Sie auf
, um einen neuen Zeitserver hinzuzufügen:Geben Sie in das Feld
die URL des Zeitservers oder des Zeitserver-Pools ein, mit dem die Computerzeit synchronisiert werden soll. Prüfen Sie mit , ob die eingegebene URL auf eine gültige Zeitquelle verweist.Mit
wird eine größere Anzahl von Anfragen beim Start deschronyd
-Daemons gesendet, sodass die Zeitsynchronisierung beschleunigt wird.Mit
beschleunigen Sie den Bootvorgang auf Systemen, auf denen derchronyd
-Daemon automatisch gestartet wird und die beim Booten keine Internetverbindung besitzen. Diese Option eignet sich beispielsweise für Laptops, deren Netzwerkverbindungen über NetworkManager verwaltet werden.Bestätigen Sie Ihre Auswahl mit
.
38.2 Manuelle Konfiguration von NTP im Netzwerk #
chrony
liest die Konfiguration aus der Datei /etc/chrony.conf
aus. Damit die Computeruhr synchronisiert bleibt, müssen Sie die zu verwendenden Zeitserver in chrony
festlegen. Hierbei können Sie spezielle Servernamen oder IP-Adressen angeben, beispielsweise:
0.suse.pool.ntp.org 1.suse.pool.ntp.org 2.suse.pool.ntp.org 3.suse.pool.ntp.org
Sie können auch den Namen für einen Pool angeben. Der Poolname wird in mehrere IP-Adressen aufgelöst:
pool pool.ntp.org
Soll die Zeit auf mehreren Computern in demselben Netzwerk synchronisiert werden, sollten Sie nicht alle Computer mit einem externen Server synchronisieren. Ein bewährtes Verfahren besteht darin, einen Computer als Zeitserver, der mit einem externen Zeitserver synchronisiert wird, und die anderen Computer als die Clients dieses Computers festzulegen. Fügen Sie eine local
-Direktive zur Datei /etc/chrony.conf
des Servers hinzu, sodass dieser Server von einem autoritativen Zeitserver unterschieden wird:
local stratum 10
Starten Sie chrony
mit dem folgenden Kommando:
systemctl start chronyd.service
Nach der Initialisierung von chronyd
dauert es eine gewisse Zeit, bis die Zeit sich stabilisiert und die Drift-Datei zum Korrigieren der lokalen Computeruhr erstellt wird. Mithilfe der Drift-Datei kann der systematische Fehler der Hardware-Uhr berechnet werden, wenn der Computer eingeschaltet wird. Die Korrektur kommt umgehend zum Einsatz und führt zu einer größeren Stabilität der Systemzeit.
Aktivieren Sie den Dienst, sodass chrony
automatisch beim Booten gestartet wird, mit dem folgenden Kommando:
systemctl enable chronyd.service
yast-timesync.service
Neben chronyd.service
enthält SLES den Dienst yast-timesync.service
. yast-timesync.service
wird alle 5 Minuten von einem Zeitgeber ausgelöst. Der Dienst führt chronyd
mit der Option -q
aus, um die Systemzeit einzustellen, und wird dann beendet. Da immer nur eine Instanz von chronyd
ausgeführt werden kann, sollten Sie nicht beide chronyd
-bezogenen Dienste gleichzeitig aktivieren oder starten.
38.3 Konfigurieren von chronyd
zur Laufzeit mit chronyc
#
Mit chronyc
können Sie das Verhalten von chronyd
zur Laufzeit verändern. Hiermit werden außerdem Statusberichte zum Betrieb von chronyd
erzeugt.
Sie können chronyc
wahlweise im interaktiven oder im nicht interaktiven Modus ausführen. Soll chronyc
interaktiv ausgeführt werden, geben Sie chronyc
in die Kommandozeile ein. Eine Eingabeaufforderung wird angezeigt und das System wartet auf Ihre Kommandoeingabe. Mit dem folgenden Kommando prüfen Sie beispielsweise, wie viele NTP-Quellen online oder offline sind:
#
chronyc
chronyc> activity 200 OK 4 sources online 2 sources offline 1 sources doing burst (return to online) 1 sources doing burst (return to offline) 0 sources with unknown address
Mit quit
oder exit
schließen Sie die chronyc
-Eingabeaufforderung.
Falls Sie keine interaktive Eingabeaufforderung benötigen, geben Sie das Kommando direkt ein:
#
chronyc
activity
Die mit chronyc
vorgenommenen Änderungen sind nicht dauerhaft. Sie gehen nach dem nächsten Neustart von chronyd
verloren. Sollen dauerhafte Änderungen erfolgen, bearbeiten Sie /etc/chrony.conf
.
Eine vollständige Liste der chronyc
-Kommandos finden Sie auf der man-Seite (man
1 chronyc
).
38.4 Dynamische Zeitsynchronisierung während der Laufzeit #
chronyd
wird zwar auf einem System, das ohne Netzwerkverbindung bootet, normal ausgeführt, kann jedoch nicht die DNS-Namen der in der Konfigurationsdatei angegebenen Zeitserver auflösen.
chronyd
versucht in immer größeren Zeitabständen, die in den server
-, pool
- und peer
-Direktiven angegebenen Zeitservernamen aufzulösen, bis die Auflösung erfolgreich ist.
Falls der Zeitserver beim Starten von chronyd
nicht erreichbar sein wird, können Sie die Option offline
angeben:
server server_address offline
Hiermit ruft chronyd
den Server erst nach Aktivierung mit dem folgenden Kommando ab:
#
chronyc online server_address
Wenn die Option auto_offline
eingestellt ist, nimmt chronyd
an, dass der Zeitserver offline geschaltet wurde, sobald zwei Anfragen ohne Antwort gesendet wurden. Mit dieser Option müssen Sie nicht mehr das Kommando „offline“ über chronyc
ausführen, wenn Sie die Netzwerkverbindung trennen.
38.5 Einrichten einer lokalen Referenzuhr #
Das Software-Paket chrony
greift auf andere Programme (z. B. gpsd
) zurück, die die Zeitgebungsdaten über den SHM- oder SOCK-Treiber abrufen. Geben Sie mit der refclock
-Direktive in /etc/chrony.conf
eine Hardware-Referenzuhr als Zeitquelle an. Hierbei sind zwei Parameter obligatorisch, zum einen der Treibername und zum anderen ein treiberspezifischer Parameter. Nach den beiden Parameter können bei Bedarf noch refclock
-Optionen angegeben werden. chronyd
umfasst folgende Treiber:
PPS – Treiber für die Kernel-API
pulse per second
. Beispiel:refclock PPS /dev/pps0 lock NMEA refid GPS
SHM – Treiber für den gemeinsam genutzten NTP-Speicher. Beispiel:
refclock SHM 0 poll 3 refid GPS1 refclock SHM 1:perm=0644 refid GPS2
SOCK – Treiber für den Unix-Domänen-Socket. Beispiel:
refclock SOCK /var/run/chrony.ttyS0.sock
PHC – Treiber für die PTP-Hardware-Uhr. Beispiel:
refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37 refclock PHC /dev/ptp1:nocrossts poll 3 pps
Weitere Informationen zu den Optionen der einzelnen Treiber finden Sie auf der man-Seite man 8
chrony.conf
.
38.6 Uhrensynchronisierung mit einer externen Zeitreferenz (ETR) #
Unterstützung für Uhrensynchronisierung mit einer externen Zeitreferenz (ETR) ist verfügbar. Die externe Zeitreferenz sendet alle 2**20 (2 hoch 20) Millisekunden ein Oszillatorsignal und ein Synchronisierungssignal, um die Tageszeit-Uhren aller angeschlossenen Server synchron zu halten.
Zur Verfügbarkeit können zwei ETR-Einheiten an einen Computer angeschlossen werden. Wenn die Uhr um mehr als die Toleranz zum Prüfen der Synchronisierung abweicht, erhalten alle CPUs eine Rechnerprüfung, die darauf hinweist, dass die Uhr nicht synchronisiert ist. In diesem Fall werden sämtliche DASD-E/A an XRC-fähige Geräte gestoppt, bis die Uhr wieder synchron ist.
Die ETR-Unterstützung wird mithilfe von zwei sysfs
-Attributen aktiviert; führen Sie die folgenden Kommandos als root
aus:
echo 1 > /sys/devices/system/etr/etr0/online echo 1 > /sys/devices/system/etr/etr1/online