Configurar o NTP em uma VM


Muitos sistemas de software que dependem de um sequenciamento cuidadoso de eventos dependem de um relógio de sistema estável e consistente. Os logs do sistema gravados pela maioria dos serviços incluem um carimbo de data/hora, que ajuda a depurar problemas que ocorrem entre vários componentes do seu sistema. Para ajudar a manter os relógios do sistema sincronizados, as instâncias do Compute Engine são pré-configuradas para usar o Network Time Protocol (NTP).

Além de manter o horário do servidor sincronizado, o NTP é útil no raro caso de um segundo bissexto. Um segundo bissexto é um ajuste de um segundo feito no horário UTC para levar em conta as mudanças na rotação da Terra. Os segundos bissextos não acontecem em intervalos rotineiros, porque a velocidade de rotação da Terra varia irregularmente em resposta a eventos climáticos e geológicos. Os segundos bissextos anteriores impactaram visivelmente uma variedade de serviços e aplicativos na web. Os servidores NTP ajudam a garantir que todos os servidores relatem o mesmo horário durante o evento de um segundo bissexto.

Este documento descreve como configurar servidores NTP em suas máquinas virtuais (VMs) para se comportarem corretamente no caso de um segundo bissexto.

Servidores NTP do Google e manchas de salto

Os segundos bissextos para um sistema operacional Unix são comumente implementados repetindo o último segundo do dia. Isso pode causar problemas com software que espera que os carimbos de data/hora aumentem apenas. Para contornar esse problema, os servidores de horário em Google Cloud" manchar " o segundo extra ao longo de vinte e quatro horas — doze antes e doze depois do evento do segundo bissexto — para que os computadores não vejam o segundo extra de uma só vez como um carimbo de data/hora repetido. Isso reduz o risco em sistemas que dependem de um carimbo de data/hora consistente. É recomendado que todas as instâncias de máquina virtual (VM) do Compute Engine sejam configuradas para usar os serviços internos do Google NTP.

Configure o NTP para suas instâncias

Google Cloud não é possível prever como os serviços NTP externos, como pool.ntp.org , lidarão com o segundo bissexto. Se possível, é recomendável não usar fontes NTP externas com VMs do Compute Engine. Pior ainda, usar o serviço NTP do Google e um serviço externo pode resultar em mudanças imprevisíveis na hora do sistema. Usar apenas uma única fonte NTP externa é preferível a usar uma combinação, mas os serviços NTP externos, como pool.ntp.org , provavelmente usarão etapas para lidar com o segundo bissexto. Como resultado, suas VMs poderão ver um carimbo de data/hora repetido.

A abordagem mais segura é configurar suas VMs do Compute Engine para usar um único servidor NTP, o servidor NTP interno fornecido pelo Google. Não misture servidores NTP externos e servidores NTP do Google, pois isso pode resultar em comportamento inesperado. Para obter mais informações sobre o servidor NTP interno fornecido pelo Google, consulte as Perguntas frequentes sobre NTP público do Google .

Para garantir que suas VMs estejam configuradas corretamente, siga estas instruções.

