Archiv

Artikel Tagged ‘zeitsynchronisation’

Zeitsynchronisation mit NTP Daemon für Debian und Ubuntu

Viele Webserver (oder Rootserver) sind auf eine genau laufende Uhrzeit angewiesen, um aussagefähige Logfiles (Beispielsweise Zugriffsstatistika der Webseiten oder Systemlogfiles für die Fehleranalyse) schreiben zu können. Leider laufen die Systemuhren (Hardwareclock) nicht sehr genau und haben bereits nach einigen Wochen relativ grosse Abweichungen zu verzeichnen. Vergisst man gelegentlich die Uhr zu stellen, kann man sich da schon einige Unschönheiten einfangen.

Die Rettung lautet NTP, das Network Time Protocol. Es dient, wie der Name schon sagt zur Zeitübertragung zwischen verschiedenen Rechnern über das Netzwerk. Das allein hilf natürlich noch nicht weiter… Aber es gibt relativ viele NTP Server im Internet, welche kostenlos mehr oder weniger aktuelle Uhrzeiten liefern, daruter auch Server, welche Ihre Uhrzeit direkt von Atomuhren beziehen! Über das NTP Protokoll kann man sich diese Server zu nutze machen, um automatisiert die uhrzeit auf dem einenem Rechner oder Server immer aktuell zu halten.

Unter Linux dient hierzu meist der NTP Client, welcher sich unter Debian Lenny sehr leicht mit der nachfolgenden Kommandozeile installieren lässt:

1
aptitude install ntp ntpdate

Konfiguriert wird der NTP Client über nur eine kleine Datei, die /etc/ntp.conf! Hier wird festgelegt, welche Zeitserver befragt werden können (nicht alle werden tatsächlich zeitserver für das System sein), ob und wie zeitdienste weitergegeben werden und wer den NTP Dienst noch konfigurieren darf.

/etc/ntp.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/etc/ntp.conf
# Pfad zum Driftfile
driftfile /var/lib/ntp/ntp.drift
 
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
 
# Stratum 1 Server
server ntp1.ptb.de
server ntp2.ptb.de
 
# NTP Server aus dem Debian Pool (Defaultserver bei Lenny)
server 0.debian.pool.ntp.org iburst dynamic
server 1.debian.pool.ntp.org iburst dynamic
server 2.debian.pool.ntp.org iburst dynamic
server 3.debian.pool.ntp.org iburst dynamic
 
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
 
# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

Nachdem die Konfiguration in etwa wie im obigem Beispiel aussieht (Kommentarzeilen etc. habe ich der Übersichtlichkeit halber größtenteils entfernt), sollte man einmal von Hand die zeit auf dem System setzen. Das geht recht einfach mit dem oben schon mit installiertem ntpdate.

1
ntpdate ntp1.ptb.de

Nun ist die zeit auf dem System aktuell, sofern der Zeitserver auch erreichbar war! Ein funktionierendes Netzwerk mitsamt der dazugehörigen Namensauflösung (DNS Dienste) setze ich hier einfach mal vorraus! Wir können den NTP Client nun starten, bzw. neustarten

1
/etc/init.d/ntp start

oder

1
/etc/init.d/ntp restart

Überprüfung der Zeitsync:
Direkt nach dem Start:

ntpq -c peers
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ptbtime1.ptb.de .PTB.            1 u    5   64    1   21.020   11.660   0.001
 ptbtime2.ptb.de .PTB.            1 u    4   64    1   20.856   11.789   0.001
 dnscache-frankf 192.53.103.104   2 u    1   64    1    6.087   12.967   0.891
 bind.ch         130.60.75.52     3 u    -   64    1    7.191   16.387   0.001
 phoenix.wzw.tum 192.53.103.108   2 u    1   64    1   22.817   18.651   0.001
 obelix.chown.dk 131.188.3.221    2 u    -   64    1    0.954   13.563   0.001

Nach einer Minute:

ntpq -c peers
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ptbtime1.ptb.de .PTB.            1 u   33   64   37   20.637   15.675   8.187
+ptbtime2.ptb.de .PTB.            1 u   32   64   37   20.806   24.409   8.137
+dnscache-frankf 192.53.103.104   2 u   28   64   37    4.869   16.740   6.471
-bind.ch         130.60.75.52     3 u   28   64   37    7.158   29.072   9.780
 phoenix.wzw.tum 192.53.103.108   2 u   23   64   37   21.779   19.059   8.523
+obelix.chown.dk 131.188.3.221    2 u   25   64   37    0.633   14.937   8.032

Erklärung relevanter Zeichen und Spalten:

* Der beste aller eingetragenen Server. Dieser Server wird als Referenz genommen.
+ akzeptable Qualität (sortiert nach absteigender Qualität)
# akzeptabler Zeitgeber, jedoch schlechter als mit “+”
- Schlechter Zeitgeber, meistens ausgenommen von der Zeitermittlung.
. Schlechter Zeitgeber, meistens ausgenommen von der Zeitermittlung.
x Server mit scheinbar falscher Zeit. Ausgenommen von der Zeitermittlung.

