![如何确保甚至保证不同位置的多个数据中心的数十台服务器之间的服务器时间正确同步?](https://linux22.com/image/559934/%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%E7%94%9A%E8%87%B3%E4%BF%9D%E8%AF%81%E4%B8%8D%E5%90%8C%E4%BD%8D%E7%BD%AE%E7%9A%84%E5%A4%9A%E4%B8%AA%E6%95%B0%E6%8D%AE%E4%B8%AD%E5%BF%83%E7%9A%84%E6%95%B0%E5%8D%81%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B9%8B%E9%97%B4%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%97%B6%E9%97%B4%E6%AD%A3%E7%A1%AE%E5%90%8C%E6%AD%A5%EF%BC%9F.png)
目前,我们的网络应用程序包含一种逻辑,通过将数据的时间戳与服务器的日期/时间进行比较来检查发送到网络服务器的数据是否过期。
一切顺利,直到数据中心的某个人意外修改了某个 Web 服务器的日期/时间,导致我们的 Web 服务出现一些中断。我的经理当然对此不满意,并说我们不应该首先使用时间戳来检查到期时间……无论如何……
由于数据中心分布在不同大洲,因此我们在每个数据中心都部署了一台 NTP 服务器,因此我们实施了网络时间协议。数据中心内的服务器将使用 cron 作业来检查同一数据中心的 NTP 服务器的时间。如果时间不同步,它将自动更新服务器日期/时间。
但我们的管理人员对此并不满意,并认为它仍然很容易导致同样的问题。例如,如果有人意外修改了 NTP 日期/时间怎么办?如果所有 NTP 服务器彼此不同步怎么办?我们真正可以信任哪些 NTP 服务器?等等。
我的问题是:
- 目前跨多个数据中心或位置的服务器之间同步日期/时间的做法是什么?
- 如何管理 Web 应用之间的时间戳?例如,服务器 A 将数据(包含服务器 A 的时间戳)发送到服务器 B(比较服务器 B 之间的时间戳和数据中的时间戳,以查看数据是否已过期。这是为了避免 HTTP 重放)
- 我们真的不应该使用时间戳检查吗?
感谢并致以最诚挚的问候
答案1
数据中心的一些人意外修改了某个 Web 服务器的日期/时间
这是你遇到的第一个问题。它很可能是由以下因素造成的:
- “数据中心的工作人员”没有接受足够的培训,
- 权限过高
更改系统时间需要管理员权限。在不仅时间正确而且使用 NTP 管理时间的系统上手动更改时间是培训不足的表现。首先解决此问题,因为在解决此问题之前,准确的系统时间可能是最明显的问题。他们还在该系统上做什么,为什么?
我的经理……说我们不应该首先使用时间戳来检查到期日期
如果有人提出可行的替代方案,我至少会考虑。不知为何,我怀疑情况并非如此。
实施网络时间协议,由于数据中心分布在不同的大陆,因此我们在每个数据中心都有一个 NTP 服务器。
我建议每个数据中心都安装两个。我会让它们各自引用一组不同的外部 NTP 服务器,并相互引用。这样时间会更稳定,对单一故障的鲁棒性也会更强。我也很偏执,喜欢过度设计,所以就是这样。不过,NTP 服务器在资源方面几乎不需要,所以无论在哪里都可以运行它们。
数据中心内的服务器将有 cron 作业来检查同一数据中心的 NTP 服务器的时间。如果时间不同步,它将自动更新服务器日期/时间。
这是一个糟糕的计划。Cron 无法在 NTP 系统中更改时间。服务器应运行真正的 NTP 客户端。这些客户端应分别引用(两个)本地 NTP 服务器。
如果要使用 cron,请在每台服务器上使用 cron 来验证服务器是否已成功与两个本地 NTP 服务器同步。您可以通过检查 ntpq 命令的输出来执行此操作。您应该了解 ntpq 命令的输出;它是您的朋友。
为了回答您报告所提出的问题:
但我们的管理人员对此并不满意,并认为它仍然很容易导致同样的问题。例如,如果有人意外修改了 NTP 日期/时间怎么办?如果所有 NTP 服务器彼此不同步怎么办?我们真正可以信任哪些 NTP 服务器?等等。
第一个问题并不疯狂。如果极端一点,就有点偏执,但没关系。答案是:
- 使用多个独立参考时钟。(相比来自其他来源的稳定时间,单个错误将被忽略)
- 使用可信赖的参考时钟(例如 GPS)(如果您的操作人员可以意外修改 GPS 卫星上的时间,那么您遇到的问题比 Web 服务器时钟更严重。)
- 使用加密密钥来确保您通信的参考时钟是您信任的。
第二个问题可以通过配置 NTP 服务器来相互参考来解决。在其他条件相同的情况下,它们会趋于一致。也可以通过使用独立的、值得信赖的参考时钟来解决。
- 如果三个较低层参考时钟中的一个不同步,它将被忽略。
- 如果两个人严重不同步,他们就会被忽视。
- 如果所有三个时钟严重不同步,NTP 将忽略所有这三个时钟并尽力而为(仍然相当不错,特别是如果有一个同层时钟可以参考的话。)
- 您几乎只需要担心这里的恶意攻击。
描述这些情况可能会很复杂,但 NTP 首先是稳定的,如果有准确的来源,则是准确的。
就信任而言,大多数运行公共 NTP 服务器的人没有理由干扰您的时间。他们中的许多人都有理由提供准确的时间。就提供准确时间的兴趣程度而言,我建议:
- GPS 卫星。
- NIST NTP 服务器。
- 任何知名的第一层提供商。
- 任何知名的 2 层提供商。
- 您的数据中心(假设您购买了托管服务)可能应该有一个或三个自己的 NTP 服务器,供自己使用。
此外,这一点也很重要:网络时间协议 (NTP)协议旨在将时间同步到毫秒以内。 不是秒。 如果你使用 cron+ ntpdate,你的时间可能会相差几秒(感谢可变延迟!)。在类似情况下,NTP 将使您的时钟更加稳定和准确。
答案2
为所有服务器正确配置 NTP 和 GMT 是最佳做法。您可以购买 GPS 主时钟服务器,如果这是一笔大买卖,您有足够的资金,并且可以证明为每个数据中心购买一台是合理的。这似乎是一个运营问题——他们应该监控服务器上的时间,并在时间严重失常时发出警报。