Sincronização de tempo para VMs do Windows no Azure

Aplica-se a: ✔️ VMs ✔️ do Windows Conjuntos ✔️ de escala flexíveis Conjuntos de escalas uniformes

A sincronização de tempo é importante para a segurança e a correlação de eventos. Às vezes, ele é usado para implementação de transações distribuídas. A precisão do tempo entre vários sistemas de computador é alcançada através da sincronização. A sincronização pode ser afetada por várias coisas, incluindo reinicializações e tráfego de rede entre a fonte de tempo e o computador que busca a hora.

O Azure agora é apoiado pela infraestrutura que executa o Windows Server 2016. O Windows Server 2016 melhorou os algoritmos usados para corrigir a hora e condicionar o relógio local para sincronizar com o UTC. O Windows Server 2016 também melhorou o serviço VMICTimeSync que controla como as VMs sincronizam com o host para um tempo preciso. As melhorias incluem um tempo inicial mais preciso no início da VM ou na restauração da VM e correção de latência de interrupção para amostras fornecidas ao Windows Time (W32time).

Nota

Para obter uma visão geral rápida do serviço de Tempo do Windows, dê uma olhada neste vídeo de visão geral de alto nível.

Para obter mais informações, consulte Hora exata para o Windows Server 2016.

Descrição geral

A precisão de um relógio de computador é medida de acordo com o quão próximo o relógio do computador está do padrão de tempo UTC (Tempo Universal Coordenado). O UTC é definido por uma amostra multinacional de relógios atómicos precisos que só podem ser desligados por um segundo em 300 anos. Mas, ler UTC diretamente requer hardware especializado. Em vez disso, os servidores de hora são sincronizados com o UTC e são acessados de outros computadores para fornecer escalabilidade e robustez. Cada computador tem um serviço de sincronização de tempo em execução que sabe a que horas os servidores usar e verifica periodicamente se o relógio do computador precisa ser corrigido e ajusta o tempo, se necessário.

Os hosts do Azure são sincronizados com servidores de tempo internos da Microsoft que tomam seu tempo de dispositivos Stratum 1 de propriedade da Microsoft, com antenas GPS. As máquinas virtuais no Azure podem depender de seu host para passar o tempo preciso (tempo do host) para a VM ou a VM pode obter diretamente o tempo de um servidor de tempo ou uma combinação de ambos.

As interações da máquina virtual com o host também podem afetar o relógio. Durante a manutenção da preservação da memória, as VMs são pausadas por até 30 segundos. Por exemplo, antes do início da manutenção, o relógio da VM mostra 10:00:00 e dura 28 segundos. Depois que a VM for retomada, o relógio da VM ainda mostrará 10:00:00 AM, o que seria 28 segundos desligado. Para corrigir isso, o serviço VMICTimeSync monitora o que está acontecendo no host e solicita que as alterações aconteçam nas VMs para compensar.

O serviço VMICTimeSync opera no modo de amostra ou sincronização e influenciará apenas o avanço do relógio. No modo de exemplo, que requer que o W32time esteja em execução, o serviço VMICTimeSync sonda o host a cada 5 segundos e fornece amostras de tempo para o W32time. Aproximadamente a cada 30 segundos, o serviço W32time pega a amostra de tempo mais recente e a usa para influenciar o relógio do hóspede. O modo de sincronização é ativado se um convidado tiver sido retomado ou se o relógio de um convidado estiver mais de 5 segundos atrasado em relação ao relógio do anfitrião. Nos casos em que o serviço W32time está funcionando corretamente, o último caso nunca deve acontecer.

Sem a sincronização de tempo funcionando, o relógio na VM acumularia erros. Quando há apenas uma VM, o efeito pode não ser significativo, a menos que a carga de trabalho exija uma manutenção de tempo altamente precisa. Mas, na maioria dos casos, temos várias VMs interconectadas que usam o tempo para rastrear transações e o tempo precisa ser consistente durante toda a implantação. Quando o tempo entre VMs é diferente, você pode ver os seguintes efeitos:

  • A autenticação falhará. Protocolos de segurança como Kerberos ou tecnologia dependente de certificado dependem da consistência do tempo em todos os sistemas.
  • É muito difícil descobrir o que aconteceu em um sistema se os logs (ou outros dados) não concordarem com o tempo. O mesmo evento pareceria ter ocorrido em momentos diferentes, dificultando a correlação.
  • Se o relógio estiver desligado, o faturamento pode ser calculado incorretamente.

Os melhores resultados para implantações do Windows são alcançados usando o Windows Server 2016 como sistema operacional convidado, o que garante que você possa usar as melhorias mais recentes na sincronização de tempo.

Opções de configuração

Há três opções para configurar a sincronização de tempo para suas VMs do Windows hospedadas no Azure:

Use o padrão

Por padrão, as imagens de VM do sistema operacional Windows são configuradas para w32time para sincronizar de duas fontes:

  • O provedor NtpClient, que obtém informações de time.windows.com.
  • O serviço VMICTimeSync, usado para comunicar o tempo de host para as VMs e fazer correções depois que a VM é pausada para manutenção. Os hosts do Azure usam dispositivos Stratum 1 de propriedade da Microsoft para manter o tempo preciso.

w32time preferiria o provedor de tempo na seguinte ordem de prioridade: nível de estrato, atraso de raiz, dispersão de raiz, compensação de tempo. Na maioria dos casos, o w32time em uma VM do Azure preferiria o tempo de host devido à avaliação que faria para comparar ambas as fontes de tempo.

