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 Cloud de Confiance by S3NS 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

Cloud de Confiance 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 Cloud de Confiance 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 Cloud de Confiance 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 Cloud de Confiance 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 Cloud de Confiance by S3NS

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 Cloud de Confiance by S3NS 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?