Preciso executar um servidor NTP em todas as VMs?

18

Os convidados não puderam herdar de algum modo a hora do sistema do host?

Parece meio inútil executar o mesmo daemon para obter os mesmos resultados na mesma máquina várias vezes, mas não encontrei nada relacionado ao tempo ao ler artigos KVM ou Xen. Meu entendimento é que o convidado obtém o tempo do host na inicialização, mas que pode se separar. Isso está correto?

zimbatm
fonte
3
linux-kvm.org/page/KVMClock
Hauke ​​Laging
11
Eu presumo que você quer dizer um cliente NTP?
Michael Hampton
11
@ MichaelHampton: Sim, a distinção entre cliente e servidor NTP nunca foi realmente clara para mim, pois o pacote ntp sempre fornece os dois.
Zimbatm
2
Relacionado a esta pergunta: no Debian e derivados, o openntppacote é muito mais leve que o ntppacote. Ele não se liga por padrão e, portanto, atua como um cliente, exatamente o que precisamos aqui.
Zimbatm

Respostas:

13

Isto está certo. Note-se que o tempo não só "pode" afastar-se, mas vai afastar-se devido ao fato de que os intervalos entre interrupções do timer (que cronometragem no OS é muitas vezes baseadas em) são esticados e comprimido como o hypervisor que entenderem.

Uma solução comum usada na maioria das plataformas de virtualização (serviços de integração Hyper-V, ferramentas VMWare) está executando um daemon no convidado que sincroniza periodicamente os relógios com o host da VM. Conforme observado por Hauke ​​em um comentário à sua pergunta, a KVM fornece adicionalmente um relógio paravirtualizado, que precisaria do respectivo driver carregado no sistema operacional convidado para funcionar.

Leitura adicional:

Cronometragem em máquinas virtuais VMWare (vmware.com)
Sincronização de relógio de convidados KVM (s19n.net)

o wabbit
fonte
Muito obrigado. Para aqueles em EC2, Xen também parece fornecer uma fonte de relógio: cat /sys/devices/system/clocksource/clocksource0/current_clocksource=> xen
zimbatm
Mesmo assim, o chronyd é recomendado, mesmo que o kvm-clock seja usado com o host como servidor e a VM como cliente.
Akostadinov
20

Em um mundo perfeito, os convidados da sua VM manteriam o tempo perfeito, ou pelo menos tão perfeito quanto o host fornece. Infelizmente, não vivemos em um mundo perfeito.

Com base na minha experiência com praticamente todos os hipervisores conhecidos pelo homem, sempre executo um cliente NTP em máquinas virtuais, sem exceção. Minha configuração usual é ntpd com a opção -g, ou ntpdate, iniciando imediatamente antes para sistemas antigos, para acelerar o relógio (que pode estar muito fora de sincronia na inicialização do sistema).

A KVM possui a configuração quase perfeita, com seu relógio em tempo real paravirtualizado ; convidados com o driver apropriado (todos os Linux recentes, pelo menos) manterão o tempo, assim como o host. Mas ainda assim as coisas dão errado aqui: por exemplo, o host pode não estar executando o NTP, o host pode ter um fuso horário definido, o relógio do host pode estar errado, etc.

VMware e Hyper-V ficam no meio. Cada um possui uma ferramenta destinada a ser executada no convidado que sincroniza o relógio com o host periodicamente, mas, novamente, isso é vulnerável a qualquer problema existente com o relógio do host.

Os hóspedes do meu servidor Hyper-V de teste também exibiram um comportamento estranho: mesmo com os serviços de integração, o relógio do hóspede flutuava mais rápido que 500 ppm, impedindo que o ntpd funcionasse ( ele considera o relógio insano se der mais rápido que isso ). Eu tive que mudar esses convidados para chrony , o que permite que esse valor seja ajustado.

Xen é o pior a esse respeito; não tem absolutamente nenhuma sincronização e é necessário executar o NTP nos convidados. (Disseram-me que versões muito recentes do Xen têm algum tipo de sincronização, mas ainda não o trabalharam pessoalmente.)

As coisas pioram se o hipervisor host não estiver sob seu controle, como uma nuvem pública. Você está à mercê do provedor em relação ao relógio do host e, se ele não for diligente em mantê-lo sincronizado, você perde.

Com tudo isso, é necessário executar clientes NTP em suas máquinas virtuais se você precisar de um relógio semi-preciso. Nota: se você executar máquinas virtuais Windows, obtenha um cliente NTP de terceiros que ajusta o relógio continuamente; a desculpa ruim para um cliente que vem com o Windows apenas ajusta o relógio uma vez por semana , o que é totalmente ridículo.

Michael Hampton
fonte
A execução ntpdatede um trabalho cron diário é suficiente ou precisa ser o daemon ntp?
AngerClown 17/03/2013
4
Você realmente precisa de algo para sincronizar o relógio continuamente, pois pode ficar fora de sincronia o suficiente em um dia para causar problemas. E alguns programas não gostam de ter o relógio pisado.
Michael Hampton
O problema com o daemon ntp é que ele se destina principalmente a fornecer tempo a outras pessoas e, portanto, parará de funcionar se o tempo se afastar demais. Eu realmente gostaria que houvesse algo mais parecido com o ntpdate que funcionasse continuamente e não ligasse nenhuma porta.
Zimbatm
11
@JonasPfenniger Se o ntpd não estiver funcionando para você, tente usar o chrony (como sugerido acima). Ele pode ser ajustado um pouco mais do que o ntpd para acomodar os cenários estranhos que vemos nas máquinas virtuais.
Michael Hampton
3
Embora eu concorde com 95% do que você disse, eu só queria ressaltar que um cliente Windows usando NTP não se limita a uma alteração de relógio por semana. A seguinte chave reg permite definir efetivamente o intervalo de atualização: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\UpdateIntervalO valor é definido em segundos e geralmente é definido como 360000 (100 horas), mas você pode configurá-lo como 900 para sincronizar a cada 15 minutos, se seus aplicativos forem particularmente sensíveis ao tempo. Lembre-se de reiniciar o serviço W32Time posteriormente.
KayJay
3

Eu recomendaria usar o NTP porque é bem conhecido e já existe há muito tempo. Ajustar o relógio não é trivial. O NTP resolveu esse problema.

A linha oficial do VMware é usar um mecanismo, com o NTP preferido, pois é mais refinado e executa etapas menores para ajustar o tempo. A solução interna da VMware adota etapas maiores. Quando você corre, os dois podem brigar. Com a solução VMware interna dando um grande passo e, em seguida, o NTP ajustando-o e retrocedendo um pouco.

Na prática, porém, rodamos os dois ao mesmo tempo e ainda não vi um problema.

$ ntpq   
ntpq> peers
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
something.org  172.2.1.5          2 u   57   64  377    1.597   -2.409   5.952


$  vmware-toolbox-cmd  timesync status
Enabled


$ vmware-toolbox-cmd help timesync
timesync: functions for controlling time synchronization on the guest OS
Usage: vmware-toolbox-cmd timesync <subcommand>

Subcommands:
  enable: enable time synchronization
  disable: disable time synchronization
  status: print the time synchronization status
jris198944
fonte