Para máquinas ingressadas no domínio, o próprio domínio estabelece hierarquia de sincronização de tempo, mas a raiz da floresta ainda precisa levar tempo de algum lugar e as considerações a seguir ainda seriam verdadeiras.

Apenas host

Como time.windows.com é um servidor NTP público, sincronizar o tempo com ele requer o envio de tráfego pela Internet, atrasos de pacotes variáveis podem afetar negativamente a qualidade da sincronização de tempo. Remover time.windows.com mudando para sincronização somente de host às vezes pode melhorar os resultados da sincronização de tempo.

Mudar para sincronização de tempo somente do host faz sentido se você tiver problemas de sincronização de tempo usando a configuração padrão. Experimente a sincronização somente de host para ver se isso melhoraria a sincronização de tempo na VM.

Servidor de tempo externo

Se você tiver requisitos específicos de sincronização de tempo, também há uma opção de usar servidores de tempo externos. Servidores de tempo externos podem fornecer tempo específico, o que pode ser útil para cenários de teste, garantindo uniformidade de tempo com máquinas hospedadas em datacenters que não sejam da Microsoft ou lidando com segundos bissextos de maneira especial.

Você pode combinar servidores externos com o serviço VMICTimeSync e o VMICTimeProvider para fornecer resultados semelhantes à configuração padrão.

Verifique a configuração

Verifique se o provedor de tempo NtpClient está configurado para usar servidores NTP explícitos (NTP) ou sincronização de tempo de domínio (NT5DS).

w32tm /dumpreg /subkey:Parameters | findstr /i "type"

Se a VM estiver usando NTP, você verá a seguinte saída:

Value Name                 Value Type          Value Data
Type                       REG_SZ              NTP

Para ver o servidor de horas que o provedor de tempo NtpClient está usando, em um prompt de comando elevado, digite:

w32tm /dumpreg /subkey:Parameters | findstr /i "ntpserver"

Se a VM estiver usando o padrão, a saída terá esta aparência:

NtpServer                  REG_SZ              time.windows.com,0x8

Para ver qual provedor de tempo está sendo usado atualmente.

w32tm /query /source

Aqui está a saída que você pode ver e o que isso significaria:

  • time.windows.com - Na configuração padrão, o W32Time obteria tempo a partir de time.windows.com. A qualidade da sincronização de tempo depende da conectividade com a Internet e é afetada por atrasos de pacotes. Esta é a saída habitual que você obteria em uma máquina física.
  • VM IC Time Synchronization Provider - a VM está sincronizando o tempo do host. Essa é a saída usual que você obteria em uma máquina virtual em execução no Azure.
  • Seu servidor de domínio - a máquina atual está em um domínio e o domínio define a hierarquia de sincronização de tempo.
  • Algum outro servidor - w32time foi explicitamente configurado para obter o tempo de que outro servidor. A qualidade da sincronização de tempo depende da qualidade do servidor de tempo.
  • Relógio CMOS local - o relógio não está sincronizado. Você pode obter essa saída se o w32time não tiver tido tempo suficiente para iniciar após uma reinicialização ou quando todas as fontes de tempo configuradas não estiverem disponíveis.

Opte pela sincronização de tempo somente do host

O Azure está constantemente a trabalhar para melhorar a sincronização de tempo em anfitriões e pode garantir que toda a infraestrutura de sincronização é colocada em datacenters de propriedade da Microsoft. Se você tiver problemas de sincronização de tempo com a configuração padrão que prefere usar time.windows.com como a fonte de tempo primária, poderá usar os comandos a seguir para optar pela sincronização de tempo somente do host.

Marque o provedor VMIC como habilitado.

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\TimeProviders\VMICTimeProvider /v Enabled /t REG_DWORD /d 1 /f

Marque o provedor NTPClient como desativado.

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\TimeProviders\NtpClient /v Enabled /t REG_DWORD /d 0 /f

Reinicie o serviço w32time.

net stop w32time && net start w32time

VMs do Windows Server 2012 e R2

O Windows Server 2012 e o Windows Server 2012 R2 têm configurações padrão diferentes para sincronização de tempo. O w32time por padrão é configurado de uma forma que prefere baixa sobrecarga do serviço em vez de tempo preciso.

Se você quiser mover suas implantações do Windows Server 2012 e 2012 R2 para usar os padrões mais recentes que preferem tempo preciso, você pode aplicar as seguintes configurações.

Atualize a pesquisa w32time e os intervalos de atualização para corresponder às configurações do Windows Server 2016.

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v MinPollInterval /t REG_DWORD /d 6 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v MaxPollInterval /t REG_DWORD /d 10 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v UpdateInterval /t REG_DWORD /d 100 /f
w32tm /config /update

Para w32time poder usar os novos intervalos de sondagem, os NtpServers precisam ser marcados como usando-os. Se os servidores forem anotados com a máscara bitflag 0x1 , isso substituiria esse mecanismo e w32time usaria SpecialPollInterval em vez disso. Certifique-se de que os servidores NTP especificados estão usando o 0x8 sinalizador ou nenhum sinalizador:

Verifique quais sinalizadores estão sendo usados para os servidores NTP.

w32tm /dumpreg /subkey:Parameters | findstr /i "ntpserver"

Próximos passos

Abaixo estão os links para mais detalhes sobre a sincronização de tempo: