如何解决虚拟机中时间漂移的问题?

21

我的虚拟机的时钟漂移相当明显。有一些文档介绍如何处理这个问题,但是似乎没有什么能够很好地解决它。

有人有什么建议吗,有哪些方法是他们使用过且有效的...

据说定期使用ntp进行更新不是一个好的解决方案。


1
想知道为什么NTP不是一个好主意? - cagcowboy
你的虚拟机运行的是哪个操作系统? - Mark Biek
关于NTP解决方案:我必须承认,我暂时无法记起为什么不鼓励使用NTP。我想也许与同时使用不同方法以及这样做的不良影响有关。 - carrier
11个回答

17
  1. 在你听取任何人的建议之前,请仔细阅读你的VMware文档。我们正在运行ESX5。

Linux客户端时间同步最佳实践建议: 参考:http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1006427

NTP建议 注意:VMware建议你使用NTP而不是VMware Tools定期时间同步。NTP是业界标准,可以确保在宿主机中准确同步时间。您可能需要打开防火墙(UDP 123)以允许NTP流量通过。

以下是一个示例/etc/ntp.conf文件:

tinker panic 0
restrict 127.0.0.1
restrict default kod nomodify notrap
server 0.vmware.pool.ntp.org
server 1.vmware.pool.ntp.org
server 2.vmware.pool.ntp.org
driftfile /var/lib/ntp/drift

这是一个示例(适用于RedHat的)/etc/ntp/step-tickers:

0.vmware.pool.ntp.org
1.vmware.pool.ntp.org

配置指令tinker panic 0指示NTP在出现大的时间跳变时不要放弃同步。这对于应对大的时钟漂移以及从暂停状态恢复虚拟机非常重要。

注意:指令tinker panic 0必须放置在ntp.conf文件的顶部。

同样重要的是不要使用本地时钟作为时间源,通常称为未纪律化本地时钟。当存在大量时间漂移时,NTP有倾向于优先选择本地时钟而非远程服务器。

以下是此类配置的示例:

server 127.127.1.0
fudge 127.127.1.0 stratum 10

注释掉这两行代码。

在修改 NTP 配置后,必须重新启动 NTP 守护进程。请参考您操作系统供应商的文档。


11

Vmware在这个问题上有一份非常好的PDF文档

基本上,主机会尽可能地缓慢调整传送给客户机的时钟滴答声。 不要运行NTP或timed等垃圾软件,只需安装vmware-guestd并让主机缓慢调整您的滴答声即可。 如果您仍然丢失滴答声,则任何其他解决方案也会出现主要漂移。

如果可以的话,请使用具有低频率滴答声的客户端操作系统。 新版Linux带有1000Hz滴答声,但以前只有100Hz。 这似乎更容易交付给主机。 更改HZ值通常需要重新构建内核。


2
最近,许多(大多数?)分发的Linux内核实际上是“无滴答”,这是一个我无法解释的概念,但是这个线程可以:http://kerneltrap.org/node/6750 - Paul Fisher
5
这是10年前的情况。根据最新的KB:“VMware建议使用NTP而不是VMware Tools定期时间同步。”,请参见http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1006427。 - J-16 SDiZ

8
仅补充一些关于为什么NTPD不是一个好的解决方案的数据。NTPD是一个守护进程,试图补偿本地时钟漂移;如果“内部时钟”在一天内偏离X秒,那么NTPD试图添加/删除一些周期到时钟中,以便在时间上,通常在15分钟内,时钟运行足够准确,补偿克服了服务器在一天内获得/失去的这X秒。这有一个优点,你不会看到在一天中重复的时间,这对于事务性系统来说是必须的。
但是要能够做到这一点,NTPD需要本地时钟表现得相当好,这通常意味着本地时钟每天不会漂移超过42秒(或多或少;我不确定确切的数字)。这通常是虚拟机中的问题,因为时钟受软件控制,所以如果主机负载过高,你可能会发现客户端的时钟运行得更慢,如果不是这样,则时钟可能运行得太快。NTPD在这里的问题是本地时钟不可靠,并且在时间上没有恒定的漂移;它可能更多或更少,具体取决于主机系统的负载情况。
因此,在这种情况下,最好安装客户端工具,如建议所示,并将客户端时钟与主机时钟(通常称为“挂钟”)同步。

2
这在10年前是正确的。根据最新的KB:“VMware建议使用NTP而不是VMware Tools定期时间同步。”,请参见http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1006427。 - J-16 SDiZ

1

没有明确的答案,因为存在多种方法,每种方法都有其优缺点。选择哪种方法取决于您的任务、服务器负载、操作系统等。

阅读vmware_timekeeping.pdf以深入了解此问题。

Linux的快速教程可以在单独的KB文章中找到。


1
最佳解决方案是(如果本地连接)安装本地NTP服务器,并在“/etc/init.d/rc.local”文件中编写一个代码,在无限循环中放置“service ntp restart”,睡眠时间约30秒。重新启动系统,时间将与服务器计算机同步。

0

这是一个旧问题,但最近影响了我们。我发现运行vmware工具的任何虚拟机都会受到此问题的影响。

最近我们开始使用open-vm-tools,在这些虚拟机上该选项未设置。由于Vmware完全支持和推荐使用open-vm-tools,我建议使用它而不是vmware工具:http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2073803

如果您使用的存储库中有open-vm-tools,则也可以通过yum installapt-get install等简单方式进行安装。


0
安装虚拟机增强功能(工具)不会同步客户机和主机操作系统之间的时钟吗?

0
据说通过ntp定期更新并不是一个好的解决方案。

尽管如此,这是我推荐的解决方案。为什么在你们那里它被认为不好呢?


0

如果您还没有安装NTP,请先安装它。

ntpdate将正确设置时钟,然后ntpd可以保持时钟的准确性。

NTP池项目提供了一个大型的NTP服务器池供选择。

编辑刚刚注意到您说您认为NTP不是一个好的解决方案 - 为什么?如果您担心时钟更改的影响,那么NTP是理想的选择,因为ntpd不会向前或向后跳动时钟,而是通过略微加速/减速来“调整”时钟,直到它回到正确的时间。


如果我运行ntpdate -u,它会更新时钟...但是,一分钟后我就会偏差5秒,所以我必须经常运行更新。然而,我不知道有缓慢调整的功能。我只用过ntpdate -u跳跃式更新。 - carrier

0

我曾经遇到过同样的问题,并通过以下方法解决:

  1. 安装vmware-guestd
  2. 向内核发送选项clocksource=acpi_pm
  3. 以root身份运行hwclock -s hourly。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接