In der Spalte “st” steht der Stratum Wert, sprich wie viele Schritte der Server von der primären Zeitquelle (z.B. der Atomuhr) entfernt ist.

In der Spalte “when” steht wann der Zeitderver das letzte mal befragt wurde, analog dazu steht in der Spalte “poll” in welchem Zeitabstand der Server befragt wird.

Die Spalten “delay” “offset” und “jitter” stehen für die Netzlaufzeit, Abweichung und Streuung der Antworten des jeweiligen Servers in Millisekunden. Je weniger, desto besser natürlich.

Nach der Inbetriebnahme des NTP Dienstes, sollte man einige Stunden vergehen lassen, bevor man die Ergebnisse gegenprüft, da über das Driftfile ersteinmal eine gewisse Anzahl von Werten gesammelt werden müssen, bevor der NTP Dienst wirklich genau arbeiten kann.

Abschließend muss der NTP Dienst nur noch beim Systemstart gestartet werden. Dies erreicht man unter Debian wie folgt:

chkconfig --level 345 ntp on

Mit dieser Befehlszeile wird der NTP Dienst in den Runleveln 3,4 und 5 gestartet, was für 98% aller Systeme ausreichen sollte ;)!

P.S. Die Daten der ntp.conf gelten so für fast alle *nix Systeme, also auch HP UX, SUN Solaris sowie Linuxsysteme von SuSE und RedHat!

Weblinks zu Zeitserver Pools und Listen:

Linux Zeitsynchronisation – sanfte Angleichung mit chrony

Quelle: Wikimedia

Quelle: Wikimedia

Chrony gleicht die Systemzeit Schritt für Schritt an, nicht auf einen Schlag!
Die Systemzeit aktuell zu halten ist gerade bei Servern sehr wichtig! Die Gründe dafür habe ich ja bereits in meinem Artikel über den NTP Server beschrieben:

Viele Webserver (oder Rootserver) sind auf eine genau laufende Uhrzeit angewiesen, um aussagefähige Logfiles (Beispielsweise Zugriffsstatistika der Webseiten oder Systemlogfiles für die Fehleranalyse) schreiben zu können. Leider laufen die Systemuhren (Hardwareclock) nicht sehr genau und haben bereits nach einigen Wochen relativ grosse Abweichungen zu verzeichnen. Vergisst man gelegentlich die Uhr/Zeit zu stellen, kann man sich da schon einige Unschönheiten einfangen.

Leider hat der NTP Daemon einen unschönen Nachteil – bei Zeitdifferenzen aktualisiert er die Uhrzeit auf einen Schlag! Das mag meist keine Auswirkungen haben, jedoch wird es dann haarig, wenn man auf ein von der Zeit her sauberes Logfile angewiesen ist. Oder Cronjobs nun durch den “Zeitsprung” evtl. übersprungen werden, eben weil die Zeit auf einen Schlag korrigiert wurde, sei es auch nur ein 1min Sprung. Hier kann chrony Abhilfe schaffen. Chrony arbeitet lokal auf dem aktuell zu haltendem Server / System und passt bei Zeitdifferenzen zu den eingetragenen NTP Zeitserver Quellen die Zeit Stück für Stück sanft an. Logfiles sind so zumindest im chronologischem Ablauf wieder nachvollziehbar, Zeitgesteuerte Aufgaben, also Cronjobs, werden keinesfalls übergangen.

Für meinen Webserver habe ich mich jedenfalls für Chrony entschieden und meinen lokalen NTP Server deaktiviert – eben weil ich keinesfalls meine Backupjobs übersprungen wissen möchte. Chrony ist in den Repositorys von Debian und Ubuntu enthalten und lässt sich auf diesen Systemen entsprechend einfach auch installieren:

aptitude install chrony

Die Konfiguration von Chrony liegt unter /etc/chrony/chrony.cfg – hier brauch man, sofern man die Liste der Referenzzeitserver nicht anpassen möchte, nichts mehr dran machen, da passt eigentlich alles schon gut zusammen. Fehlt also nur noch:

/etc/init.d/chrony start

Fertig, die Zeitsynchronisation eures Debian Linux (oder welches Derivat ihr habt) sollte nun problemlos und dauerhaft laufen!

Weitere Links zum Thema:

VMware: Zeitsynchronisation in VM´s per Kommandozeile

VMware FirenlogoVMware: In einer virtuellen Maschine lässt sich mit der VMware Toolbox die Zeitsynchronisation ganz einfach mit einem kurzen Haken setzen. Leider gilt diese einfache Konfiguration der Zeitsynchronisation in der VMware nur für Windows Gastsysteme, oder Linux Systeme welche das X11 System nutzen. Fast alle meiner virtuellen Maschinen, welche ich unter VMware betreibe sind allerdings Linuxsysteme ohne X11 System.

Dennoch lässt sich hier die Zeitsynchronisation für die virtuelle Maschine aktivieren, sofern man weiß wie die aktuelle Einstellung ist. Mehr…