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 Google Cloud 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
Google Cloud 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.
Use o
sshpara 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:
Aceda à página Instâncias de VM na Google Cloud consola.
Clique no botão SSH para a instância que quer configurar.
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_NAMEpelo nome da instância à qual está a estabelecer ligação.Na sua instância, execute
chronyc sourcespara verificar o estado atual da configuração do NTP:$ chronyc sourcesO 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.googleoumetadata.google.internal, não tem de fazer alterações. Se vir várias origens, misturadas entremetadata.googlee uma origem pública, comopool.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.internale outro a apontar para um endereço externo. Como existem várias origens, atualizaria os seus 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.confcom o seu editor de texto favorito. Encontre todas as linhas que começam comserver external_source_ip_or_namee 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 sourcesO 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 o
sshpara 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:
Aceda à página Instâncias de VM na Google Cloud consola.
Clique no botão SSH para a instância que quer configurar.
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_NAMEpelo nome da instância à qual está a estabelecer ligação.Na sua instância, execute
ntpq -ppara verificar o estado atual da sua configuração de NTP:$ ntpq -pO 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.googleoumetadata.google.internal, não tem de fazer alterações. Se vir várias fontes, misturadas entremetadata.googlee 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.googlee 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.Configure os seus servidores NTP para remover origens externas.
Para configurar os seus servidores NTP, edite o ficheiro
/etc/ntp.confcom o seu editor de texto favorito. Encontre a secçãoserversda 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 iburstDepois 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 reloadValide a configuração executando novamente o comando
ntpq -p:ntpq -premote 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.googleoumetadata.google.internal, não tem de fazer alterações. Se vir várias origens, misturadas entremetadata.googlee 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 serviço de tempo do Windows (pare e anule o registo de
w32tm).Pare o serviço de hora do Windows:
net stop w32timeRemova o serviço de hora do Windows do registo:
w32tm /unregisterDepois 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.
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 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 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 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.