Muitos sistemas de software que dependem de uma sequenciação cuidadosa de eventos baseiam-se num relógio do sistema estável e consistente. Os registos do sistema escritos pela maioria dos serviços incluem uma data/hora, o 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 protocolo NTP (Network Time Protocol).
Além de manter a hora do servidor sincronizada, o NTP é útil no caso raro de um segundo intercalar. 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 irregularmente em resposta a eventos climáticos e geológicos. Os segundos intercalares anteriores afetaram notavelmente 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 os servidores NTP nas suas máquinas virtuais (VMs) para se comportarem corretamente no caso de um segundo intercalar.
Servidores NTP da Google e atraso 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 "smear" o segundo adicional ao longo de vinte e quatro horas, doze antes e doze depois do evento de 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 todas as instâncias de máquinas virtuais (VMs) do Compute Engine sejam configuradas 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
,
vão processar o segundo intercalar. Se possível, recomendamos que não use origens NTP externas com VMs do Compute Engine. Pior ainda, a utilização do serviço NTP da Google e de um serviço externo pode resultar em alterações imprevisíveis na hora do sistema. A utilização de apenas uma única fonte NTP externa é preferível à utilização de uma combinação, mas os serviços NTP externos, como o pool.ntp.org
, vão provavelmente usar o ajuste para processar o segundo intercalar. Como resultado,
as suas VMs podem ver uma data/hora repetida.
A abordagem mais segura é configurar as VMs do Compute Engine para usar um único servidor NTP, o servidor NTP interno fornecido pela Google. Não misture servidores NTP externos e servidores NTP da Google, uma vez que isto pode resultar num comportamento inesperado. 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 VMs 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.
Use
ssh
para estabelecer ligação à sua instância.Consola
Para usar a consola para estabelecer ligação à VM através de SSH, siga estes passos:
Aceda à página Instâncias de VM na Google Cloud consola.
Clique no botão SSH para a VM que quer configurar.
gcloud
Para usar a Google Cloud CLI para estabelecer ligação à VM através de SSH, execute o seguinte comando:
gcloud compute instances ssh VM_NAME
Substitua
VM_NAME
pelo nome da VM à qual se está a ligar.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
oumetadata.google.internal
, não tem de fazer alterações. Se vir várias origens, misturadas entremetadata.google
e uma origem pública, comopool.ntp.org
, atualize as suas origens para remover quaisquer 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 servidores NTP para remover o endereço38.229.53.9
, conforme descrito no passo seguinte.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 comserver external_source_ip_or_name
e remova-as.Depois de editar o ficheiro
/etc/chrony/chrony.conf
, reinicie o serviçochrony
. 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
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.
Use
ssh
para estabelecer ligação à sua instância.Consola
Para usar a consola para estabelecer ligação à VM através de SSH, siga estes passos:
Aceda à página Instâncias de VM na Google Cloud consola.
Clique no botão SSH para a VM que quer configurar.
gcloud
Para usar a Google Cloud CLI para estabelecer ligação à VM através de SSH, execute o seguinte comando:
gcloud compute instances ssh VM_NAME
Substitua
VM_NAME
pelo nome da VM à qual se está a ligar.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
oumetadata.google.internal
, não tem de fazer alterações. Se vir várias fontes, misturadas entremetadata.google
e uma fonte pública, comopool.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. Uma vez que existem várias origens, tem de atualizar os servidores NTP para remover o endereço*217.162.232.173
, conforme descrito no passo seguinte.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çãoservers
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
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
Aceda à página Instâncias de VM na Google Cloud consola.
Clique no botão RDP junto à instância do Windows à qual quer estabelecer ligação.
Depois de iniciar sessão, clique com o botão direito do rato no ícone do PowerShell e selecione Executar como administrador.
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
oumetadata.google.internal
, não tem de fazer alterações. Se vir várias origens, misturadas entremetadata.google
e uma origem pública, tem de remover o servidor externo. Siga o guia do Windows para configurar o servidor NTP.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 Windows Time Service (pare e anule o registo de
w32tm
).Pare o serviço de hora do Windows:
net stop w32time
Remova o serviço de hora do Windows do registo:
w32tm /unregister
Depois de o serviço de tempo 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.
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 é recomendado usar o w32tm, consulte a documentação de problemas conhecidos.
Usar a distorçã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 fornecer 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 anos bissextos da Google com os serviços NTP de ajuste de tempo públicos.
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?
- Saiba mais acerca da conformidade com a norma de segurança de dados da PCI.
- Reveja as Perguntas frequentes sobre o NTP público da Google.