Configure o NTP numa VM

Muitos sistemas de software que dependem de uma sequenciação cuidadosa de eventos baseiam-se num relógio do sistema estável e consistente. Estes sistemas usam frequentemente registos do sistema com indicações de tempo para garantir a sincronização de tempo e depurar problemas à medida que ocorrem. Para ajudar a manter os relógios do sistema sincronizados, as instâncias do Compute Engine estão pré-configuradas para usar o protocolo de tempo de rede (NTP), uma solução integrada de hardware e software de sincronização de tempo.

O NTP também é útil no caso raro de um segundo intercalar, um ajuste de um segundo feito à hora UTC para ter em conta as alterações na rotação da Terra. Os segundos intercalares não ocorrem a intervalos de rotina, porque a velocidade de rotação da Terra varia de forma irregular em resposta a eventos climáticos e geológicos. Os segundos intercalares anteriores afetaram visivelmente uma variedade de serviços e aplicações na Web. Os servidores NTP ajudam a garantir que todos os servidores comunicam a mesma hora durante o evento de um segundo intercalar.

Este documento descreve como configurar servidores NTP nas suas instâncias de computação, incluindo o processamento adequado de segundos intercalares.

Servidores NTP da Google e desfasamento de segundos intercalares

Os segundos intercalares para um sistema operativo Unix são normalmente implementados repetindo o último segundo do dia. Isto pode causar problemas com software que espera que as datas/horas aumentem sempre. Para contornar este problema, os servidores de tempo distribuem Google Cloud o segundo adicional ao longo de 24 horas, 12 antes e 12 depois do evento do segundo intercalar, para que os computadores não vejam o segundo adicional de uma só vez como uma data/hora repetida. Isto reduz o risco em sistemas que dependem de uma data/hora consistente. Recomendamos que configure todas as suas instâncias de computação para usar os serviços NTP da Google internos.

Configure o NTP para as suas instâncias

Google Cloud não consegue prever como os serviços NTP externos, como o pool.ntp.org, processam os segundos intercalares. Recomendamos vivamente que não use origens NTP externas com as suas instâncias de computação. Se usar o serviço NTP da Google e um serviço externo, pode causar alterações imprevisíveis na hora do sistema. É preferível usar apenas uma única origem NTP externa a usar uma combinação, mas os serviços NTP externos, como pool.ntp.org, usam frequentemente passos para processar os segundos intercalares. Como resultado, as suas instâncias podem apresentar datas/horas repetidas.

A abordagem mais segura é configurar as instâncias de computação para usar um único servidor NTP, o servidor NTP interno fornecido pela Google. Para mais informações acerca do servidor NTP interno fornecido pela Google, consulte as Perguntas frequentes sobre o NTP público da Google.

Para garantir que as suas instâncias de computação estão configuradas corretamente, siga estas instruções.

Linux (chrony)

Por predefinição, a maioria das novas versões do Linux usa o chrony para gerir as respetivas definições de NTP e sincronização de tempo. Para se certificar de que o chrony usa apenas o serviço NTP interno, verifique a configuração do chrony e remova os servidores NTP externos.

  1. Use o ssh para se ligar à sua instância de computação.

    Consola

    Para usar a consola para se ligar à instância de computação através de SSH, siga estes passos:

    1. Aceda à página Instâncias de VM na Google Cloud consola.

      Aceda às instâncias de VM

    2. Clique no botão SSH para a instância que quer configurar.

      Botão SSH.

    gcloud

    Para usar a CLI do Google Cloud para se ligar à instância de computação através de SSH, execute o seguinte comando:

    gcloud compute instances ssh INSTANCE_NAME
    

    Substitua INSTANCE_NAME pelo nome da instância à qual está a estabelecer ligação.

  2. Na sua instância, execute chronyc sources para verificar o estado atual da configuração do NTP:

    $ chronyc sources
    

    O resultado tem um aspeto semelhante ao seguinte:

     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 vir um único registo a apontar para metadata.google ou metadata.google.internal, não tem de fazer alterações. Se vir várias origens, misturadas entre metadata.google e uma origem pública, como pool.ntp.org, atualize as suas origens para remover todos os servidores NTP externos.

    No resultado de exemplo, existem dois registos, um a apontar para metadata.google.internal e outro a apontar para um endereço externo. Como existem várias origens, atualizaria os seus servidores NTP para remover o endereço 38.229.53.9, conforme descrito no passo seguinte.

  3. Configure os seus servidores NTP para remover servidores NTP externos.

    Para remover o servidor NTP adicional da lista, edite o ficheiro /etc/chrony/chrony.conf com o seu editor de texto favorito. Encontre todas as linhas que começam com server external_source_ip_or_name e remova-as.

    Depois de editar o ficheiro /etc/chrony/chrony.conf, reinicie o serviço chrony. O comando para reiniciar pode variar consoante a distribuição do Linux, como mostrado nos exemplos seguintes:

    sudo service chrony restart
    
    sudo systemctl restart chrony
    
  4. Valide a configuração executando novamente o comando chronyc sources:

    $ chronyc sources
    

    O resultado deve ser semelhante ao seguinte:

     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)

