Active Directory 时间同步 - 时间服务事件 ID 50

Active Directory 时间同步 - 时间服务事件 ID 50

我有一个包含两个 DC 的 Active Directory 域。林/域中的第一个 DC 是 Server 2012,第二个是 2008 R2。第一个 DC 担任 PDC 模拟器角色。

我偶尔会收到来自源的警告Time-Service,事件 ID 50:

The time service detected a time difference of greater than %1 milliseconds for %2 seconds. The time difference might be caused by synchronization with low-accuracy time sources or by suboptimal network conditions. The time service is no longer synchronized and cannot provide the time to other clients or update the system clock. When a valid time stamp is received from a time service provider, the time service will correct itself.

域中的时间同步配置为使用标志与第二个 DC 同步/syncfromflags:DOMHIER。第一个 DC 配置为使用来自由/syncfromflags:MANUAL /reliable:YES多个英国 stratum 2 服务器组成的对等列表的时间同步,例如ntp2d.mcc.ac.uk

我很困惑为什么我会收到此事件警告。这意味着我的 PDC 仿真器无法与据称可靠的外部时间源同步时间,并且它引用了 900 秒内超过 5 秒的时间差。值得一提的是,我曾经使用过来自 ntp.org 的英国池,但我会更频繁地收到警告。自从更新到一些英国学术时间服务器后,它似乎更可靠了。

有经验的人能解释一下吗 - 也许这纯粹是暂时的?我应该忽略警告吗?我的配置合理吗?

编辑

  1. 我应该补充一点,DC 是虚拟的,并且安装在两个独立的 VMware ESXi/vSphere 物理主机上。

  2. 我还可以确认,根据 MDMarra 的评论和最佳实践,VMware 时间同步已被禁用,因为:c:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe timesync status返回Disabled

编辑2

出现了一些奇怪的新问题。我注意到了一种模式。最初,事件 ID 50 警告会在每天下午 12:30 左右出现。这很有趣,因为我们的 veeam 备份发生在中午 12 点。

自从我进行了这里讨论的更改后,我现在收到的事件 ID 是 51,而不是 50。新的警告内容如下:

The time sample received from peer server.ac.uk differs from the local time by -40 seconds

(或大约 40 秒)。这种情况已经连续两天发生了。现在我更加困惑了。显然,除非我手动干预,否则时间永远不会更新。

该问题似乎与虚拟化和 veeam 有关。veeam 备份 PDCe 时可能会发生一些事情。有什么建议吗?

更新与总结

msemack 在下面列出了出色的资源列表(已接受的答案),其中提供了足够的信息来正确配置域中的时间服务。对于任何希望验证其配置的人来说,这应该是第一个参考点。

我已经通过调整 VMware 时间同步设置解决了最后的“40 秒跳跃”问题(不再有警告),如此处的 veeam 知识库文章中所述:http://www.veeam.com/kb1202

无论如何,如果未来的读者使用 ESXi、veeam 或不使用,这里的资源都是有关时间同步主题的极好信息来源,而 msemack 的回答尤其有价值。

答案1

