Configurar NTP em uma VM

Muitos sistemas de software que dependem de um cuidadoso sequenciamento de eventos se baseiam em um relógio de sistema estável e consistente. Esses sistemas geralmente usam registros do sistema com carimbos de data/hora para garantir a sincronização de tempo e depurar problemas à medida que ocorrem. Para manter os relógios do sistema em sincronia, as instâncias do Compute Engine são pré-configuradas para usar o Network Time Protocol (NTP), uma solução combinada de hardware e software de sincronização de tempo.

O NTP também é útil no caso raro de um segundo bissexto, um ajuste de um segundo feito no horário UTC para corrigir as variações na rotação da Terra. Ele não acontece em intervalos regulares, porque a velocidade da rotação da Terra varia de maneira irregular, em resposta a eventos climáticos e geológicos. Ele tem um impacto perceptível em vários serviços e aplicativos na Web. Os servidores NTP ajudam a garantir que o mesmo horário seja informado por todos os servidores durante o evento de um segundo bissexto.

Neste documento, descrevemos como configurar servidores NTP nas instâncias de computação, incluindo o tratamento adequado de segundos bissextos.

Servidores NTP do Google e leap smearing

Em geral, os segundos bissextos de um sistema operacional Unix são implementados repetindo o último segundo do dia. Isso pode causar problemas se o comportamento previsto no software é que o carimbo de data/hora sempre aumente. Para contornar esse problema, os servidores de horário do Cloud de Confiance by S3NS “distribuem” o segundo extra em 24 horas, 12 antes e 12 após o evento do segundo bissexto. Assim, o segundo extra não fica todo concentrado em um carimbo de data/hora repetido nos computadores. Isso reduz o risco em sistemas que dependem de um carimbo de data/hora consistente. Recomendamos que você configure todas as instâncias de computação para usar os serviços internos do Google NTP.

Configurar NTP nas instâncias

OCloud de Confiance não pode prever como os serviços externos de NTP, como pool.ntp.org, processam segundos bissextos. Recomendamos que você não use fontes de NTP externas com suas instâncias de computação. Se você usar o serviço de NTP do Google e um serviço externo, poderá causar mudanças imprevisíveis no horário do sistema. É preferível usar apenas uma única fonte de NTP externa do que uma combinação, mas os serviços de NTP externos, como pool.ntp.org, geralmente usam stepping para processar segundos bissextos. Como resultado, as instâncias podem ter carimbos de data/hora repetidos.

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

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

Linux (chrony)

