Viele Softwaresysteme, die von einer sorgfältigen Sequenzierung der Ereignisse abhängen, verlassen sich auf eine stabile, konsistente Systemuhr. System-Logs, die von den meisten Diensten geschrieben werden, umfassen einen Zeitstempel, mit dem Probleme in verschiedenen Komponenten eines Systems einfacher behoben werden können. Compute Engine-Instanzen sind zur Verwendung von NTP (Network Time Protocol) vorkonfiguriert, um die Systemuhren synchron zu halten.
NTP hält nicht nur die Serverzeit synchron, sondern ist auch im seltenen Fall einer Schaltsekunde nützlich. Mit einer Schaltsekunde wird die UTC-Zeit um eine Sekunde angepasst, um Änderungen bei der Erdumdrehung Rechnung zu tragen. Schaltsekunden treten nicht in regelmäßigen Abständen auf, weil die Geschwindigkeit der Erdrotation zwar schwankt, diese Schwankung jedoch aufgrund von klimatischen und geologischen Ereignissen ungleichmäßig ist. In der Vergangenheit haben Schaltsekunden eine Vielzahl von Diensten und Anwendungen im Web merklich beeinträchtigt. Mit NTP-Servern wird sichergestellt, dass alle Server bei einer Schaltsekunde dieselbe Zeit melden.
In diesem Dokument wird beschrieben, wie die NTP-Server auf den virtuellen Maschinen (VMs) konfiguriert werden, damit sie sich bei einer Schaltsekunde ordnungsgemäß verhalten.
Google NTP-Server und Verteilen von Schaltsekunden
Bei einem Unix-Betriebssystem werden Schaltsekunden häufig durch Wiederholung der letzten Sekunde des Tages implementiert. Dies kann zu Problemen bei Software führen, die erwartet, dass Zeitstempel immer nur erhöht werden. Um dieses Problem zu umgehen, "verteilen" die Zeitserver bei Google Cloud die zusätzliche Sekunde über vierundzwanzig Stunden hinweg – zwölf Stunden vor und zwölf Stunden nach dem Auftreten der Schaltsekunde –, sodass betroffene Computer die zusätzliche Sekunde nicht alle zur gleichen Zeit als wiederholten Zeitstempel sehen. Dadurch wird das Risiko bei Systemen verringert, die von einem konsistenten Zeitstempel abhängig sind. Es wird empfohlen, alle Compute Engine-VM-Instanzen für die Verwendung der internen Google NTP-Dienste zu konfigurieren.
NTP für eigene Instanzen konfigurieren
Google Cloud kann nicht vorhersagen, wie externe NTP-Dienste wie pool.ntp.org
mit der Schaltsekunde umgehen. Es wird empfohlen, möglichst keine externen NTP-Quellen in Verbindung mit Compute Engine-VMs zu verwenden. Noch schlimmer wäre die gleichzeitige Verwendung eines Google NTP-Dienstes und eines externen Dienstes. Dies könnte zu unvorhersehbaren Änderungen der Systemzeit führen. Die Verwendung von nur einer externen NTP-Quelle ist besser als eine Mischung. Externe NTP-Dienste, wie pool.ntp.org
verwenden jedoch wahrscheinlich Stepping zur Verarbeitung der Schaltsekunde. Daher sehen Ihre VMs möglicherweise einen wiederholten Zeitstempel.
Die sicherste Lösung besteht darin, die virtuellen Compute Engine-Maschinen so zu konfigurieren, dass nur ein einziger NTP-Server verwendet wird – der interne NTP-Server von Google. Mischen Sie keine externen NTP-Server mit Google NTP-Servern, da dies zu unerwartetem Verhalten führen kann. Weitere Informationen zum internen NTP-Server, der von Google bereitgestellt wird, finden Sie in den FAQ zu Google Public NTP.
Folgen Sie dieser Anleitung, um sicherzustellen, dass Ihre VMs ordnungsgemäß konfiguriert sind.
Linux (chrony)
Standardmäßig nutzen die meisten neuen Linux-Releases chrony
, um die NTP-Einstellungen und die Zeitsynchronisierung zu verwalten. Damit chrony
nur den internen NTP-Dienst verwendet, prüfen Sie die chrony
-Konfiguration und entfernen Sie externe NTP-Server:
Stellen Sie mit
ssh
eine Verbindung zu Ihrer Instanz her.Console
So stellen Sie über die Console eine SSH-Verbindung zur VM her:
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie für die VM, die Sie konfigurieren möchten, auf die Schaltfläche SSH.
gcloud
Führen Sie den folgenden Befehl aus, um über die Google Cloud CLI über SSH eine Verbindung zur VM herzustellen:
gcloud compute instances ssh VM_NAME
Ersetzen Sie
VM_NAME
durch den Namen der VM, zu der Sie eine Verbindung herstellen möchten.Führen Sie auf der Instanz
chronyc sources
aus, um den aktuellen Status Ihrer NTP-Konfiguration zu prüfen:$ chronyc sources
Die Ausgabe sieht dann ungefähr so aus:
210 Number of sources = 2 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* metadata.google.internal 2 6 377 4 -14us[ -28us] +/- 257us ^- 38.229.53.9 2 6 37 4 -283us[ -297us] +/- 28ms
Wenn ein einzelner Datensatz auf
metadata.google
odermetadata.google.internal
verweist, brauchen Sie keine Änderungen vorzunehmen. Wenn Sie mehrere Quellen sehen, gemischt zwischenmetadata.google
und einer öffentlichen Quelle wiepool.ntp.org
, aktualisieren Sie Ihre Quellen, um alle externen NTP-Server zu entfernen.In der Beispielausgabe gibt es zwei Datensätze. Der eine verweist auf
metadata.google.internal
und der andere auf eine externe Adresse. Da mehrere Quellen vorhanden sind, müssen Sie Ihre NTP-Server aktualisieren, um die Adresse38.229.53.9
zu entfernen, wie im nächsten Schritt beschrieben.Konfigurieren Sie Ihre NTP-Server zum Entfernen externer NTP-Server.
Bearbeiten Sie die Datei
/etc/chrony/chrony.conf
mit Ihrem bevorzugten Texteditor, um den zusätzlichen NTP-Server aus der Liste zu entfernen. Suchen Sie alle Zeilen, die mitserver external_source_ip_or_name
beginnen, und entfernen Sie sie.Nachdem Sie die
/etc/chrony/chrony.conf
-Datei bearbeitet haben, starten Sie denchrony
-Dienst neu. Der Befehl zum Neustarten kann je nach Linux-Distribution variieren, wie in den folgenden Beispielen gezeigt:sudo service chrony restart
sudo systemctl restart chrony
Prüfen Sie Ihre Konfiguration. Dazu führen Sie den Befehl
chronyc sources
noch einmal aus:$ chronyc sources
Die Ausgabe sollte in etwa so aussehen:
210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* metadata.google.internal 2 7 377 98 -1343ns[-1588ns] +/- 396us
Linux (ntpd)
Die meisten älteren Linux-Distributionen nutzen ntpd
, um ihre NTP-Einstellungen und die Zeitsynchronisierung zu verwalten. Damit ntpd
nur den internen NTP-Dienst verwendet, prüfen Sie die ntpd
-Konfiguration und entfernen Sie externe NTP-Server:
Stellen Sie mit
ssh
eine Verbindung zu Ihrer Instanz her.Console
So stellen Sie über die Console eine SSH-Verbindung zur VM her:
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie für die VM, die Sie konfigurieren möchten, auf die Schaltfläche SSH.
gcloud
Führen Sie den folgenden Befehl aus, um über die Google Cloud CLI über SSH eine Verbindung zur VM herzustellen:
gcloud compute instances ssh VM_NAME
Ersetzen Sie
VM_NAME
durch den Namen der VM, zu der Sie eine Verbindung herstellen möchten.Führen Sie auf der Instanz
ntpq -p
aus, um den aktuellen Status der NTP-Konfiguration zu prüfen:$ ntpq -p
Die Ausgabe sieht dann ungefähr so aus:
remote refid st t when poll reach delay offset jitter ============================================================================== *metadata.google 255.28.23.83 2 u 27 64 1 0.634 -2.537 2.285 *217.162.232.173 130.149.17.8 2 u 191 1024 176 79.245 3.589 27.454
Wenn ein einzelner Datensatz auf
metadata.google
odermetadata.google.internal
verweist, brauchen Sie keine Änderungen vorzunehmen. Bei mehreren Quellen, die aus einer Mischung vonmetadata.google
und einer öffentlichen Quelle wiepool.ntp.org
bestehen, müssen Sie die Quellen aktualisieren, um externe NTP-Server zu entfernen.In der Beispielausgabe gibt es zwei Datensätze, einer, der auf
metadata.google
verweist und ein weiterer, der auf eine externe Adresse verweist. Da es mehrere Quellen gibt, müssen Sie die NTP-Server aktualisieren, um die*217.162.232.173
-Adresse zu entfernen, wie im nächsten Schritt beschrieben.Konfigurieren Sie die NTP-Server so, dass externe Quellen entfernt werden.
Bearbeiten Sie zur Konfiguration der NTP-Server die Datei
/etc/ntp.conf
im Texteditor Ihrer Wahl. Suchen Sie den Abschnittservers
der Konfiguration und entfernen Sie alle nicht zu Google gehörenden NTP-Quellen, zum Beispiel:vim /etc/ntp.conf
# You do need to talk to an NTP server or two (or three). #server ntp.your-provider.example ... server metadata.google.internal iburst
Nachdem Sie die Datei
/etc/ntp.conf
bearbeitet haben, starten Sie den NTP-Dienst neu. Der Befehl zum Neustarten kann je nach Linux-Distribution variieren:sudo service ntp reload
Prüfen Sie Ihre Konfiguration. Dazu führen Sie den Befehl
ntpq -p
noch einmal aus:ntpq -p
remote refid st t when poll reach delay offset jitter ============================================================================== *metadata.google 255.28.23.83 2 u 27 64 1 0.634 -2.537 2.285
Windows
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie neben der Windows-Instanz, zu der Sie eine Verbindung herstellen möchten, auf die Schaltfläche RDP.
Klicken Sie nach der Anmeldung mit der rechten Maustaste auf das PowerShell-Symbol und wählen Sie Als Administrator ausführen aus.
Führen Sie an der Eingabeaufforderung den folgenden Befehl aus, um die aktuelle NTP-Konfiguration zu sehen:
w32tm /query /configuration
[Configuration] ... Type: NTP (Local) NtpServer: metadata.google.internal, ...
Wenn ein einzelner Datensatz auf
metadata.google
odermetadata.google.internal
verweist, brauchen Sie keine Änderungen vorzunehmen. Bei mehreren Quellen als Mischung vonmetadata.google
und einer öffentlichen Quelle müssen Sie den externen Server entfernen. Folgen Sie der Anleitung im Windows-Handbuch, um den NTP-Server zu konfigurieren.Um eine größtmögliche Softwarekompatibilität auf Windows-VMs zu gewährleisten, empfiehlt Google die Verwendung des gVNIC-Treibers, was eine NTP-Genauigkeit von weniger als einer Millisekunde mit
metadata.google
gewährleistet.Wenn Sie VirtIO mit Ihrer Windows-VM verwenden müssen, um eine Genauigkeit von weniger als einer Millisekunde zu erreichen, empfiehlt Google, dass Sie den Windows Time Service nicht verwenden (
w32tm
beenden und Registrierung aufheben).Beenden Sie den Windows Time Service:
net stop w32time
Entfernen Sie den Windows Time Service aus dem Registry:
w32tm /unregister
Nachdem der Windows Time Service beendet und aus der Registry entfernt wurde, installieren Sie den Meinberg NTP-Client.
Folgen Sie der Konfigurationsanleitung in der Meinberg-Dokumentation.
Konfigurieren Sie den NTP-Server für den Meinberg NTP-Client als
metadata.google.internal
.Warten Sie nach Abschluss der NTP-Konfiguration zwischen 5 und 15 Minuten, bis sich die Systemuhr in der VM mit dem NTP-Server stabilisiert hat.
Informationen dazu, warum w32tm nicht empfohlen wird, finden Sie in der Dokumentation zu bekannten Problemen
Schaltsekundenverteilung mit Systemen außerhalb von Google Cloud verwenden
Durch das Verteilen von Schaltsekunden bei Google NTP-Servern kann das Risiko bei der Wiederholung einer Sekunde bei zeitempfindlichen Systemen umgangen werden. Andere NTP-Dienste bieten möglicherweise ebenfalls für die meisten Softwaresysteme geeignete Lösungen zur Umgehung des Problems. Es ist jedoch wichtig, Google NTP-Dienste zum Verteilen von Schaltsekunden nicht mit öffentlichen NTP-Stepping-Diensten zu kombinieren.
Wenn Sie Geräte außerhalb von Google Cloud mit der verteilten Zeit synchronisieren möchten, können Sie für diese Geräte Google Public NTP verwenden. Google Public NTP verwendet dasselbe Verteilen von Schaltsekunden wie Compute Engine-VMs.
Nächste Schritte
- Weitere Informationen zur Compliance mit dem PCI-Datensicherheitsstandard
- Lesen Sie die FAQs zu Google Public NTP.