这是我针对 Windows 域时间同步推荐的配置,由多篇 Microsoft TechNet 文章和博客文章拼凑而成。

  1. 如果你的服务器是虚拟化的,不要使用任何 VMware 工具时间同步功能。只需让 Windows 时间服务 (w32time) 完成其工作即可。 VMware 甚至也这么说。 我认为 Hyper-V 也是如此。此外,如果您有两个都VM 工具Windows 时间服务尝试管理系统时钟,您最终可能会陷入“拉锯战”的局面,您的时钟将不断跳动并且永远不会准确。

  2. 您的主域控制器模拟器应手动配置为与多个外部 NTP 服务器同步(四个是不错的数字)。使用多个 NTP 源可提供冗余,并可在一台服务器开始发送错误时间数据时充当健全性检查(以前发生过)。 Active Directory 假定您的 PDCe 是您网络的中央权威时间源。您域中的其他所有内容都应从 PDCe 同步(包括其他域控制器)。

  3. 我建议您的 PDCe 是物理服务器(如果可能)。其他每个服务器都可以是 VM。我更愿意将 PDCe 用作物理服务器,原因有二:

    3a. 物理服务器不太容易出现时间漂移。 虚拟机时间漂移是一个有据可查的现象。虚拟化服务器的时钟每天会漂移几分钟。这不是一个好的时间源选择!(请注意,即使在物理服务器上,如果没有外部源,实时时钟每天仍会漂移约 2 秒。这就是您需要 NTP 的原因。)

    3b. 我知道物理服务器的日期/时间在冷开机后会正确显示。几年前我遇到过这种情况,在服务器机房完全断电后,虚拟机的时间设置为 UTC 而不是本地时区。我认为它们从 ESX 主机(采用 UTC)获取时间,并且没有正确调整时区。这导致各种服务无法启动。不得不手动更正时间并重新启动所有服务器。

    如果您的 PDCe 当前是 VM,并且您有可用的物理域控制器,那么相对容易地转移角色

  4. Microsoft(及其他公司)建议您使用 Stratum 2 或 Stratum 3 NTP 服务器作为 PDCe 的时间源。

  5. 虽然存在公共的 Stratum 1 服务器,但数量有限,而且经常超载。在不需要时使用 Stratum 1 服务器作为时间源会让你很不自在。(是的,有些人确实需要 Stratum 1。你可能不是其中之一。如果你真的想使用 Stratum 1 源,请为你的本地网络购买 GPS 时钟。)

  6. 所有外部 NTP 源都应位于同一层。 假设您有一个 Stratum 2 源和几个 Stratum 3 源。Windows 时间服务将优先使用 Stratum 2 源。您的 PDCe 将成为 Stratum 3 服务器。w32time 将忽略 Stratum 3 服务器(因为它们并不比您的 PDCe 好)。如果没有人工干预(例如重新启动时间服务),Windows 不会让您的服务器降级到更高/更差的层级。因此,如果您的 Stratum 2 源离线,您将陷入无法回退的境地。

  7. 由于 Windows 时间服务对时间源的层很挑剔,因此我不建议使用pool.ntp.org(至少对于 PDCe 来说不是)。无法保证您从池中获得的服务器的层数。

  8. 相反,我建议你从中选择四个 Stratum 2 服务器ntp.org 列表。尽量选择物理上离您较近的服务器(网络延迟会影响 NTP)。验证服务器是否仍然有效且处于活动状态(此列表会随时间而变化)。请注意,Microsoft 默认的 time.windows.com 因问题而臭名昭著。我不会将我的域名托付给它。

  9. 如果您之前一直在使用 Windows 时间服务,或者您从其他人那里继承了此网络,那么在开始重新配置之前将 w32time 重置为默认设置可能是一个好主意。从 PDCe 开始,在您的域控制器上运行以下命令。

    net stop w32time
    w32tm /unregister  <-- If you get an Access Denied message, reboot.
    w32tm /register
    net start w32time
    

    我建议您在运行这些命令后重新启动服务器 1-2 次,并确保 Windows 时间服务存在、设置为自动并已启动。我曾见过 /unregister 命令直到下次重新启动才生效的情况。然后,当您在执行 Windows 修补程序后重新启动时,您会感到惊讶,w32time 服务突然消失了!

  10. 要在您的 PDCe 上配置 Windows 时间服务,我建议您创建一个特定于 PDCe 的 GPO,该 GPO 使用 DomainRole = 5 的 WMI 过滤器,并将所有 NTP 客户端设置放在此处。否则,您可以使用 w32tm 命令,或手动设置注册表。 请参阅此处查看所有三种方法的示例。

  11. 将 PDCe 配置为使用 NTP 而不是 NT5DS(Windows 时间服务配置中的类型 = NTP)。否则,PDCe 将尝试与自身同步,这不会很好地工作。

  12. 在 Windows 时间服务配置(在 GPO、注册表或 w32tm 中)中输入 NTP 服务器列表,确保您以以下格式输入服务器列表:server1.whatever.com,0x9 server2.otherplace.com,0x9 server3.another.com,0x9。每个服务器末尾的 0x9 标志表示使用 SpecialPollInterval (0x1) 中指定的轮询间隔,并且时间同步是客户端专用的,而不是双向同步 (0x8)。

  13. 配置 PDCe NTP 客户端时,检查特殊轮询间隔。如果您的 PDCe 是物理机箱,请将其设置为 3600 秒(每小时一次)。如果您的 PDCe 是虚拟机,请选择更激进的设置,例如每 15 分钟一次,以应对虚拟机时间漂移。

  14. 一般来说,你不需要通告标志。默认值 10 适用于所有域控制器(PDCe 或其他)。如果合适,它将自动作为时间源进行宣传。

  15. 我建议所有域控制器(PDCe 和其他)都启用 NTP 服务器。我会为域控制器创建一个 GPO 并在那里启用它。如果您不想使用组策略,您可以在注册表中执行此操作,地址为 HKLM\SYSTEM\CCS\Services\W32Time\TimeProviders\NtpServer\Enabled=0x1。

  16. 确保在所有域控制器上将 MaxPosPhaseCorrection 和 MaxNegPhaseCorrection 设置为合理的值!这将保护您的域,以防您的某个外部 NTP 源发生故障并广播非常不准确的时间戳(它已经发生了)。如果你使用的是 Win2008 或更高版本,这些限制应默认设置为 48 小时,但 Win2003 将这些限制设置为无限制。你可以在前面提到的域控制器 GPO 中设置这些,也可以直接在注册表中设置(HKLM\SYSTEM\CCS\Services\W32Time\Config)。

  17. 对于域控制器,我还建议您设置 EventLogFlags = 0x3。这将使您能够更清楚地了解一段时间内的同步进度。请注意,有两个 EventLogFlags 值需要设置。一个位于 HKLM\SYSTEM\CCS\Services\W32Time\Config(适用于所有域控制器)。另一个位于 HKLM\SYSTEM\CCS\Services\W32Time\TimeProviders\NtpClient(仅与 PDCe 相关)。两者都可以通过组策略进行管理。我将它们都设置为 0x3。(请注意,我发现 TechNet 和组策略对此设置的描述存在一些差异。)

  18. 除了一个 PDCe 之外,域中的所有其他 Windows 计算机都应设置为使用 NT5DS 域层次结构进行时间同步。这包括所有其他域控制器、任何其他服务器和您的工作站。NT5DS 是加入域的计算机的默认设置,因此您不需要对其进行干扰。

  19. 请注意,我的域中唯一与时间相关的设置是 (1) 带有 WMI 过滤器的 PDCe NTP 客户端 GPO 和 (2) 启用 NTP 服务器、设置最大相位校正值和 EventLogFlags 的域控制器 GPO。所有组策略时间设置都可以在计算机配置\管理模板\系统\Windows 时间服务下找到。我在注册表中或使用 w32tm 命令没有任何明确的配置。我建议使用组策略来处理这些内容,这样它就可以超越实际的服务器。如果您将来添加新的域控制器或更换 PDCe,一切都会“正常工作”。否则,您必须记住手动配置新服务器。

