Viele Softwaresysteme, die von einer sorgfältigen Sequenzierung der Ereignisse abhängen, verlassen sich auf eine stabile, konsistente Systemuhr. Diese Systeme verwenden häufig Systemprotokolle mit Zeitstempeln, um die Zeitsynchronisierung zu gewährleisten und Probleme zu beheben, sobald sie auftreten. Um die Systemuhren synchron zu halten, sind Compute Engine-Instanzen zur Verwendung von NTP (Network Time Protocol) vorkonfiguriert. NTP ist eine kombinierte Lösung aus Hardware und Software zur Zeitsynchronisierung.
NTP ist auch im seltenen Fall einer Schaltsekunde nützlich. Dabei 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 Sie NTP-Server auf Ihren Compute-Instanzen konfigurieren, einschließlich der richtigen Verarbeitung von Schaltsekunden.
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 Clouddie zusätzliche Sekunde über 24 Stunden hinweg – 12 Stunden vor und 12 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. Wir empfehlen, alle Ihre Compute-Instanzen so zu konfigurieren, dass die internen Google NTP-Dienste verwendet werden.
NTP für eigene Instanzen konfigurieren
Google Cloud kann nicht vorhersagen, wie externe NTP-Dienste wie pool.ntp.org mit Schaltsekunden umgehen. Wir empfehlen dringend, keine externen NTP-Quellen für Ihre Compute-Instanzen zu verwenden. Wenn Sie sowohl den NTP-Dienst von Google als auch einen externen Dienst verwenden, kann dies 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 häufig Stepping zur Verarbeitung von Schaltsekunden. Dies führt dazu, dass Instanzen möglicherweise wiederholte Zeitstempel sehen.
Die sicherste Lösung besteht darin, die Compute-Instanzen so zu konfigurieren, dass nur ein einziger NTP-Server verwendet wird – der interne NTP-Server von Google. Weitere Informationen zum internen NTP-Server von Google finden Sie in den FAQs zu Google Public NTP.
Beachten Sie die folgenden Anleitungen, damit die Compute-Instanzen ordnungsgemäß konfiguriert werden.
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
ssheine Verbindung zu Ihrer Compute-Instanz her.Console
So stellen Sie über die Konsole eine SSH-Verbindung zur Compute-Instanz her:
Rufen Sie in der Google Cloud -Console die Seite VM-Instanzen auf.
Klicken Sie für die Instanz, die Sie konfigurieren möchten, auf die Schaltfläche SSH.
gcloud
Führen Sie den folgenden Befehl aus, um über die Google Cloud CLI eine SSH-Verbindung zur Compute-Instanz herzustellen:
gcloud compute instances ssh INSTANCE_NAME
Ersetzen Sie
INSTANCE_NAMEdurch den Namen der Instanz, zu der Sie eine Verbindung herstellen.Führen Sie auf der Instanz
chronyc sourcesaus, um den aktuellen Status Ihrer NTP-Konfiguration zu prüfen:$ chronyc sourcesDie 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.googleodermetadata.google.internalverweist, brauchen Sie keine Änderungen vorzunehmen. Wenn Sie mehrere Quellen sehen, gemischt zwischenmetadata.googleund 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, einer, der auf
metadata.google.internalverweist und ein weiterer, der auf eine externe Adresse verweist. Da es mehrere Quellen gibt, müssen Sie Ihre NTP-Server aktualisieren, um die Adresse38.229.53.9zu entfernen, wie im nächsten Schritt beschrieben.Konfigurieren Sie Ihre NTP-Server zum Entfernen externer NTP-Server.
Bearbeiten Sie die Datei
/etc/chrony/chrony.confmit Ihrem bevorzugten Texteditor, um den zusätzlichen NTP-Server aus der Liste zu entfernen. Suchen Sie alle Zeilen, die mitserver external_source_ip_or_namebeginnen, 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 sourcesnoch einmal aus:$ chronyc sourcesDie 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
ssheine Verbindung zu Ihrer Compute-Instanz her.Console
So stellen Sie über die Konsole eine SSH-Verbindung zur Compute-Instanz her:
Rufen Sie in der Google Cloud -Console die Seite VM-Instanzen auf.
Klicken Sie für die Instanz, die Sie konfigurieren möchten, auf die Schaltfläche SSH.
gcloud
Führen Sie den folgenden Befehl aus, um über die Google Cloud CLI eine SSH-Verbindung zur Compute-Instanz herzustellen:
gcloud compute instances ssh INSTANCE_NAME
Ersetzen Sie
INSTANCE_NAMEdurch den Namen der Instanz, zu der Sie eine Verbindung herstellen.Führen Sie auf der Instanz
ntpq -paus, um den aktuellen Status der NTP-Konfiguration zu prüfen:$ ntpq -pDie 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.googleodermetadata.google.internalverweist, brauchen Sie keine Änderungen vorzunehmen. Bei mehreren Quellen, die aus einer Mischung vonmetadata.googleund einer öffentlichen Quelle wiepool.ntp.orgbestehen, müssen Sie die Quellen aktualisieren, um externe NTP-Server zu entfernen.In der Beispielausgabe gibt es zwei Datensätze, einer, der auf
metadata.googleverweist 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.confim Texteditor Ihrer Wahl. Suchen Sie den Abschnittserversder Konfiguration und entfernen Sie alle nicht zu Google gehörenden NTP-Quellen, z. B.: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 iburstNachdem Sie die Datei
/etc/ntp.confbearbeitet haben, starten Sie den NTP-Dienst neu. Der Befehl zum Neustarten kann je nach Linux-Distribution variieren:sudo service ntp reloadPrüfen Sie Ihre Konfiguration. Dazu führen Sie den Befehl
ntpq -pnoch einmal aus:ntpq -premote 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.googleodermetadata.google.internalverweist, brauchen Sie keine Änderungen vorzunehmen. Bei mehreren Quellen als Mischung vonmetadata.googleund 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.googlegewä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 (
w32tmbeenden und Registrierung aufheben).Beenden Sie den Windows Time Service:
net stop w32timeEntfernen Sie den Windows Time Service aus dem Registry:
w32tm /unregisterNachdem 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 wir die Verwendung von
w32tmnicht empfehlen, finden Sie in der Dokumentation zu bekannten Problemen.
Schaltsekundenverteilung mit Systemen außerhalb von Google Cloudverwenden
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. Wichtig ist jedoch, dass Sie Google NTP-Dienste, die Schaltsekunden verteilen, nicht mit öffentlichen NTP-Stepping-Diensten zusammen verwenden.
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 Verteilungsverfahren für Schaltsekunden wie Compute Engine-VMs.
Nächste Schritte
- Weitere Informationen zur Compliance mit dem PCI-Datensicherheitsstandard
- FAQs zu Google Public NTP