已解决 问题是该机器上的 Hyper-V。我删除了 Hyper-V,安装了 VMware Server,运行了同一个虚拟机。时间同步问题消失了(一天后的差异小于 100 毫秒)。
我的设置是这样的:
HYV1 - HyperV machine (non domain) - sync irrelevant
AD1 - VM AD server on HYV1, sync'd to time.nist.gov. HyperV time sync off.
S1 - Physical machine, sync'd to domain.
S2 - Physical machine running HyperV, sync'd to domain.
V1 - Linux VM machine on S2, sync'd to AD1. No HyperV integration.
AD1 和 S1 有很好的同步——带状图显示小于 100 毫秒的差异。
S2像疯了一样漂移。下面是一些针对 AD1 的条形图:
18:33:22 d:+00.0010138s o:+05.4101899s
18:33:24 d:+00.0010138s o:+05.4319765s
18:33:26 d:+00.0000000s o:+05.4788429s
18:33:28 d:+00.0000000s o:+05.6089942s
18:33:30 d:+00.0010138s o:+05.7240269s
18:33:32 d:+00.0000000s o:+06.0421911s
18:33:34 d:+00.0081104s o:+06.5613708s
18:33:37 d:+00.0000000s o:+06.9096594s
18:33:39 d:+00.0000000s o:+06.8867838s
18:33:41 d:+00.0010127s o:+06.8936401s
在 20 秒内,它漂移了超过一秒。如果我在 1 秒内手动将其重置,则在几分钟内它会重新漂移大约 2 秒。一夜之间,它从~2s变成了~5s。S2 内的 Linux VM 与 AD1 完美同步。
这是配置:
C:\Users\mgg>w32tm /dumpreg /subkey:Parameters
Value Name Value Type Value Data
------------------------------------------------------------
ServiceDll REG_EXPAND_SZ %systemroot%\system32\w32time.dll
ServiceMain REG_SZ SvchostEntry_W32Time
ServiceDllUnloadOnStop REG_DWORD 1
Type REG_SZ NT5DS
NtpServer REG_SZ ad01.mydomain ad02.mydomain
C:\Users\mgg>w32tm /dumpreg /subkey:Config
Value Name Value Type Value Data
-----------------------------------------------------------
FrequencyCorrectRate REG_DWORD 4
PollAdjustFactor REG_DWORD 5
LargePhaseOffset REG_DWORD 50000000
SpikeWatchPeriod REG_DWORD 900
LocalClockDispersion REG_DWORD 9
HoldPeriod REG_DWORD 5
PhaseCorrectRate REG_DWORD 1
UpdateInterval REG_DWORD 30000
EventLogFlags REG_DWORD 2
AnnounceFlags REG_DWORD 5
TimeJumpAuditOffset REG_DWORD 28800
MinPollInterval REG_DWORD 2
MaxPollInterval REG_DWORD 8
MaxNegPhaseCorrection REG_DWORD -1
MaxPosPhaseCorrection REG_DWORD -1
MaxAllowedPhaseOffset REG_DWORD 300
我查看了事件日志,除了关于同步的警告(在它失去同步之后),没有其他警告。
我该如何解决这个问题?这是唯一有此问题的机器。所有其他机器(物理和虚拟)都运行良好。
编辑:澄清:VM(AD1)已关闭集成并同步到 time.nist.gov。AD1没问题。是物理机S1无法同步到AD1,到处漂移。所有其他物理服务器都能够很好地同步到 AD1。
更新 因此,这似乎是运行 VM 的问题。虚拟机关闭时,时钟慢慢滑落。打开后,它立即开始丢失秒数。我 swt VM 只使用了一半的资源,现在这似乎稍微减轻了它。谢谢!
根据您的描述,服务器 S2 主板上 的 RTC ( http://en.wikipedia.org/wiki/Real-time_clock )似乎存在实际硬件问题。
Hyper-V 来宾最初从主机 (HYV1) 获取时钟,但由于您禁用了 Hyper-V 时间同步,它会从 NIST 获取所有进一步的时钟更新(工作正常)。您的 Linux VM 未与 Hyper-V 集成,因此它正在从域中获取时间,这也可以正常工作。您的其他物理机器工作正常,它只是一个物理服务器,每 20 秒有 1 秒的漂移(这是一个疯狂的漂移量)。时间漂移的速度比网络时间同步可以将时钟重置到正确的时间快得多(如果我没记错的话,它每 8 小时发生一次)。
如果您想排除 Hyper-V 作为 S2 上错误的原因,请创建“无 Hypervisor”引导条目,在没有 Hyper-V 的情况下重新启动,并查看时间漂移是否仍然存在。此处的说明:http: //blogs.msdn.com/virtual_pc_guy/archive/2008/04/14/creating-a-no-hypervisor-boot-entry.aspx
-肖恩
问题在于各种时钟源(tsc、jiffies、acpi_pm、cmos_trc)的虚拟实现。我发现使用 HyperV 解决此问题的最佳方法是关闭HyperV 为您的访客机器提供的时钟同步,然后使用 adjtimex 调整时间。在 Ubuntu 来宾操作系统上执行此操作...
并对这两个问题都回答否
让它运行几个小时来校准,按 Ctrl-C 退出它。
这将对您的时钟进行最小二乘分析并找到正确的调整
这将重新同步您机器上的时间,然后 ntp 应该能够保持同步,因为它不应该再漂移太多。
这似乎是虚拟机的一个非常普遍的问题。请参阅以下网站:
http://www.vmwareinfo.com/2008/04/enabling-ntp-on-esx-servers.html
http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/6fff3eef-1b5b-4059-8618-22ab3f5c293c
我的建议是仅与外部时间服务器同步并禁用任何集成时间同步
希望这会有所帮助。
我们在 Core 上运行 Hyper-v 已经有一段时间了。起初我们遇到了时间同步问题......我从旧的 Windows NT 时代恢复到最佳实践。
我按操作系统查看服务器。我创建了一个Linux、Router、Windows、Novell master。
您现在可能没有 Novell,但请耐心等待。
每个“主”服务器同步到路由器。路由器到层。然后每个成员服务器都有它的主操作系统服务器和其他主服务器之一的辅助服务器。
这个策略的最后一部分是......一切都有一个时间服务器。如果它没有时间服务器,那么它就不会被插入网络。从烤面包机切换到电话 PBX 到服务器。
这是当我得到一份新工作时我做的第一件事就是花时间映射网络并设置时间。然后我可以在这里和那里检查它,并从那时起消除时间同步问题。
时间在虚拟机中随处可见。您真的想确保 NTP 服务器没有在任何“服务器”语句中使用本地时钟,因为本地时钟太不可靠了。我所做的一件事是为 VMed 机器上的服务器设置“maxpoll”属性。这迫使 ntp 服务比配置的默认值更频繁地检查其上游时钟,这有助于保持真实。
尝试一些设置,看看你需要走多远才能保持时间相对可靠。12 对我有用,但每个环境都不同。
这听起来可能很有趣,但我敢打赌您正在运行多处理器设置? 某些制造商存在已知的时钟漂移问题, 多核/多插槽主板会出现AMD咳嗽。大量的中断活动——比如运行一两个虚拟机——会使漂移变得更糟。您正在经历的漂移听起来非常可疑。
对于它的价值,我确实更喜欢 AMD 的产品而不是英特尔,所以不要认为这是对他们的打击。
假设 AD1 是域控制器,我认为这里的问题可能与您的 Hyper-V 服务器从它自己的来宾虚拟机之一设置时间有关。这就是为什么当您切换到 VMware 后问题就消失了:VMware 服务器不需要将其时钟与 Windows 域控制器同步。