Por padrão, a maioria das novas versões do Linux usa chrony para gerenciar as configurações do NTP e a sincronização de tempo. Para garantir que chrony use apenas o serviço NTP interno, verifique a configuração de chrony e remova os servidores NTP externos.

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

    Console

    Para usar o console e se conectar à instância de computação usando SSH, siga estas etapas:

    1. Acesse a página Instâncias de VM no console do Cloud de Confiance .

      Acessar instâncias de VM

    2. Clique no botão SSH da instância que você quer configurar.

      Botão SSH.

    gcloud

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

    gcloud compute instances ssh INSTANCE_NAME
    

    Substitua INSTANCE_NAME pelo nome da instância a que você está se conectando.

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

    $ chronyc sources
    

    A resposta será semelhante a:

     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
    

    Quando há um único registro apontando para metadata.google ou metadata.google.internal, não é necessário fazer alterações. Se houver várias fontes, misturando metadata.google e uma fonte pública, como pool.ntp.org, atualize-as para remover todos os servidores NTP externos.

    No exemplo de saída, há dois registros, um apontando para metadata.google.internal e outro para um endereço externo. Como há várias fontes, atualize os servidores NTP para remover o endereço 38.229.53.9, conforme descrito na próxima etapa.

  3. Configure os servidores NTP para remover os que são externos.

    Para remover um servidor NTP adicional da lista, edite o arquivo /etc/chrony/chrony.conf com o editor de texto de sua preferência. Encontre todas as linhas que começam com server external_source_ip_or_name e remova-as.

    Depois de editar o arquivo /etc/chrony/chrony.conf, reinicie o serviço chrony. O comando de reinicialização pode variar dependendo da distribuição do Linux, conforme mostrado nos exemplos a seguir:

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

    $ chronyc sources
    

    A saída será parecida com esta:

     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 ntpd para gerenciar as configurações do NTP e a sincronização de tempo. Para garantir que ntpd use apenas o serviço NTP interno, verifique a configuração de ntpd e remova os servidores NTP externos:

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

    Console

    Para usar o console e se conectar à instância de computação usando SSH, siga estas etapas:

    1. Acesse a página Instâncias de VM no console do Cloud de Confiance .

      Acessar instâncias de VM

    2. Clique no botão SSH da instância que você quer configurar.

      Botão SSH.

    gcloud

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

    gcloud compute instances ssh INSTANCE_NAME
    

    Substitua INSTANCE_NAME pelo nome da instância a que você está se conectando.

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

    $ ntpq -p
    

    A saída fica mais ou menos assim:

    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
    

    Quando há um único registro apontando para metadata.google ou metadata.google.internal, não é necessário fazer alterações. Se houver várias fontes, misturadas entre o metadata.google e uma fonte pública como pool.ntp.org, será necessário atualizar as fontes para remover todos os servidores NTP externos.

    No exemplo de saída, há dois registros, um apontando para metadata.google e outro para um endereço externo. Como há várias fontes, é necessário atualizar os servidores NTP para remover o endereço *217.162.232.173, conforme descrito na próxima etapa.

  3. Configure os servidores NTP para remover as fontes externas.

    Para configurar os servidores NTP, edite o arquivo /etc/ntp.conf no editor de texto de sua preferência. Encontre a seção servers da configuração e remova todas as fontes NTP que não sejam do 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 arquivo /etc/ntp.conf, reinicie o serviço NTP. O comando para reiniciar pode variar conforme a distribuição do Linux:

    sudo service ntp reload
    
  4. Verifique a configuração executando o comando ntpq -p novamente:

    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. Acesse a página Instâncias de VM no console do Cloud de Confiance .

    Acessar instâncias de VM

  2. Clique no botão RDP ao lado da instância do Windows a que você quer se conectar.

    Botão SSH.

  3. Depois de fazer login, clique com o botão direito do mouse no ícone do PowerShell e selecione Executar como administrador.

    O ícone do PowerShell.

  4. Quando o prompt de comando carregar, execute o seguinte comando para ver a configuração atual do NTP:

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

    Quando há um único registro apontando para metadata.google ou metadata.google.internal, não é necessário fazer alterações. Quando há várias fontes, misturando o metadata.google com uma fonte pública, é necessário remover o servidor externo. Consulte o guia do Windows para configurar o servidor NTP.

  5. Para garantir a compatibilidade de software mais generalizada nas VMs do Windows, o Google recomenda que você use o driver gVNIC para garantir a precisão de NTP de submilissegundo com metadata.google.

    Se você precisa usar o VirtIO com sua VM do Windows para ter precisão de submilissegundos com servidores NTP, o Google recomenda não usar o serviço de tempo do Windows (interrompa e cancele o registro w32tm).

    1. Pare o Serviço de Tempo do Windows:

      net stop w32time
      
    2. Remova o Serviço de Tempo do Windows do registro:

      w32tm /unregister
      
    3. Depois que o Serviço de Tempo do Windows for interrompido e removido do registro, instale o cliente Meinberg NTP.

      Siga as instruções de configuração conforme fornecido na documentação do Meinberg.

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

      Depois de concluir 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 saber por que não recomendamos o uso de w32tm, consulte a documentação de problemas conhecidos.

Usar o segundo bissexto distribuído com sistemas externos ao Cloud de Confiance by S3NS

O recurso leap smearing dos servidores NTP do Google é uma maneira conveniente de gerenciar o risco envolvido na repetição de um segundo nos sistemas afetados pelo tempo. Outros serviços NTP talvez ofereçam medidas alternativas aceitáveis para a maioria dos sistemas de software. No entanto, é importante que você não misture os serviços NTP de segundo bissexto distribuído do Google com os serviços de acompanhamento de NTP públicos.

Para sincronizar dispositivos fora do Cloud de Confiance by S3NS com o horário distribuído, use o NTP público do Google para esses dispositivos. O NTP público do Google usa a mesma distribuição de segundo bissexto fornecida às VMs do Compute Engine.

A seguir