Molti sistemi software che dipendono da una sequenza accurata di eventi si basano su un orologio di sistema stabile e coerente. Questi sistemi spesso utilizzano i log di sistema con timestamp per garantire la sincronizzazione dell'ora e risolvere i problemi man mano che si verificano. Per mantenere sincronizzati gli orologi di sistema, le istanze Compute Engine sono preconfigurate per utilizzare il protocollo NTP (Network Time Protocol), una soluzione in bundle di hardware e software di sincronizzazione dell'ora.
NTP è utile anche nel raro caso di un secondo intercalare, ovvero un aggiustamento di un secondo apportato all'ora UTC per tenere conto delle variazioni nella rotazione della Terra. I secondi intercalari non si verificano a intervalli regolari, perché la velocità di rotazione della Terra varia in modo irregolare in risposta a eventi climatici e geologici. In passato, i secondi intercalari hanno avuto un impatto significativo su una varietà di servizi e applicazioni sul web. I server NTP contribuiscono ad assicurare che tutti i server registrino lo stesso orario in caso di un secondo intercalare.
Questo documento descrive come configurare i server NTP sulle istanze di calcolo, incluso il corretto gestione dei secondi intercalari.
Server NTP Google e secondo spalmato
I secondi intercalari per un sistema operativo Unix vengono comunemente implementati ripetendo l'ultimo secondo del giorno. Ciò può causare problemi con software che si aspetta un valore dei timestamp sempre crescente. Per ovviare a questo problema, i server di riferimento ora Google Cloud "spalmano" il secondo in più su 24 ore, ovvero 12 prima e 12 dopo l'evento del secondo intercalare, in modo che i computer non vedano il secondo tutto in una volta come un timestamp ripetuto. In questo modo riduci il rischio nei sistemi che dipendono da un timestamp coerente. Ti consigliamo di configurare tutte le istanze di calcolo in modo che utilizzino i servizi NTP interni di Google.
Configura NTP per le istanze
Google Cloud non può prevedere in che modo i servizi NTP esterni, come
pool.ntp.org, gestiscono i secondi intercalari. Ti consigliamo vivamente di non utilizzare
origini NTP esterne con le istanze di calcolo. Se utilizzi sia il servizio NTP di Google sia un servizio esterno, puoi causare modifiche imprevedibili dell'ora di sistema. È preferibile utilizzare una sola origine NTP esterna rispetto a una combinazione, ma è probabile che i servizi NTP esterni, come pool.ntp.org, gestiscano il secondo intercalare tutto in una volta. Di conseguenza, le tue istanze potrebbero riscontrare timestamp ripetuti.
L'approccio più sicuro è configurare le istanze di calcolo per utilizzare un singolo server NTP, ovvero il server NTP interno fornito da Google. Per saperne di più sul server NTP interno fornito da Google, consulta le Domande frequenti su Google Public NTP.
Per assicurarti che le istanze di Compute siano configurate correttamente, segui queste istruzioni.
Linux (chrony)
Per impostazione predefinita, la maggior parte delle nuove release di Linux utilizza chrony per gestire le impostazioni NTP e la sincronizzazione dell'orario. Per assicurarti che chrony utilizzi solo il servizio NTP interno, controlla la configurazione di chrony e rimuovi i server NTP esterni.
Utilizza
sshper connetterti all'istanza di computing.Console
Per utilizzare la console per connetterti all'istanza di calcolo tramite SSH, segui questi passaggi:
Nella console Google Cloud , vai alla pagina Istanze VM.
Fai clic sul pulsante SSH per l'istanza che vuoi configurare.
gcloud
Per utilizzare Google Cloud CLI per connetterti all'istanza di calcolo tramite SSH, esegui questo comando:
gcloud compute instances ssh INSTANCE_NAME
Sostituisci
INSTANCE_NAMEcon il nome dell'istanza a cui ti stai connettendo.Nell'istanza, esegui
chronyc sourcesper controllare lo stato attuale della configurazione NTP:$ chronyc sourcesL'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 rimanda a
metadata.googleometadata.google.internal, non devi apportare alcuna modifica. Se vedi più origini, con una combinazione dimetadata.googlee un'origine pubblica comepool.ntp.org, aggiorna le origini per rimuovere tutti i server NTP esterni.Nell'output di esempio sono presenti due record, uno che rimanda a
metadata.google.internale un altro che rimanda 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.Configura 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.confutilizzando il tuo editor di testo preferito. Trova tutte le righe che iniziano conserver external_source_ip_or_namee rimuovile.Dopo aver modificato il file
/etc/chrony/chrony.conf, riavvia il serviziochrony. Il comando di riavvio 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 sourcesL'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 precedenti utilizza ntpd per gestire le impostazioni NTP e la sincronizzazione dell'orario. Per assicurarti che ntpd utilizzi solo il servizio NTP interno, controlla la configurazione di ntpd e rimuovi i server NTP esterni.
Utilizza
sshper connetterti all'istanza di computing.Console
Per utilizzare la console per connetterti all'istanza di calcolo tramite SSH, segui questi passaggi:
Nella console Google Cloud , vai alla pagina Istanze VM.
Fai clic sul pulsante SSH per l'istanza che vuoi configurare.
gcloud
Per utilizzare Google Cloud CLI per connetterti all'istanza di calcolo tramite SSH, esegui questo comando:
gcloud compute instances ssh INSTANCE_NAME
Sostituisci
INSTANCE_NAMEcon il nome dell'istanza a cui ti stai connettendo.Nell'istanza, esegui
ntpq -pper controllare lo stato attuale della configurazione NTP:$ ntpq -pL'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 rimanda a
metadata.googleometadata.google.internal, non devi apportare alcuna modifica. Se vedi più origini, con una combinazione dimetadata.googlee un'origine pubblica comepool.ntp.org, devi aggiornare le origini per rimuovere tutti i server NTP esterni.Nell'output di esempio sono presenti due record, uno che rimanda a
metadata.googlee un altro che rimanda 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 in modo da rimuovere le origini esterne.
Per configurare i server NTP, modifica il file
/etc/ntp.confutilizzando il tuo editor di testo preferito. Individua la sezioneserversdella 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 iburstDopo aver modificato il file
/etc/ntp.conf, riavvia il servizio NTP. Il comando per il riavvio può variare in base alla distribuzione Linux:sudo service ntp reloadVerifica la configurazione eseguendo di nuovo il comando
ntpq -p: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
Nella console Google Cloud , vai alla pagina Istanze VM.
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 PowerShell e seleziona Esegui come amministratore.
Quando viene caricato il prompt dei comandi, esegui questo comando per visualizzare la configurazione NTP corrente:
w32tm /query /configuration[Configuration] ... Type: NTP (Local) NtpServer: metadata.google.internal, ...
Se vedi un singolo record che rimanda a
metadata.googleometadata.google.internal, non devi apportare alcuna modifica. Se vedi più origini, con una combinazione dimetadata.googlee un'origine pubblica, devi rimuovere il server esterno. Segui la guida di Windows per configurare il server NTP.Per garantire la compatibilità software più diffusa nelle 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 VM Windows, per ottenere un'accuratezza inferiore al millisecondo con i server NTP, Google consiglia di non utilizzare il servizio di riferimento orario di Windows (arresta e annulla la registrazione di
w32tm).Arresta il servizio di riferimento orario di Windows:
net stop w32timeRimuovi il servizio di riferimento orario di Windows dal registro:
w32tm /unregisterDopo aver interrotto il servizio di riferimento orario di Windows e averlo rimosso dal registro, installa il client NTP Meinberg.
Segui le istruzioni di configurazione riportate nella documentazione di Meinberg.
Configura il server NTP per il client NTP Meinberg come
metadata.google.internal.Dopo aver completato la configurazione di NTP, attendi da 5 a 15 minuti affinché l'orologio di sistema della VM si stabilizzi con il server NTP.
Per informazioni sul motivo per cui non consigliamo l'utilizzo di
w32tm, consulta la documentazione relativa ai problemi noti.
Utilizzo del secondo spalmato con sistemi esterni a Google Cloud
La funzionalità secondo spalmato dei server NTP di Google è un modo pratico per gestire il rischio associato alla ripetizione di un secondo in sistemi sensibili all'orario. Altri servizi NTP potrebbero fornire una soluzione accettabile per la maggior parte dei sistemi software. Tuttavia, è importante non combinare i servizi NTP di Google con secondo spalmato con i servizi NTP pubblici a singolo step.
Per sincronizzare i dispositivi al di fuori di Google Cloud all'orario con secondo spalmato, puoi utilizzare Google Public NTP. Google Public NTP utilizza la stessa spalmatura del secondo intercalare fornita alle VM Compute Engine.
Passaggi successivi
- Scopri di più sulla conformità allo standard PCI DSS (Payment Card Industry Data Security Standard).
- Consulta le Domande frequenti su Google Public NTP.