关于上述配置的一些补充说明:

  • 虽然它可以绕过域层次结构并明确配置客户端同步到某个服务器,但我在这方面运气不佳。我建议您将 PDCe 以外的所有内容保留在 NT5DS 上,让时间服务按照 Microsoft 的意图工作。

  • 请记住,Windows 时间服务旨在对您的系统时钟进行小范围的定期更正。假设您的服务器时钟从一开始就设置正确,w32time 将保持这种状态。如果您的服务器与外部 NTP 源的同步程度过高,它几乎会“放弃”。如果您遵循了上述建议,您应该与外部时间源保持紧密同步。但是,如果您的 VM 环境包含真的时间漂移严重(VM 主机过载、持续快照),您仍然可能不同步。如果是这样,您可以调整几个“峰值检测”设置。不过,这可能是您环境中另一个问题的权宜之计。在深入研究设置之前,请务必确保您已实施上述所有建议!

应用配置更改并检查所有内容:

  • 如果您使用组策略配置时间服务,则更改应很快传播到所有域控制器。您可以gpupdate /force在每个域控制器上运行该命令(从 PDCe 开始)使其立即生效。

  • 如果您决定不使用组策略,而是使用 w32tm 或通过编辑注册表手动配置时间服务,请确保w32tm /config /update在每个受影响的服务器上运行,然后重新启动服务(从 PDCe 开始)。否则您的设置将不会生效!

  • 接下来,w32tm /resync /rediscover在 PDCe 上运行。等待几分钟,然后查看事件查看器中的问题。取消注册/注册时间服务时可能会出现一些错误/警告消息,但之后一切都应该正常。您应该看到有关从 NTP 服务器获取有效时间数据的消息。一旦您确定 PDCe 正常,请转到其他域控制器并运行相同的命令。

  • 一旦时间服务在所有 DC 上同步,您就可以执行w32tm /monitor。确保列出域控制器,并且它们的 RefID 和 Stratum 看起来正确。如果您使用的是 Stratum 2 服务器,您的 PDCe 应该是 Stratum 3。您还可以运行w32tm /query /status /verbose(仅限 Win2008 或更高版本)并查看上次更新的时间。确保它按预期更新。

  • 一旦域控制器恢复正常,就可以w32tm /resync /rediscover在一些工作站和成员服务器上运行。检查事件查看器是否有错误。如果您在其他工作站上弄乱了时间服务,您可能还必须在它们上运行 w32tm unregister/register 命令。