Linux (cronia)

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

  1. Use ssh para se conectar à sua instância.

    Console

    Para usar o console para se conectar à VM usando SSH, siga estas etapas:

    1. Acesse a página de instâncias de VM no console do Google Cloud.

      Acesse as instâncias de VM

    2. Clique no botão SSH da VM que você deseja configurar.

      Botão SSH.

    gcloud

    Para usar a CLI do Google Cloud para se conectar à VM usando SSH, execute o seguinte comando:

    gcloud compute instances ssh VM_NAME
    

    Substitua VM_NAME pelo nome da VM à qual você está se conectando.

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

    $ chronyc sources
    

    A saída é semelhante a esta:

     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 você vir um único registro apontando para metadata.google ou metadata.google.internal , não será necessário fazer nenhuma alteração. Se você vir várias fontes, misturadas entre metadata.google e uma fonte pública como pool.ntp.org , atualize suas fontes para remover quaisquer servidores NTP externos.

    Na saída do exemplo, há dois registros, um apontando para metadata.google.internal e outro apontando para um endereço externo. Como existem diversas fontes, você atualizaria seus servidores NTP para remover o endereço 38.229.53.9 , conforme descrito na próxima etapa.

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

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

    Após editar seu arquivo /etc/chrony/chrony.conf , reinicie o serviço chrony . O comando para reiniciar pode variar dependendo da distribuição Linux, conforme mostrado nos exemplos a seguir:

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

    $ chronyc sources
    

    A saída deve ser semelhante a 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 suas configurações de NTP e sincronização de horário. Para garantir que ntpd use apenas o serviço NTP interno, verifique a configuração ntpd e remova os servidores NTP externos.

  1. Use ssh para se conectar à sua instância.

    Console

    Para usar o console para se conectar à VM usando SSH, siga estas etapas:

    1. Acesse a página de instâncias de VM no console do Google Cloud.

      Acesse as instâncias de VM

    2. Clique no botão SSH da VM que você deseja configurar.

      Botão SSH.

    gcloud

    Para usar a CLI do Google Cloud para se conectar à VM usando SSH, execute o seguinte comando:

    gcloud compute instances ssh VM_NAME
    

    Substitua VM_NAME pelo nome da VM à qual você está se conectando.

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

    $ ntpq -p
    

    A saída é semelhante à 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 você vir um único registro apontando para metadata.google ou metadata.google.internal , não será necessário fazer nenhuma alteração. Se você vir várias fontes, misturadas entre metadata.google e uma fonte pública como pool.ntp.org , será necessário atualizar suas fontes para remover quaisquer servidores NTP externos.

    Na saída do exemplo, há dois registros, um apontando para metadata.google e outro apontando para um endereço externo. Como existem diversas fontes, você precisará atualizar seus servidores NTP para remover o endereço *217.162.232.173 , conforme descrito na próxima etapa.

  3. Configure seus servidores NTP para remover fontes externas.

    Para configurar seus servidores NTP, edite o arquivo /etc/ntp.conf usando seu editor de texto favorito. Encontre a seção de 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
    

    Após editar seu arquivo /etc/ntp.conf , reinicie o serviço NTP. O comando para reiniciar pode variar de acordo com a distribuição Linux:

    sudo service ntp reload
    
  4. Verifique sua 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 de instâncias de VM no console do Google Cloud.

    Acesse as instâncias de VM

  2. Clique no botão RDP próximo à instância do Windows à qual você deseja se conectar.

    Botão SSH.

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

    O ícone do PowerShell.

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

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

    Se você vir um único registro apontando para metadata.google ou metadata.google.internal , não será necessário fazer nenhuma alteração. Se você vir várias fontes, misturadas entre metadata.google e uma fonte pública, será necessário remover o servidor externo. Siga o guia do Windows para configurar seu servidor NTP.

  5. Para garantir a compatibilidade de software mais difundida em VMs do Windows, o Google recomenda que você use o driver gVNIC para garantir uma precisão NTP inferior a um milissegundo com metadata.google .

    Se você precisar usar o VirtIO com sua VM do Windows, para obter precisão de menos de um milissegundo com servidores NTP, o Google recomenda que você não use o Windows Time Service (pare e cancele o registro w32tm ).

    1. Pare o serviço de horário do Windows:

      net stop w32time
      
    2. Remova o serviço de horário do Windows do registro:

      w32tm /unregister
      
    3. Depois que o Windows Time Service for interrompido e removido do registro, instale o cliente Meinberg NTP .

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

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

      Após terminar de configurar o 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 por que o uso do w32tm não é recomendado, consulte a documentação de problemas conhecidos .

Usando a mancha de salto com sistemas externos ao Google Cloud

O recurso de dispersão de saltos dos servidores NTP do Google é uma maneira conveniente de gerenciar o risco envolvido na repetição de um segundo em sistemas sensíveis ao tempo. Outros serviços NTP podem fornecer uma solução alternativa aceitável para a maioria dos sistemas de software. No entanto, é importante que você não misture os serviços NTP de difamação do Google com os serviços públicos de revisão NTP.

Para sincronizar dispositivos externos Google Cloud para diminuir o tempo, você pode usar o Google Public NTP para esses dispositivos. O NTP público do Google usa a mesma mancha de segundo bissexto fornecida às VMs do Compute Engine.

O que vem a seguir