我工作中的一些服务器出现了奇怪的问题。我们有几个 XEN 客户机,它们的当前时间不稳定。
# date;date;date;date;date;date;date
Thu Feb 25 16:00:40 PHT 2010
Thu Feb 25 16:00:48 PHT 2010
Thu Feb 25 16:00:40 PHT 2010
Thu Feb 25 16:00:48 PHT 2010
Thu Feb 25 16:00:40 PHT 2010
Thu Feb 25 16:00:48 PHT 2010
Thu Feb 25 16:00:40 PHT 2010
如上所示,时间在 16:00:48 和 16:00:40 之间波动,这对我们来说是有问题的,因为我们某些脚本中时间差异的计算变得不准确(例如,应该是几毫秒的差异变成了几秒的差异,甚至有时是负差异)。
有问题的服务器是 XEN 主机上的 Linux 客户机。客户机系统上的时间会波动,但主机本身的时间没有问题。我排除了 ntpd,因为无论客户机系统上是否运行 ntpd,都会发生这种情况。
客户机处于完全虚拟化状态。主机和客户机上的时间确实匹配,只是客户机上的时间与主机上的时间大约有几秒钟的波动,而主机上的时间没有波动。
/proc/sys/xen/independent_wallclock 在主机中为 0,而在客户机中不存在。Ntpd 服务已停止并禁用。在主机中将 independent_wallclock 设置为 1 不起作用(即客户机中的时间仍然会波动)。尽管我无法重新启动客户机,因为它是一台生产服务器。也许可以在周末完成。
关于要检查什么以及如何解决这个问题,您有什么想法吗?
经过长时间的搜索和测试,完美运行的内核参数是:
divider=10 clocksource=acpi_pm
我用了这一页确定哪些参数最适合我们使用的操作系统。这些信息适用于 VMware,但令人惊讶的是,也适用于 XEN。我们还重新启用了 ntpd,这样我们就有了有效的时间同步。
答案1
典型的时间漂移。您需要设置 NTP 并为虚拟机提供正确的内核命令行
答案2
可能的答案可能取决于一些细节。这是完全虚拟化还是半虚拟化?
如果这是半虚拟化客户机,则检查输出:
cat /proc/sys/xen/independent_wallclock
在 guest 和 dom0 中。另外,检查 dom0 中的时间。
当 dom0 中的时间正确且 dom0 和 domU 中的 /proc/sys/xen/independent_wallclock 为“0”时,则客户机中的时间也应该正确。不要尝试在任何客户机中运行 ntpd,让 dom0 保持时间。
不过,我不确定是否完全虚拟化(我猜测 /proc/sys/xen/independent_wallclock 在 domU 中不可用,但您仍然可以检查 dom0)。
答案3
直到最近我才发现Xen时钟API可能有问题:我看到许多随后调用clock_gettime()
将返回确切地时间相同,精确到纳秒(这显然不可能,因为调用应该已经花费了几纳秒)!也许你会看到该问题的不同变体。
问题中的具体模式也可能表明多个(两个?)源尝试同步时钟,并且这些源具有不同的时间。
过去我发现 Xen 的时钟同步对许多人来说可能已经足够好了,但如果你想要一个小于一秒的偏移量,我必须在 PVM 客户机中使用 NTP 和“独立挂钟”。