Muitos sistemas de software que dependem de um cuidadoso sequenciamento de eventos se baseiam em um relógio de sistema estável e consistente. Os registros de sistema gravados pela maioria dos serviços incluem um carimbo de data/hora que ajuda a depurar os problemas que ocorrem entre os diversos componentes do sistema. Para manter os relógios em sincronia, as instâncias do Compute Engine são pré-configuradas com o Network Time Protocol (NTP).
Além de manter o horário do servidor em sincronia, o NTP é útil no caso raro de um segundo bissexto. Um segundo bissexto é um ajuste de um segundo aplicado ao 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 em máquinas virtuais (VMs) para que se comportem corretamente no caso de um segundo bissexto.
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 Google Cloud “distribuem” o segundo extra em 24 horas, 12 antes e 12 após o evento do segundo bissexto. Desse modo, 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. É recomendável configurar todas as instâncias de máquina virtual (VM) do Compute Engine para usar os serviços internos do Google NTP.
Configurar NTP nas instâncias
O Google Cloud não consegue prever como os serviços externos de NTP, como pool.ntp.org
,
vão processar o segundo bissexto. Se possível, não use fontes de NTP externas com as VMs do Compute Engine. Além disso, o uso do serviço de NTP do Google com um serviço externo pode resultar em alterações imprevisíveis no horário do sistema. É preferível usar apenas uma única fonte de NTP externa do que usar essa combinação, mas saiba que os serviços de NTP externos, como o pool.ntp.org
, usam stepping para processar o segundo bissexto. Como resultado, as VMs poderão ter um carimbo de data/hora repetido.
A abordagem mais segura é configurar as VMs do Compute Engine para usar um único servidor NTP, o servidor interno fornecido pelo Google. Não misture servidores NTP externos com servidores NTP do Google, porque isso pode resultar em um comportamento inesperado.
Para garantir que suas VMs 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:
Use
ssh
para se conectar à instância.Console
Para usar o console e se conectar à VM usando SSH, siga estas etapas:
Acesse a página Instâncias de VMs no Console do Google Cloud.
Clique no botão SSH da VM que você quer configurar.
gcloud
Para usar a CLI do Google Cloud para se conectar à VM usando SSH, execute o comando abaixo:
gcloud compute instances ssh VM_NAME
Substitua
VM_NAME
pelo nome da VM a que você está se conectando.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
oumetadata.google.internal
, não é necessário fazer alterações. Se houver várias fontes, misturandometadata.google
e uma fonte pública, comopool.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ço38.229.53.9
, conforme descrito na próxima etapa.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 comserver external_source_ip_or_name
e remova-as.Depois de editar o arquivo
/etc/chrony/chrony.conf
, reinicie o serviçochrony
. 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
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:
Use
ssh
para se conectar à instância.Console
Para usar o console e se conectar à VM usando SSH, siga estas etapas:
Acesse a página Instâncias de VMs no Console do Google Cloud.
Clique no botão SSH da VM que você quer configurar.
gcloud
Para usar a CLI do Google Cloud para se conectar à VM usando SSH, execute o comando abaixo:
gcloud compute instances ssh VM_NAME
Substitua
VM_NAME
pelo nome da VM a que você está se conectando.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
oumetadata.google.internal
, não é necessário fazer alterações. Se houver várias fontes, misturadas entre ometadata.google
e uma fonte pública comopool.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.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çãoservers
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
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
Acesse a página Instâncias de VMs no Console do Google Cloud.
Clique no botão RDP ao lado da instância do Windows à qual você quer se conectar.
Depois de fazer login, clique com o botão direito do mouse no ícone do PowerShell e selecione Executar como administrador.
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
oumetadata.google.internal
, não é necessário fazer alterações. Quando há várias fontes, misturando ometadata.google
com uma fonte pública, é necessário remover o servidor externo. Consulte o guia do Windows para configurar o servidor NTP.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
).Pare o Serviço de Tempo do Windows:
net stop w32time
Remova o Serviço de Tempo do Windows do registro:
w32tm /unregister
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.
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 o uso de w32tm não é recomendado, consulte a documentação de problemas conhecidos.
Uso de segundo bissexto distribuído com sistemas externos ao Google Cloud.
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. Os outros serviços NTP talvez forneçam recursos 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 Google Cloud com o horário distribuído, é possível usar 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
- Saiba mais sobre a conformidade com o padrão de segurança de dados do PCI.
- Leia as Perguntas frequentes sobre NTP público do Google.