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 Sie NTP-Server auf Ihren VMs konfigurieren, 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 Clouddie 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 VM-Instanzen von Compute Engine 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 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. Dies führt dazu, dass virtuelle Maschinen möglicherweise einen wiederholten Zeitstempel sehen.
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 von Google finden Sie in den FAQs zu Google Public NTP.
Beachten Sie die folgende Anleitung für eine ordnungsgemäße Konfiguration Ihrer VMs.
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 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 eine SSH-Verbindung zur VM herzustellen: - gcloud compute instances ssh VM_NAME - Ersetzen Sie - VM_NAMEdurch den Namen der VM, zu der Sie eine Verbindung herstellen möchten.
- Führen Sie auf der Instanz - chronyc sourcesaus, 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.googleoder- metadata.google.internalverweist, brauchen Sie keine Änderungen vorzunehmen. Wenn Sie mehrere Quellen sehen, gemischt zwischen- metadata.googleund einer öffentlichen Quelle wie- pool.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 mehrere Quellen vorhanden sind, müssen Sie Ihre NTP-Server aktualisieren, um die Adresse- 38.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 mit- server external_source_ip_or_namebeginnen, und entfernen Sie sie.- Nachdem Sie die - /etc/chrony/chrony.conf-Datei bearbeitet haben, starten Sie den- chrony-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 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 - ssheine 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 eine SSH-Verbindung zur VM herzustellen: - gcloud compute instances ssh VM_NAME - Ersetzen Sie - VM_NAMEdurch den Namen der VM, zu der Sie eine Verbindung herstellen möchten.
- Führen Sie auf der Instanz - ntpq -paus, 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.googleoder- metadata.google.internalverweist, brauchen Sie keine Änderungen vorzunehmen. Bei mehreren Quellen, die aus einer Mischung von- metadata.googleund einer öffentlichen Quelle wie- pool.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 Abschnitt- serversder 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 iburst- Nachdem 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 reload
- Prüfen Sie Ihre Konfiguration. Dazu führen Sie den Befehl - ntpq -pnoch 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.googleoder- metadata.google.internalverweist, brauchen Sie keine Änderungen vorzunehmen. Bei mehreren Quellen als Mischung von- metadata.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 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 die Verwendung von w32tm nicht empfohlen wird, 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