你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于: ✔️ Windows VM ✔️ 灵活规模集 ✔️ 统一规模集
时间同步对于安全性和事件关联非常重要。 有时候,它用于分布式事务实现。 多个计算机系统之间的时间准确性通过同步来实现。 同步可能受多种因素影响,包括重启以及时间源和提取时间的计算机之间的网络流量。
概述
计算机时钟的准确性根据计算机时钟与协调世界时 (UTC) 时间标准的接近程度来测量。 UTC 通过精确原子钟的跨国样本来定义,此类原子钟 300 年的偏差只有 1 秒。 但是,直接读取 UTC 需要专用硬件。 而时间服务器与 UTC 同步,可以从其他计算机访问,因此具备可伸缩性和可靠性。 每台计算机都运行时间同步服务,该服务知道要使用什么时间服务器,并定期检查计算机时钟是否需要校正以及在需要时调整时间。
Azure 主机与内部 Microsoft 时间服务器同步,这些服务器从 Microsoft 拥有的带 GPS 天线的 Stratum 1 设备获取时间。 Azure 中的虚拟机可以依赖其主机将准确时间(主机时间)传递给 VM,也可以直接从时间服务器中获取时间,或结合使用这两种方式。
虚拟机与主机的交互也可能影响时钟。 在内存保留维护期间,VM 会暂停最多 30 秒的时间。 例如,在维护开始之前,VM 时钟显示上午 10:00:00,这种状态会持续 28 秒。 在 VM 恢复后,VM 上的时钟仍显示上午 10:00:00,这样就造成 28 秒的偏差。 为了校正这种情况,VMICTimeSync 服务会监视主机上发生的情况,并提示在 VM 上进行更改以进行补偿。
VMICTimeSync 服务以采样或同步模式运行,只会影响时钟前进。 在需要运行 W32time 的采样模式下,VMICTimeSync 服务每 5 秒轮询主机一次并向 W32time 提供时间样本。 W32time 服务大约每隔 30 秒就会抽取一次最新的时间样本并使用它来影响来宾的时钟。 如果来宾已被恢复,或者来宾的时钟比主机时钟慢 5 秒以上,则将激活同步模式。 在 W32time 服务正常运行的情况下,后一种情况应永远不会发生。
如果没有进行时间同步,则 VM 上的时钟会累积错误。 只有一个 VM 时,效果可能不明显,除非工作负荷要求极为准确的计时。 但在大多数情况下,我们有多个互连的 VM,这些 VM 使用时间来跟踪事务,因此需确保整个部署的时间一致。 当 VM 之间的时间不同时,可能会造成以下影响:
- 身份验证会失败。 安全协议(如 Kerberos)或依赖于证书的技术要求跨系统确保时间一致性。
- 如果日志(或其他数据)在时间上不一致,则很难弄清楚系统中发生了什么。 同一事件看起来就像是在不同的时间发生,难以进行关联。
- 如果时钟存在偏差,则可能造成计费不正确。
可以将 Windows Server 2016 用作来宾操作系统,这样可确保使用时间同步方面的最新改进,获得 Windows 部署的最佳结果。
配置选项
可以通过三个选项来配置托管在 Azure 中的 Windows VM 的时间同步:
- 主机时间和 time.windows.com。 这是在 Azure 市场映像中使用的默认配置。
- 仅主机。
- 使用其他外部时间服务器,无论是否使用主机时间。 对于此选项,请按 Azure 中的 Active Directory Windows 虚拟机的时间机制指南操作。
使用默认配置
默认情况下,Windows OS VM 映像配置为允许 w32time 与两个源同步:
- NtpClient 提供程序,从 time.windows.com 获取信息。
- VMICTimeSync 服务,用于将主机时间传递给 VM,并在 VM 因维护而暂停后进行纠正。 Azure 主机使用 Microsoft 拥有的第 1 层设备来确保时间的准确性。
w32time 将按以下优先级顺序选择时间提供程序:层级、根延迟、根分散、时间偏移。 在大多数情况下,Azure VM 上的 w32time 会首选主机时间,因为它会进行评估以比较两个时间源。
对于域加入的计算机,域本身会建立时间同步层次结构,但是林根仍然需要从某个地方获取时间,并且以下注意事项仍然适用。
仅主机
由于 time.windows.com 是公共 NTP 服务器,与其同步时间需要通过 Internet 发送流量,而数据包的延迟各不相同,因此可能会对时间同步的质量造成负面影响。通过切换到“仅主机”同步来删除 time.windows.com 有时候可以改善时间同步结果。
如果在使用默认配置时遇到时间同步问题,则可切换到“仅主机”时间同步。 尝试“仅主机”同步,看是否会改进 VM 上的时间同步。
外部时间服务器
如果有特定的时间同步要求,则可使用另一选项,即,使用外部时间服务器。 外部时间服务器可以提供特定的时间,这可以用于测试方案,确保时间在非 Microsoft 数据中心托管的计算机中的一致性,或者以特殊方式来处理闰秒问题。
可以将外部服务器与 VMICTimeSync 服务和 VMICTimeProvider 组合使用,提供类似于默认配置的结果。
检查配置
检查是否已将 NtpClient 时间提供程序配置为使用显式 NTP 服务器 (NTP) 或域时间同步 (NT5DS)。
w32tm /dumpreg /subkey:Parameters | findstr /i "type"
如果 VM 使用 NTP,则会看到以下输出:
Value Name Value Type Value Data
Type REG_SZ NTP
若要查看 NtpClient 时间提供程序正在使用什么时间服务器,请在权限提升的命令提示符处键入以下命令:
w32tm /dumpreg /subkey:Parameters | findstr /i "ntpserver"
如果 VM 使用的是默认值,则输出将如下所示:
NtpServer REG_SZ time.windows.com,0x8
若要查看当前正使用什么时间提供程序,请键入以下命令:
w32tm /query /source
下面是可能会看到的输出及其含义:
- time.windows.com - 在默认配置中,w32time 会从 time.windows.com 获取时间。 时间同步质量取决于与其的 Internet 连接,并受数据包延迟的影响。 这是你将在物理计算机上获得的常见输出。
- VM IC 时间同步提供程序 - VM 与主机同步时间。 这是你将在 Azure 中运行的虚拟机上获得的常见输出。
- 域服务器 - 当前计算机位于域中,域定义时间同步层次结构。
- 某个其他的服务器 - w32time 已显式配置为从该服务器获取时间。 时间同步质量取决于该时间服务器质量。
- 本地 CMOS 时钟 - 时钟未同步。 如果 w32time 在重新启动后没有足够的时间启动,或者所有配置的时间源都不可用时,则可以获得此输出。
选择加入仅限主机的时间同步
Azure 不断致力于改善主机上的时间同步,并且可以保证所有时间同步基础结构都在 Microsoft 拥有的数据中心中并置。 如果默认设置使用 time.windows.com 作为主要时间源并且有时间同步问题,则可以使用以下命令选择加入仅限主机的时间同步。
将 VMIC 提供程序标记为已启用。
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\TimeProviders\VMICTimeProvider /v Enabled /t REG_DWORD /d 1 /f
将 NTPClient 提供程序标记为“已禁用”。
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\TimeProviders\NtpClient /v Enabled /t REG_DWORD /d 0 /f
重启 w32time 服务。
net stop w32time && net start w32time
Windows Server 2012 和 R2 VM
Windows Server 2012 和 Windows Server 2012 R2 具有不同的时间同步默认设置。默认情况下,w32time 的配置方式更倾向于服务的低开销而非精确的时间。
如果要将 Windows Server 2012 和 2012 R2 部署移动到使用更倾向于精确时间的较新默认设置,则可以应用以下设置。
更新 w32time 轮询并更新间隔,以匹配 Windows Server 2016 设置。
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v MinPollInterval /t REG_DWORD /d 6 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v MaxPollInterval /t REG_DWORD /d 10 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v UpdateInterval /t REG_DWORD /d 100 /f
w32tm /config /update
为了让 w32time 能够使用新的轮询时间间隔,需将 NtpServers 标记为使用它们。 如果服务器使用 0x1 位标记掩码进行注释,则会替代此机制,并且 w32time 将改用 SpecialPollInterval。 确保指定的 NTP 服务器使用 0x8 标志或根本不使用标志:
检查 NTP 服务器正在使用的标志。
w32tm /dumpreg /subkey:Parameters | findstr /i "ntpserver"
后续步骤
下面是有关时间同步的更多详细信息的链接:
- Windows 时间服务工具和设置
- Windows Server 2016 Improvements(Windows Server 2016 改进)
- Windows Server 2016 的准确时间
- Support boundary to configure the Windows Time service for high-accuracy environments(为高准确性环境配置 Windows 时间服务所需的支持边界)