Configurare NTP su una VM


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, che aiuta a eseguire 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 utilizzare il Network Time Protocol (NTP).

Oltre a mantenere sincronizzata l'ora del server, NTP è utile nel raro caso di un secondo intercalare. Un secondo intercalare è un aggiustamento di un secondo apportato all'ora UTC per tenere conto delle variazioni della rotazione terrestre. I secondi intercalari non si verificano a intervalli di routine, perché la velocità di rotazione della Terra varia in modo irregolare in risposta a eventi climatici e geologici. I secondi intercalari precedenti hanno influito in modo significativo su una serie di servizi e applicazioni sul web. I server NTP contribuiscono a garantire che tutti i server segnalino la stessa ora durante l'evento di un secondo intercalare.

Questo documento descrive come configurare i server NTP sulle macchine virtuali (VM) in modo che si comportino correttamente in caso di secondo intercalare.

Server NTP di Google e ripartizione del secondo intercalare

I secondi intercalari per un sistema operativo Unix vengono in genere implementati ripetendo l'ultimo secondo della giornata. Ciò può causare problemi con il software che prevede che i timestamp aumentino sempre. Per risolvere questo problema, i server di sincronizzazione dell'ora di Google Cloud "spalmano" il secondo intercalare su 24 ore, 12 prima e 12 dopo l'evento del secondo intercalare, in modo che i computer non vedano il secondo intercalare tutto in una volta come un timestamp ripetuto. Ciò riduce il rischio nei sistemi che dipendono da un timestamp coerente. È consigliabile configurare tutte le istanze di macchine virtuali (VM) di Compute Engine in modo che utilizzino i servizi NTP interni di Google.

Configura NTP per le 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. Ancora peggio, l'utilizzo sia del servizio NTP di Google sia di un servizio esterno può comportare variazioni imprevedibili dell'ora di sistema. È preferibile utilizzare una sola origine NTP esterna piuttosto che una combinazione, ma i servizi NTP esterni, come pool.ntp.org, probabilmente utilizzeranno l'aggiustamento per gestire il secondo intercalare. Di conseguenza, le tue VM potrebbero visualizzare un timestamp ripetuto.

L'approccio più sicuro è configurare le VM Compute Engine in modo che utilizzino un unico server NTP, ovvero il server NTP interno fornito da Google. Non combinare server NTP esterni e server NTP Google, in quanto ciò potrebbe comportare un comportamento imprevisto. Per ulteriori informazioni sul server NTP interno fornito da Google, consulta le domande frequenti su Google Public NTP.

Per assicurarti che le VM siano configurate correttamente, segui queste istruzioni.

Linux (chrony)

Per impostazione predefinita, la maggior parte delle nuove versioni 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.

  1. Utilizza ssh per connetterti all'istanza.

    Console

    Per utilizzare la console per connetterti alla VM tramite SSH, segui questi passaggi:

    1. Vai alla pagina Istanze VM nella console Google Cloud .

      Vai a Istanze VM

    2. Fai clic sul pulsante SSH per la VM che vuoi configurare.

      Pulsante SSH.

    gcloud

    Per utilizzare Google Cloud CLI per connetterti alla VM tramite SSH, esegui il comando seguente:

    gcloud compute instances ssh VM_NAME
    

    Sostituisci VM_NAME con il nome della VM a cui ti stai connettendo.

  2. 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 o metadata.google.internal, non devi apportare alcuna modifica. Se visualizzi più fonti, miste tra metadata.google e una fonte pubblica come pool.ntp.org, aggiorna le fonti per rimuovere eventuali server NTP esterni.

    Nell'output di esempio, sono presenti due record, uno che punta a metadata.google.internal e l'altro a un indirizzo esterno. Poiché esistono più origini, aggiornerai i server NTP per rimuovere l'indirizzo 38.229.53.9, come descritto nel passaggio successivo.

  3. Configura i server NTP per 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 con server external_source_ip_or_name e rimuovile.

    Dopo aver modificato il file /etc/chrony/chrony.conf, riavvia il servizio chrony. Il comando per il riavvio potrebbe variare a seconda della distribuzione Linux, come mostrato negli esempi seguenti:

    sudo service chrony restart
    
    sudo systemctl restart chrony
    
  4. 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.

  1. Utilizza ssh per connetterti all'istanza.

    Console

    Per utilizzare la console per connetterti alla VM tramite SSH, segui questi passaggi:

    1. Vai alla pagina Istanze VM nella console Google Cloud .

      Vai a Istanze VM

    2. Fai clic sul pulsante SSH per la VM che vuoi configurare.

      Pulsante SSH.

    gcloud

    Per utilizzare Google Cloud CLI per connetterti alla VM tramite SSH, esegui il comando seguente:

    gcloud compute instances ssh VM_NAME
    

    Sostituisci VM_NAME con il nome della VM a cui ti stai connettendo.

  2. 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 o metadata.google.internal, non devi apportare alcuna modifica. Se visualizzi più origini, miste tra metadata.google e un'origine pubblica come pool.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 l'altro 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.

  3. Configura i server NTP per rimuovere le origini esterne.

    Per configurare i server NTP, modifica il file /etc/ntp.conf utilizzando il tuo editor di testo preferito. Trova la sezione servers 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 può variare in base alla distribuzione Linux:

    sudo service ntp reload
    
  4. 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

  1. Vai alla pagina Istanze VM nella console Google Cloud .

    Vai a Istanze VM

  2. Fai clic sul pulsante RDP accanto all'istanza Windows a cui vuoi connetterti.

    Pulsante SSH.

  3. Dopo aver eseguito l'accesso, fai clic con il tasto destro del mouse sull'icona di PowerShell e seleziona Esegui come amministratore.

    L'icona di PowerShell.

  4. Quando viene caricato il prompt dei comandi, 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 o metadata.google.internal, non devi apportare alcuna modifica. Se vedi più origini, miste tra metadata.google e un'origine pubblica, devi rimuovere il server esterno. Segui la guida di Windows per configurare il server NTP.

  5. Per garantire la compatibilità software più diffusa sulle VM Windows, Google consiglia di utilizzare il driver gVNIC per garantire la precisione NTP al di sotto del 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 il servizio Windows Time (interrompi e annulla la registrazione di w32tm).

    1. Arresta il servizio Windows Time:

      net stop w32time
      
    2. Rimuovi il servizio Windows Time dal registro:

      w32tm /unregister
      
    3. Dopo aver arrestato e rimosso il servizio Windows Time dal registro, installa il client NTP Meinberg.

      Segui le istruzioni di configurazione fornite nella documentazione di Meinberg.

    4. Configura il server NTP per il client NTP 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 l'utilizzo di w32tm non è consigliato, consulta la documentazione relativa ai problemi noti.

Utilizzo della propagazione del salto con sistemi esterni a Google Cloud

La funzionalità di ripartizione del secondo intercalare dei server NTP di Google è un modo pratico per gestire il rischio connesso alla riproduzione di un secondo su sistemi sensibili al tempo. Altri servizi NTP potrebbero fornire una soluzione alternativa accettabile per la maggior parte dei sistemi software. Tuttavia, è importante non combinare i servizi NTP di ripartizione del secondo intercalare di Google con i servizi NTP pubblici di aggiustamento.

Per sincronizzare i dispositivi al di fuori di Google Cloud con l'ora ripartita, puoi utilizzare Google Public NTP per questi dispositivi. Google Public NTP utilizza lo stesso spalmatura del secondo intercalare fornito alle VM Compute Engine.

Passaggi successivi