我是否需要在每个VM中运行NTP服务器?


18

来宾不能以某种方式继承主机的系统时间吗?

多次运行同一守护程序以在同一台计算机上获得相同结果似乎没有意义,但是在阅读KVM或Xen文章时我没有发现任何与时间相关的信息。我的理解是,来宾系统在引导时获得了主机时间,但随后可能会分开。那是对的吗 ?



1
我想您是说NTP客户端?
迈克尔·汉普顿

1
@MichaelHampton:是的,对我来说,NTP客户端和服务器之间的区别从来都不是很清楚,因为ntp软件包总是提供两者。
zimbatm

2
与此问题相关:在Debian和衍生产品上,该openntp软件包比该ntp软件包轻得多。它默认情况下不绑定,因此仅充当客户端,这正是我们在这里需要的。
zimbatm

Answers:


13

这是对的。应该注意的是,时间不仅会“漂移”,而且由于系统管理程序认为合适的定时器中断之间的间隔(通常是基于OS的计时)而延长和压缩,因此时间也会漂移。

大多数虚拟化平台(Hyper-V集成服务,VMWare工具)上通常采用的解决方法是在客户机上运行守护程序,该守护程序会定期将时钟与VM主机同步。正如Hauke在对您的问题的评论中指出的那样,KVM还提供了半虚拟化时钟,这将需要在来宾OS上加载相应的驱动程序才能工作。

进一步阅读:

VMWare虚拟机(vmware.com)中的计时
KVM来宾时钟同步(s19n.net)


非常感谢。对于使用EC2的用户,Xen似乎还提供了时钟源:cat /sys/devices/system/clocksource/clocksource0/current_clocksource=> xen
zimbatm 2013年

即使将kvm-clock与主机用作服务器并将VM作为客户端一起使用,仍建议使用chronyd。
akostadinov

20

在一个完美的世界中,您的VM guest虚拟机将保持完美的时间,或者至少与主机提供的时间一样完美。不幸的是,我们没有生活在一个完美的世界中。

基于我对人类已知的几乎所有虚拟机管理程序的经验,我始终无一例外地在虚拟机中运行NTP客户端。我通常的设置是使用带有-g选项的ntpd,或者对于旧系统,在它之前开始ntpdate来提高时钟频率(在系统启动时可能与同步不同步)。

KVM具有半虚拟化实时时钟,几乎具有完美的设置;使用适当驱动程序(至少是最新的Linux)的客户机将保留主机的时间。但是这里仍然有问题:例如,主机可能未运行NTP,主机可能设置了不正确的时区,主机的时钟可能完全是错误的,等等。

VMware和Hyper-V位于中间。每个工具都有一个要在guest虚拟机上运行的工具,该工具会定期与主机同步时钟,但同样容易受到主机时钟存在的任何问题的影响。

我的测试Hyper-V服务器上的guest虚拟机也表现出一些奇怪的行为:即使使用集成服务,guest虚拟机时钟的漂移速度也将超过500 ppm,从而阻止ntpd正常工作(如果漂移速度超过此速度,它将认为时钟是疯狂的)。我必须将这些来宾系统切换为chrony,以允许调整此值

在这方面,Xen最差。它绝对没有同步,非常需要在来宾中运行NTP。(有人告诉我,Xen的最新版本具有某种同步,但尚未亲自使用。)

如果主机管理程序不受您的控制,例如公共云,情况只会变得更糟。关于主机时钟,您受提供商的摆布,如果他们不努力保持时钟同步,则您会迷失方向。

综上所述,如果您甚至需要一个半准确的时钟,就非常需要在虚拟机中运行NTP客户端。注意:如果您运行Windows虚拟机,请获取第三方NTP客户端,该客户端可以连续调整时钟。Windows附带的客户端的不良借口仅每周调整一次时钟,这完全是荒谬的。


正在运行ntpdate的每日cron作业不够或是否必须NTP守护进程?
AngerClown 2013年

4
您确实需要一些东西来连续地同步时钟,因为它一天之内可能会远远不够同步而导致问题。而且有些程序不喜欢时钟增加。
迈克尔·汉普顿

ntp守护程序的问题在于,它主要是为了向其他人提供时间,因此如果时间间隔过长,它将停止工作。我真的希望有更多类似ntpdate的东西可以连续运行并且不绑定任何端口。
zimbatm

1
@JonasPfenniger如果ntpd不适用于您,请尝试使用chrony(如上所述)。它可以比ntpd进行更多的调整,以适应我们在虚拟机上看到的怪异场景。
迈克尔·汉普顿

3
虽然我同意您所说的95%,但我只是想指出,使用NTP的Windows客户端不仅限于每周更改一次时钟。使用以下reg键可以有效地定义更新间隔:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\UpdateInterval该值以秒为单位定义,通常设置为360000(100小时),但是如果您的应用程序对时间特别敏感,则可以将其设置为900以每15分钟同步一次。请记住,之后再重新启动W32Time服务。
kayjay 2015年

3

我建议使用NTP,因为它众所周知并且已经存在了很长时间。调整时钟并非易事。NTP已解决此问题。

VMware官方路线是使用一种机制,首选NTP,因为它的粒度更细,并且调整时间的步骤更小。内部VMware解决方案需要采取更大的措施。当您同时运行两者时,它们可能会相互竞争。内部VMware解决方案迈出了一大步,然后NTP对其进行了调整并将其收回。

但是在实践中,我们同时运行两个,但我还没有看到问题。

$ 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.