跟进:

  • 为了完整起见,您应确保所有非 Windows NTP 客户端(路由器、交换机、打印服务器等)都指向您的域控制器作为时间源。我建议为 ntp.yourdomain.com 设置一个指向 yourdomain.com 的 CNAME DNS 条目。这样,您就不必在所有设备上明确列出域控制器名称或 IP 地址,这将有助于您将来添加/停用服务器。您的非 Windows NTP 客户端将使用循环 DNS 中出现的任何域控制器。(请注意,这仅在您启用了所有域控制器上的 NTP 服务器时才有效。)

  • 此外,在您的 DHCP 服务器上,确保范围选项 42 配置为指向您的域控制器。任何支持选项 42 的 DHCP 配置设备都会自动与域控制器同步时间。

我的信息来源:

答案2

您可能想看看事件发生时 w32tm 调试日志中显示的内容。

要启用调试日志记录:

w32tm /debug /enable /file:C:\Windows\Debug\w32tm.log /size:50000000 /entries:0-300  

更多信息:
http://blogs.msdn.com/b/w32time/archive/2008/02/28/configuring-the-time-service-enabling-the-debug-log.aspx

至于您的配置是否合理,如果您的 DC 长时间没有作为时间服务器进行广告宣传,那将是一个问题。您可以使用以下命令抽查您的 DC 是否在进行广告宣传:

nltest /dsgetdc:domain.com  

它应该有 TIMESERV 标志。

您可以使用以下命令查看时间服务的详细信息:

w32tm /query /status /verbose  

示例输出:

Leap Indicator: 0(no warning)
Stratum: 2 (secondary reference - syncd by (S)NTP)
Precision: -6 (15.625ms per tick)
Root Delay: 0.0312500s
Root Dispersion: 0.0314141s
ReferenceId: 0x81060F1E (source IP:  129.6.15.30)
Last Successful Sync Time: 3/25/2014 11:55:30 AM
Source: time-c.nist.gov
Poll Interval: 7 (128s)

Phase Offset: 0.0000667s
ClockRate: 0.0156001s
State Machine: 2 (Sync)
Time Source Flags: 0 (None)
Server Role: 64 (Time Service)
Last Sync Error: 0 (The command completed successfully.)
Time since Last Good Sync Time: 97.2535519s

状态机应为“同步”,服务器角色应为“时间服务”。如果源不是对等列表中的外部 NTP 服务器,则会出现问题。需要注意的已知不良源条目是“自由运行系统时钟”或“本地 CMOS 时钟”。

相关内容