如何确保甚至保证服务器时间在不同位置的多个数据中心上的数十台服务器之间正确同步?

目前,我们的Web应用程序包含一个逻辑,通过比较数据的时间戳与服务器的date/时间来检查发送到Web服务器的数据是否已过期。

一切顺利,直到数据中心的一些老兄偶然修改了一个Web服务器date/时间,并导致我们的Web服务中断。 我的经理当然不满意这个,并说我们不应该使用时间戳来检查到期时间…无论如何….

networking时间协议是实施的,因为数据中心分布在不同的大洲,所以我们在每个数据中心都有一台NTP服务器。 数据中心内的服务器将具有cron作业,以便从同一个数据中心利用NTP服务器检查时间。 如果时间不同步,它会自动更新服务器date/时间。

但是随后我们的经理们对此并不满意,并认为这仍然可能会导致同样的问题。 例如,如果有人不小心修改NTPdate/时间? 如果所有的NTP服务器都不同步呢? 我们真的可以信任哪些NTP服务器? 和胡说八道。

所以我的问题是:

  1. 当前在多个数据中心或地点之间的服务器之间同步date/时间的做法是什么?
  2. 如何pipe理networking应用程序之间的时间戳? 例如,服务器A向服务器B发送数据(包含服务器A的时间戳)(比较服务器B和数据中的时间戳之间的时间戳,以确定是否已过期,这是为了避免HTTP重放)
  3. 我们是否真的不使用时间戳检查?

感谢和最好的问候

一些来自数据中心的老兄偶然修改了其中一个web服务器的date/时间

这是你的第一个问题。 这很可能是由以下因素造成的:

  • “数据中心的老兄”没有足够的培训和经验
  • 过高的权限

更改系统时间需要pipe理权限。 在不仅具有正确时间,而且使用NTPpipe理时间的系统上手动更改时间,则表示培训不足。 首先解决这个问题,因为直到你解决它,准确的系统时间可能是最明显的问题。 他们还在这个系统上做了什么,为什么呢?

我的经理说…我们不应该使用时间戳检查到期时间

如果有一个可行的备选scheme已经提出,我至less会考虑它。 不知何故,我怀疑事实并非如此。

networking时间协议是实施的,因为数据中心分布在不同的大洲,所以我们在每个数据中心都有一台NTP服务器。

我build议在每个数据中心两个。 我会让他们每个引用一组不同的外部NTP服务器以及相互引用。 这将导致更加稳定的时间,并使您对单个故障更加稳健。 我也是偏执和过度工程的东西,所以就是这样。 不过,NTP服务器在资源方面大致需要零,所以无论在哪里运行。

数据中心内的服务器将具有cron作业,以便从同一个数据中心利用NTP服务器检查时间。 如果时间不同步,它会自动更新服务器date/时间。

这是一个糟糕的计划。 克朗在NTP系统中没有地方改变时间。 服务器应该运行真正的NTP客户端。 这些客户端应该分别引用(两个)本地NTP服务器。

如果要使用cron,请在每台服务器上使用cron来validation服务器是否与本地NTP服务器成功同步。 你可以通过检查ntpq命令的输出来做到这一点。 您应该了解ntpq命令的输出; 这是你的朋友。

为了解决您提出的问题:

但是随后我们的经理们对此并不满意,并认为这仍然可能会导致同样的问题。 例如,如果有人不小心修改NTPdate/时间? 如果所有的NTP服务器都不同步呢? 哪些NTP服务器我们真的可以信任? 和胡说八道。

第一个问题不是疯狂的。 有点偏执,如果采取的极端,但罚款。 答案是:

  • 使用多个独立的参考时钟。 (单个错误将优先于其他来源的稳定时间而被忽略)
  • 使用一个值得信赖的参考时钟(如GPS)(如果您的操作人员可以无意中修改GPS卫星的时间,则比networking服务器的时钟更严重)。
  • 使用encryption密钥来确保您与之通信的参考时钟是您所信任的参考时钟。

第二个是通过configurationNTP服务器相互引用来解决的。 他们倾向于把所有其他的东西放在一起。 也通过使用独立的值得信赖的参考时钟。

  • 如果三个下层参考时钟之一不同步,它将被忽略。
  • 如果两个疯狂不同步,他们将被忽略。
  • 如果三个时钟全部不同步,那么NTP将忽略所有三个时钟,并尽其所能(仍然相当不错,特别是如果有可以参考的同层时钟的话)。
  • 你几乎只需要担心这里的恶意攻击。

描述这些情况可能会变得很复杂,但是NTP首先是稳定的,而如果它有一个准确的来源则是准确的。

就信任而言,大多数运行公共NTP服务器的人没有理由干扰你的时间。 他们中的许多人有理由提供准确的时间。 就提供准确时间的兴趣水平而言,我build议:

  • GPS卫星。
  • NIST NTP服务器。
  • 任何知名的第一层提供者。
  • 任何着名的阶层2提供者。
  • 你的数据中心(假设你购买主机)应该有一个NTP服务器或三个自己的,如果没有其他的自己使用。

另外,这一点很重要: NTP协议devise为在几毫秒内同步时间。 不是几秒钟。 如果你使用cron + ntpdate, 你的时间可以被closures几秒钟 (谢谢你的可变延迟!)。 在类似情况下,NTP将使您的时钟更加稳定和准确。

为所有服务器正确configurationNTP和GMT是最佳实践。 有GPS主时钟服务器可以购买,如果这是一个巨大的交易,你有钱,并可以为每个数据中心购买一个。 这似乎是一个操作问题 – 他们应该监视服务器上的时间,并警惕如果他们显着摆脱怪物。