在 Hyper-V 服务器上设置 NTP

gal*_*mok 3 synchronization hyper-v ntp time

我在 Hyper-V 主机和客户端上设置 NTP 时遇到问题。我没有使用域控制器(几乎所有的建议都是针对我没有使用的 DC 给出的)。

在所有服务器上,我都使用 Windows 时钟来设置 ntp 客户端名称(右键单击,调整日期/时间,Internet 时间,更改设置,输入 NTP 服务器名称)。

这似乎不起作用。或者更确切地说,每天晚上到周一01:00,时间被强行调整(导致各种问题,例如数据库备份损坏)。

我弄乱了 w32tm(读出状态、配置,尝试注销并重新注册)。我终于让 w32tm /query /config 确认它使用了 ntp 服务器:

我有 w32tm /query /source 这样说:

本地 CMOS 时钟 time.windows.com,0x9(实际上是不同的主机,但与本报告无关) 自由运行的系统时钟 VM IC 时间同步提供程序(仅适用于 Hyper-V 客户端)

我终于有了 w32tm 报告“time.windows.com,0x9”,但后来它自动更改为“自由运行的系统时钟”。我不知道为什么。我认为自由奔跑不是我想要的。

我想我对 Hyper-V 主机和客户端上的时间设置完全迷失了,真的需要一些帮助。我找到了一些指南,但它们相互矛盾(或者只是谈论域控制器设置)。

Hyper-V 客户端上的 w32tm 有关于配置的说法:

C:\Windows\system32>w32tm /query /configuration
[Configuration]

EventLogFlags: 2 (Local)
AnnounceFlags: 10 (Local)
TimeJumpAuditOffset: 28800 (Local)
MinPollInterval: 10 (Local)
MaxPollInterval: 15 (Local)
MaxNegPhaseCorrection: 54000 (Local)
MaxPosPhaseCorrection: 54000 (Local)
MaxAllowedPhaseOffset: 1 (Local)

FrequencyCorrectRate: 4 (Local)
PollAdjustFactor: 5 (Local)
LargePhaseOffset: 50000000 (Local)
SpikeWatchPeriod: 900 (Local)
LocalClockDispersion: 10 (Local)
HoldPeriod: 5 (Local)
PhaseCorrectRate: 1 (Local)
UpdateInterval: 360000 (Local)


[TimeProviders]

NtpClient (Local)
DllName: C:\Windows\system32\w32time.DLL (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)
AllowNonstandardModeCombinations: 1 (Local)
ResolvePeerBackoffMinutes: 15 (Local)
ResolvePeerBackoffMaxTimes: 7 (Local)
CompatibilityFlags: 2147483648 (Local)
EventLogFlags: 1 (Local)
LargeSampleSkew: 3 (Local)
SpecialPollInterval: 604800 (Local)
Type: NTP (Local)
NtpServer: time.windows.com,0x9 (Local)

VMICTimeProvider (Local)
DllName: C:\Windows\System32\vmictimeprovider.dll (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)
NtpServer (Local)
DllName: C:\Windows\system32\w32time.DLL (Local)
Enabled: 0 (Local)
InputProvider: 0 (Local)
Run Code Online (Sandbox Code Playgroud)

上述配置导致“自由运行的系统时钟”,至少我觉得这很奇怪。

Windows 时间和 Hyper-V 时间同步服务都在运行。

没有针对时间服务的组策略生效。

有关如何解决此问题的建议?

gal*_*mok 5

这就是我最终做的,我认为是合理的:

Hyper-V 主机(物理服务器)设置为与选择的时间服务器同步,每个 Hyper-V 来宾设置为单独与主机同步。以下更改与默认值不同。

主机设置

首先停止时间服务:

net stop w32time
Run Code Online (Sandbox Code Playgroud)

注册表更改(基础HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\):

  • w32time\Config\AnnounceFlags = 10
  • w32time\Parameters\NtpServers = 0.dk.pool.ntp.org,0x1 1.dk.pool.ntp.org,0x1 2.dk.pool.ntp.org,0x1 3.dk.pool.ntp.org,0x1
  • w32time\TimeProviders\NtpClient\SpecialPollInterval= 900(15 分钟)
  • w32time\TimeProviders\NtpServer\Enabled = 1

有些使用announceflags=5,但与域控制器的相关性(在这种情况下没有设置)导致ntp服务器不宣布自己(观察;不是事实)因此announceflags设置为10 (更多关于announceflags

ntpservers 上的 0x1 = 使用特殊的轮询间隔(而不是标准的 ntp 轮询间隔)。(更多关于 0x1、0x2、0x4 和 0x8)。使用 SpecialPollInterval 不是必需的,但似乎是推荐的(可能主要用于客人,而不是主机)。如果您决定不使用 SpecialPollInterval,则必须改为限制 MinPollInterval 和 MaxPollInterval。它们的默认值为 10(1024 秒)和 15(32768 秒);我建议改为 6(64 秒)和 10(1024 秒))。

确保在服务器有网络连接时启动时间服务:

sc triggerinfo w32time start/networkon stop/networkoff
Run Code Online (Sandbox Code Playgroud)

默认设置是使用域控制器(此设置中不存在)启动(和停止)时间服务。忘记这一步将在每次启动时停止您的时间服务器(在它自动启动后不久)。这个问题很难追踪。

并再次启动服务:

net start w32time
Run Code Online (Sandbox Code Playgroud)

现在,主机将每 15 分钟轮询一次 ntp 时间服务器,并为其他客户端提供 ntp 服务器。我有防火墙 udp:123 以确保只允许客人进入。

服务器可能需要长达 15 分钟 (SpecialPollInterval) 才能向全世界(客人)宣布其作为可靠时间服务器的功能。这意味着客人可以在服务开始后自由运行 15-20 分钟。

访客设置

客人的漂移(远)比主机(也相互比较)多,并且需要相对较短的轮询间隔。因此,使用远程 ntp 服务器并不理想,因为我们手头有一个可靠的 ntp 服务器(刚刚配置),我们将使用它(并且仅使用它)。来宾都可以使用虚拟网络访问主机。

确保 Hyper-V 时间集成服务已安装并正在运行。通过此设置,它将在虚拟服务器启动时以及从保存恢复时使用。它不会用作时间源。

停止时间服务:

net stop w32time
Run Code Online (Sandbox Code Playgroud)

进行必要的注册表更改(基础HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\):

  • w32time\Config\AnnounceFlags = 10
  • w32time\Parameters\NtpServers = 192.168.0.100,0x9
  • w32time\TimeProviders\NtpClient\SpecialPollInterval= 300(5 分钟)
  • w32time\TimeProviders\NtpServer\Enabled = 0
  • w32time\TimeProviders\VMICTimeProvider\Enabled= 0

确保在服务器有网络连接时启动时间服务:

sc triggerinfo w32time start/networkon stop/networkoff
Run Code Online (Sandbox Code Playgroud)

并再次启动服务:

net start w32time
Run Code Online (Sandbox Code Playgroud)

结论

通过这种设置,主人和客人的时间都应该得到很好的控制。