我多次读到(虽然我现在找不到)数据中心会付出巨大努力来确保所有服务器的时间完全相同。包括但不限于担心闰秒。
为什么服务器保持同步如此重要?实际的容差是多少?
答案1
安全
一般来说,时间戳用于各种身份验证协议,以帮助防止重放攻击,攻击者可以重复使用他窃取的身份验证令牌(例如通过嗅探网络)。
例如,Kerberos 身份验证就是这样做的。在 Windows 中使用的 Kerberos 版本中,默认容忍时间为 5 分钟。
这也被用于双因素身份验证的各种一次性密码协议所使用,例如 Google Authenticator、RSA SecurID 等。在这些情况下,容忍度通常在 30-60 秒左右。
如果客户端和服务器之间的时间不同步,就无法完成身份验证。(最新版本的 MIT Kerberos 已取消此限制,方法是让请求者和 KDC 在身份验证期间确定其时钟之间的偏移量,但这些更改发生在 Windows Server 2012 R2 之后,您还需要一段时间才能在 Windows 版本中看到它。但某些 2FA 实现可能始终需要同步时钟。)
行政
时钟同步使不同系统之间的协作变得更加容易。例如,如果所有系统的时间相同,那么关联来自多个服务器的日志条目就会变得容易得多。在这些情况下,您通常可以使用 1 秒的容差(NTP 可以提供),但理想情况下,您希望时间尽可能接近同步。PTP 提供了更严格的容差,但实施起来可能要昂贵得多。
答案2
主要是为了关联来自不同设备上的日志的事件。假设您发生了一起安全事件,有人通过您的 Web 服务器访问您的数据库——您希望防火墙、负载均衡器、Web 服务器和数据库服务器上的时间戳全部匹配,以便您可以找到与该事件相关的每台设备上的日志。理想情况下,您希望一切都在几毫秒内完成。并且它需要与实际的外部时间同步,以便您还可以在必要时将您的日志与第三方日志关联起来。
答案3
这不仅从管理角度很重要,而且从应用程序级别相关性来看,时钟同步也很重要。这取决于解决方案的设计方式,以及运行的应用程序如何获取它们可能处理的任何事务的时间戳。我曾看到过事务验证失败,因为运行在服务器上的应用程序与它正在交互的其他应用程序相比偏移量太大(大约是未来 20 秒)。
另外,如果在 VMWare ESXi 服务器等上进行虚拟化,并且虚拟机的时间与虚拟机管理程序的时间不同步,则诸如 vmotion 之类的操作可能会将虚拟机时钟与虚拟机管理程序重新同步,而如果时间差足够大,这反过来会导致不可预测的结果。
我不知道实际的容差是多少,因为我认为这在很大程度上取决于系统的类型,但我认为一般来说,可以让数据中心内的服务器彼此之间的偏移量小于一秒。
答案4
只要涉及时间戳,不同步的设备就会产生逻辑上的不连贯性,例如:A 向 B 发送查询,而 B 的回复带有早于查询的时间戳,可能导致 A 忽略它。