为什么服务器具有完全相同的时间很重要?

Jen*_*der 35 time-synchronization

我已经多次阅读(虽然我现在找不到它)数据中心付出了巨大的努力来确保所有服务器都具有完全相同的时间。包括但不限于担心闰秒。

为什么服务器具有相同的时间如此重要?实际公差是多少?

Mic*_*ton 53

安全

通常,时间戳用于各种身份验证协议以帮助防止重放攻击,其中攻击者可以重用他能够窃取的身份验证令牌(例如通过嗅探网络)。

例如,Kerberos 身份验证就是这样做的。在 Windows 使用的 Kerberos 版本中,默认容差为 5 分钟。

这也被用于双因素身份验证的各种一次性密码协议使用,例如 Google Authenticator、RSA SecurID 等。在这些情况下,容差通常约为 30-60 秒。

如果客户端和服务器之间没有时间同步,就不可能完成身份验证。(最新版本的 MIT Kerberos 通过让请求者和 KDC 在身份验证期间确定它们的时钟之间的偏移量来删除此限制,但这些更改发生在 Windows Server 2012 R2 之后,您需要一段时间才能在 Windows 中看到它版本。但 2FA 的一些实现可能总是需要同步时钟。)

行政

时钟同步可以更轻松地处理不同的系统。例如,如果所有系统都具有相同的时间,那么关联来自多个服务器的日志条目就会容易得多。在这些情况下,您通常可以使用 NTP 提供的 1 秒容差,但理想情况下,您希望时间尽可能紧密同步。PTP 提供了更严格的容差,但实施起来可能要昂贵得多。

  • +1 对分布式系统上的错误情况进行故障排除,日志时间戳不同步:*不再* (16认同)
  • 运行 NTP 守护程序的服务器通常同步到 0.01 秒(几毫秒)内。本地 Windows NTP 同步每天只检查几次,并不准确。有可用于 Windows 的 NTP 客户端,可提供良好的同步。 (3认同)
  • `make` 也会被客户端/服务器 NFS 之间的时钟偏差混淆。 (2认同)

Mik*_*ott 17

主要是为了让您可以关联来自不同设备上的日志的事件。假设您有一个安全事件,有人通过您的 Web 服务器访问您的数据库——您希望防火墙、负载均衡器、Web 服务器和数据库服务器上的时间戳全部匹配,以便您可以找到每个设备上的日志与事件有关的。理想情况下,您希望一切都在几毫秒之内。并且它需要与实际的外部时间同步,以便在必要时您还可以将您的日志与第三方日志相关联。

  • 此外,如果时间不同步,某些安全解决方案(例如 ldap 和/或 kerberos)将失败。一些 HA 解决方案也是如此。 (2认同)

Pet*_*r H 7

从管理的角度来看,这不仅很重要,而且从应用程序级别的相关性来看,时钟同步也很重要。这取决于解决方案的设计方式,运行的应用程序如何获取它们可能处理的任何事务的时间戳。我已经看到事务验证失败,因为与它与之交互的其他应用程序相比,在服务器上运行的应用程序偏移量太大(未来大约 20 秒)。

此外,如果在例如 VMWare ESXi 服务器上进行虚拟化,并且 VM 的时间与管理程序的时间不同步,则诸如 vmotion 之类的操作可能会与管理程序重新同步 VM 时钟,这反过来会导致不可预测的结果如果时差足够大。

我不知道任何实际的容差是什么,因为我认为这在很大程度上取决于系统的类型,但我认为一般来说,保持数据中心中的服务器彼此之间的偏移小于一秒是可以实现的。


Kai*_*har 6

由于您提到了闰秒,因此应该注意它们需要特别困难的处理。

它们通常是通过在 23:59:60 注入一秒来添加的,如果您将分钟和秒字段的时间戳验证为 0-59,这是有问题的。重复 23:59:59 以使其长 2 秒的替代方法并没有好多少,因为这会干扰任何对时间敏感到每秒级别的内容。

谷歌实际上想出了一个很好的解决方案,但似乎还没有被广泛采用。他们的解决方案是应用跳跃“涂抹”并在一段时间内拆分更改,整个过程由 NTP 服务器管理。他们在 2011 年发表了一篇关于它的博客,读起来很有趣,似乎与这个问题有关。


小智 5

每当涉及时间戳时,不同步的设备都会造成逻辑不连贯,例如:A 向 B 发送查询,B 的回复带有早于查询的时间戳,可能导致 A 忽略它。