A maioria das distribuições Linux mais antigas usa o ntpd para gerir as respetivas definições de NTP e sincronização de tempo. Para se certificar de que o ntpd usa apenas o serviço NTP interno, verifique a configuração do ntpd e remova os servidores NTP externos.

  1. Use o ssh para estabelecer ligação à sua instância de computação.

    Consola

    Para usar a consola para se ligar à instância de computação através de SSH, siga estes passos:

    1. Aceda à página Instâncias de VM na Google Cloud consola.

      Aceda às instâncias de VM

    2. Clique no botão SSH para a instância que quer configurar.

      Botão SSH.

    gcloud

    Para usar a CLI do Google Cloud para se ligar à instância de computação através de SSH, execute o seguinte comando:

    gcloud compute instances ssh INSTANCE_NAME
    

    Substitua INSTANCE_NAME pelo nome da instância à qual está a estabelecer ligação.

  2. Na sua instância, execute ntpq -p para verificar o estado atual da sua configuração de NTP:

    $ ntpq -p
    

    O resultado tem um aspeto semelhante ao seguinte:

    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 vir um único registo a apontar para metadata.google ou metadata.google.internal, não tem de fazer alterações. Se vir várias fontes, misturadas entre metadata.google e uma fonte pública, como pool.ntp.org, tem de atualizar as suas fontes para remover todos os servidores NTP externos.

    No resultado de exemplo, existem dois registos, um a apontar para metadata.google e outro a apontar para um endereço externo. Como existem várias fontes, tem de atualizar os servidores NTP para remover o endereço *217.162.232.173, conforme descrito no passo seguinte.

  3. Configure os seus servidores NTP para remover origens externas.

    Para configurar os seus servidores NTP, edite o ficheiro /etc/ntp.conf com o seu editor de texto favorito. Encontre a secção servers da configuração e remova todas as origens de NTP não pertencentes à Google, por exemplo:

    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
    

    Depois de editar o ficheiro /etc/ntp.conf, reinicie o serviço NTP. O comando para reiniciar pode variar consoante a distribuição do Linux:

    sudo service ntp reload
    
  4. Valide a configuração executando novamente o 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. Aceda à página Instâncias de VM na Google Cloud consola.

    Aceda às instâncias de VM

  2. Clique no botão RDP junto à instância do Windows à qual quer estabelecer ligação.

    Botão SSH.

  3. Depois de iniciar sessão, clique com o botão direito do rato no ícone do PowerShell e selecione Executar como administrador.

    O ícone do PowerShell.

  4. Quando a linha de comandos for carregada, execute o seguinte comando para ver a configuração NTP atual:

    w32tm /query /configuration
    
    [Configuration]
    ...
    Type: NTP (Local)
    NtpServer: metadata.google.internal,
    ...
    

    Se vir um único registo a apontar para metadata.google ou metadata.google.internal, não tem de fazer alterações. Se vir várias origens, misturadas entre metadata.google e uma origem pública, tem de remover o servidor externo. Siga o guia do Windows para configurar o servidor NTP.

  5. Para garantir a compatibilidade de software mais abrangente nas VMs do Windows, a Google recomenda que use o controlador gVNIC para garantir a precisão do NTP inferior a um milissegundo com o metadata.google.

    Se tiver de usar o VirtIO com a sua VM do Windows, para obter uma precisão inferior a um milissegundo com os servidores NTP, a Google recomenda que não use o serviço de tempo do Windows (pare e anule o registo de w32tm).

    1. Pare o serviço de hora do Windows:

      net stop w32time
      
    2. Remova o serviço de hora do Windows do registo:

      w32tm /unregister
      
    3. Depois de o serviço de hora do Windows ter sido parado e removido do registo, instale o cliente NTP da Meinberg.

      Siga as instruções de configuração conforme indicado na documentação da Meinberg.

    4. Configure o servidor NTP para o cliente NTP Meinberg como metadata.google.internal.

      Depois de terminar a configuração do NTP, aguarde entre 5 e 15 minutos para que o relógio do sistema na VM se estabilize com o servidor NTP.

      Para obter informações sobre o motivo pelo qual não recomendamos a utilização de w32tm, consulte a documentação de problemas conhecidos.

Use a sincronização de saltos com sistemas externos ao Google Cloud

A funcionalidade de extensão do salto dos servidores NTP da Google é uma forma conveniente de gerir o risco envolvido na repetição de um segundo em sistemas sensíveis ao tempo. Outros serviços NTP podem oferecer uma solução alternativa aceitável para a maioria dos sistemas de software. No entanto, é importante que não misture os serviços NTP de propagação de segundos intercalares da Google com os serviços NTP públicos de ajuste de tempo.

Para sincronizar dispositivos fora Google Cloud com a hora alterada, pode usar o NTP público da Google para esses dispositivos. O NTP público da Google usa a mesma dispersão de segundos intercalares que é fornecida às VMs do Compute Engine.

O que se segue?