Molti sistemi software che dipendono da un'attenta sequenza di eventi si basano su un orologio di sistema stabile e coerente. I log di sistema scritti dalla maggior parte dei servizi includono un timestamp, utile per il debug dei problemi che si verificano tra i vari componenti del sistema. Per mantenere sincronizzati gli orologi di sistema, le istanze di Compute Engine sono preconfigurate per l'utilizzo del protocollo NTP (Network Time Protocol).
Oltre a mantenere sincronizzata l'ora del server, NTP è utile nel raro caso di un secondo intercalare. Un secondo intercalare è una modifica di un secondo apportata all'ora UTC per tenere conto delle variazioni della rotazione della Terra. I secondi intercalari non si verificano a intervalli di routine, perché la velocità di rotazione della Terra varia in modo irregolare in risposta agli eventi climatici e geologici. I secondi intercalari precedenti hanno notevolmente influito su diversi servizi e applicazioni sul web. I server NTP contribuiscono ad assicurare che tutti i server riportino lo stesso orario nel caso di un secondo intercalare.
Questo documento descrive come configurare i server NTP sulle tue macchine virtuali (VM) in modo che funzionino correttamente in caso di secondo intercalare.
e i server Google NTP
I secondi intercalari di un sistema operativo Unix vengono in genere implementati ripetendo l'ultimo secondo della giornata. Ciò può causare problemi al software che prevede un aumento dei timestamp. Per risolvere il problema, i server temporali di Google Cloud "smear" il secondo extra in ventiquattro ore (dodici prima e dodici dopo il secondo intercalare) in modo che i computer non vedano il secondo in più contemporaneamente come timestamp ripetuto. In questo modo ridurrai il rischio nei sistemi che dipendono da un timestamp coerente. È consigliabile configurare tutte le istanze di macchine virtuali (VM) di Compute Engine per l'utilizzo dei servizi Google NTP interni.
Configura NTP per le tue istanze
Google Cloud non può prevedere come i servizi NTP esterni, come pool.ntp.org
, gestiranno il secondo intercalare. Se possibile, ti consigliamo di non utilizzare
origini NTP esterne con le VM di Compute Engine. Peggio ancora, l'utilizzo sia del servizio NTP di Google che di un servizio esterno può comportare cambiamenti imprevedibili nell'orario del sistema. È preferibile utilizzare un'unica fonte NTP esterna anziché un mix, ma i servizi NTP esterni, come pool.ntp.org
, probabilmente utilizzeranno lo step per gestire il secondo intercalare. Di conseguenza,
le VM potrebbero visualizzare un timestamp ripetuto.
L'approccio più sicuro consiste nel configurare le VM di Compute Engine in modo che utilizzino un unico server NTP, il server NTP interno fornito da Google. Non combinare server NTP esterni e server NTP di Google perché ciò potrebbe causare comportamenti imprevisti.
Per assicurarti che le VM siano configurate correttamente, segui queste istruzioni.
Linux (cronologia)
Per impostazione predefinita, la maggior parte delle nuove release di Linux utilizza chrony
per gestire le impostazioni NTP e la sincronizzazione dell'ora. Per assicurarti che chrony
utilizzi solo il servizio NTP interno, controlla la configurazione di chrony
e rimuovi i server NTP esterni.
Usa
ssh
per connetterti all'istanza.Console
Per utilizzare la console per connetterti alla VM tramite SSH:
Vai alla pagina Istanze VM nella console Google Cloud.
Fai clic sul pulsante SSH per la VM da configurare.
gcloud
Per utilizzare Google Cloud CLI per connetterti alla VM mediante SSH, esegui questo comando:
gcloud compute instances ssh VM_NAME
Sostituisci
VM_NAME
con il nome della VM a cui ti stai connettendo.Sulla tua istanza, esegui
chronyc sources
per controllare lo stato attuale della configurazione NTP:$ chronyc sources
L'output è simile al seguente:
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
Se vedi un singolo record che punta a
metadata.google
ometadata.google.internal
, non devi apportare alcuna modifica. Se vedi più origini, combinate trametadata.google
e una sorgente pubblica comepool.ntp.org
, aggiorna le origini per rimuovere eventuali server NTP esterni.Nell'output di esempio sono presenti due record, uno che punta a
metadata.google.internal
e un altro che punta a un indirizzo esterno. Poiché esistono più origini, devi aggiornare i server NTP per rimuovere l'indirizzo38.229.53.9
, come descritto nel passaggio successivo.Configurare i server NTP in modo da rimuovere i server NTP esterni.
Per rimuovere il server NTP aggiuntivo dall'elenco, modifica il file
/etc/chrony/chrony.conf
utilizzando il tuo editor di testo preferito. Trova tutte le righe che iniziano conserver external_source_ip_or_name
e rimuovile.Dopo aver modificato il file
/etc/chrony/chrony.conf
, riavvia il serviziochrony
. Il comando per riavviare potrebbe variare a seconda della distribuzione Linux, come mostrato nei seguenti esempi:sudo service chrony restart
sudo systemctl restart chrony
Verifica la configurazione eseguendo di nuovo il comando
chronyc sources
:$ chronyc sources
L'output dovrebbe essere simile al seguente:
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)
La maggior parte delle distribuzioni Linux meno recenti utilizza
ntpd
per gestire le impostazioni NTP
e la sincronizzazione dell'ora. Per assicurarti che ntpd
utilizzi solo il servizio NTP interno, controlla la configurazione di ntpd
e rimuovi i server NTP esterni.
Usa
ssh
per connetterti all'istanza.Console
Per utilizzare la console per connetterti alla VM tramite SSH:
Vai alla pagina Istanze VM nella console Google Cloud.
Fai clic sul pulsante SSH per la VM da configurare.
gcloud
Per utilizzare Google Cloud CLI per connetterti alla VM mediante SSH, esegui questo comando:
gcloud compute instances ssh VM_NAME
Sostituisci
VM_NAME
con il nome della VM a cui ti stai connettendo.Sulla tua istanza, esegui
ntpq -p
per controllare lo stato attuale della configurazione NTP:$ ntpq -p
L'output è simile al seguente:
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
Se vedi un singolo record che punta a
metadata.google
ometadata.google.internal
, non devi apportare alcuna modifica. Se vedi più origini, combinate trametadata.google
e una sorgente pubblica comepool.ntp.org
, devi aggiornare le origini per rimuovere eventuali server NTP esterni.Nell'output di esempio sono presenti due record, uno che punta a
metadata.google
e un altro che punta a un indirizzo esterno. Poiché esistono più origini, devi aggiornare i server NTP per rimuovere l'indirizzo*217.162.232.173
, come descritto nel passaggio successivo.Configura i server NTP per rimuovere le sorgenti esterne.
Per configurare i server NTP, modifica il file
/etc/ntp.conf
utilizzando il tuo editor di testo preferito. Trova la sezioneservers
della configurazione e rimuovi tutte le origini NTP non Google, ad esempio: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
Dopo aver modificato il file
/etc/ntp.conf
, riavvia il servizio NTP. Il comando per riavviare potrebbe variare in base alla distribuzione Linux:sudo service ntp reload
Verifica la configurazione eseguendo di nuovo il comando
ntpq -p
: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
Vai alla pagina Istanze VM nella console Google Cloud.
Fai clic sul pulsante RDP accanto all'istanza Windows a cui vuoi connetterti.
Dopo aver eseguito l'accesso, fai clic con il tasto destro del mouse sull'icona di PowerShell e seleziona Esegui come amministratore.
Quando viene caricata la richiesta di comando, esegui questo comando per visualizzare la configurazione NTP attuale:
w32tm /query /configuration
[Configuration] ... Type: NTP (Local) NtpServer: metadata.google.internal, ...
Se vedi un singolo record che punta a
metadata.google
ometadata.google.internal
, non devi apportare alcuna modifica. Se vedi più origini, combinate trametadata.google
e un'origine pubblica, devi rimuovere il server esterno. Segui la guida di Windows per configurare il tuo server NTP.Per garantire la compatibilità più diffusa del software sulle VM Windows, Google consiglia di utilizzare il driver gVNIC per garantire un'accuratezza NTP inferiore al millisecondo con
metadata.google
.Se devi utilizzare VirtIO con la tua VM Windows, per ottenere una precisione inferiore al millisecondo con i server NTP, Google consiglia di non utilizzare Windows Time Service (interrompi e annulla la registrazione di
w32tm
).Interrompi il servizio dell'ora di Windows:
net stop w32time
Rimuovi il servizio ora di Windows dal registro:
w32tm /unregister
Dopo che il servizio Windows Time è stato interrotto e rimosso dal registro, installa il client NTP di Meinberg.
Segui le istruzioni di configurazione fornite nella documentazione di Meinberg.
Configura il server NTP per il client NTP di Meinberg come
metadata.google.internal
.Dopo aver completato la configurazione di NTP, attendi 5-15 minuti affinché l'orologio di sistema nella VM si stabilizzi con il server NTP.
Per informazioni sul motivo per cui non è consigliato utilizzare w32tm, consulta la documentazione relativa ai problemi noti.
Utilizzare il leap smearing con sistemi esterni a Google Cloud
La funzionalità di smearing dei server NTP di Google è un modo conveniente per gestire il rischio associato alla riproduzione di un secondo sui sistemi sensibili al tempo. Altri servizi NTP possono fornire una soluzione accettabile per la maggior parte dei sistemi software. Tuttavia, è importante non combinare i servizi NTP superflui di Google con i servizi di passi NTP pubblici.
Per sincronizzare i dispositivi all'esterno di Google Cloud per ridurre il tempo, puoi utilizzare Google Public NTP per questi dispositivi. La NTP pubblica di Google utilizza la stessa striscia nel secondo intercalare fornita alle VM di Compute Engine.
Passaggi successivi
- Scopri di più sulla conformità allo standard di sicurezza dei dati PCI.
- Consulta le Domande frequenti su Google Public NTP.