在虚拟机中运行 NTP 服务器有哪些限制?(2010)

在虚拟机中运行 NTP 服务器有哪些限制?(2010)

我想在本地网络上设置多个 Stratum 2 时间服务器。与购买三台 1U 服务器相比,虚拟机肯定是一种更便宜的方法。这样做会带来哪些限制?也就是说,准确性会受到多大程度的不利影响?

此外,我的直觉是,这些本地时间服务器应该位于不同的物理机器上,以减轻任何硬件异常。这种直觉正确吗?

编辑 我应该说,我说的“虚拟机”并不是具体来说意思是VMware。相反,我指的是虚拟化实例的一般概念。

答案1

现在是 2023 年,之前对这个问题的所有回答现在都是错误的(至少从 2016 年底开始就如此),至少就 Linux VM 而言。[以下建议可能不适用于 Windows VM。]

如果您在 2023 年或之后阅读本文,请不要相信 2013 年或更早的答案中关于最大 20-100 毫秒精度的说法。现代虚拟机中的时间同步可以在 LAN 上实现低于 1 毫秒的精度,在消费级 Internet 连接上可达到接近 1 毫秒的精度。

以下 ServerFault 问题包含更多最新讨论:

以下是一些说明性的偏移图(按时间顺序排列),以支持我的主张。在某些情况下,我仍然有原始日志文件,我非常乐意将其提供给任何想要自己调查的人。请注意每个实例中的图表比例:

  1. ntpd2016 年末,在 KVM 虚拟机管理程序(某种 Intel Xeon 处理器)下的 OpenStack 私有云中 运行的虚拟机:偏移-kvm
  2. ntpd2020 年中,在独立 KVM 主机(Intel Celeron 1037U 上)上 运行的虚拟机:偏移-kvm-celeron
  3. 2021 年末 t3a.micro运行的 AWS (AMD) 实例数量:chronyd偏移量-aws-t3a
  4. 2021 年末 t4g.micro运行的 AWS(ARM)实例数量:chronyd偏移量-aws-t4g
  5. 2022 年初 Standard_B1s运行的 Azure (Intel) 实例数量:chronyd偏移量-azure-b1s
  6. chronyd2022 年底在 AWS ECS/Fargate(Intel)中 运行的容器数量:offset-fargate

答案2

简单的事实是,在 2010 年,虚拟机内的时钟精度仍然非常差。这有几个原因,但最关键的是时间漂移不是恒定的;漂移因子时时刻刻都在变化。NTP 是一种内置时钟补偿的协议,但它设计时就内置了静态漂移因子。例如,如果一台物理机器每 30 天丢失 12 秒,NTP 可以补偿,而且效果非常好。但如果这台机器每 30 天可以丢失 4 到 70 秒的时间,NTP 就不太擅长跟踪这种程度的变化。

NTP 在虚拟机环境中很难保持同步的原因在于,它所看到的本地时钟可以在一分钟内改变其漂移因子。根据它检查其父时间源的频率,它可能会导致漂移因子发生重大变化,并导致其更频繁地不同步。不同步的时间会在整个组织中蔓延。

本地网络的 NTP 是一种影响相对较小的协议,占用的内存非常小,可以顺利地搭载在您的其他网络基础设施服务器(如 DNS 和 DHCP 服务器)上。某些路由器还可以提供 NTP 功能,因此您可能需要研究一下。

理想情况下,您需要两个位于不同位置的独立服务器,每个服务器都与一组不同的较高层服务器同步。如果两个时间服务器都配置为使用另一个服务器作为“对等服务器”,那么这也是一个非常好的主意,如果上游时间源之一出现问题,这将最大限度地减少对时间服务的影响;虽然会有一个层级变化,但至少不会报告不同步。最后,对上游时间提供商要友善,并在时间确定后将您的服务器配置为在轮询之间间隔很长的时间。这是“服务器”行上的“maxpoll”参数,是同步尝试间隔的秒数,单位为 2 的幂。

如果您确实必须为此使用虚拟机,我会设置不少于三个这样的 NTP 服务器。每个服务器都需要位于不同的主机上,如果可能的话,位于不同的数据中心。正如我刚才建议的那样,它们需要不同的时间源,并且应该相互对等。然后将所有 NTP 客户端配置为使用所有三个作为父源。确保您的 maxpoll 值足够低,以使同步数据包在网络外的时间间隔不超过一个半小时,在网络上的时间间隔不超过 30 分钟。很有可能三个服务器中至少有一个在任何给定时间是同步的。对于只能与一个时间主机通信的客户端,他们只需忍受偶尔的不同步事件。总的来说,在这种情况下,时间质量不会像物理服务器那样精确。

如果我不得不大致估计一下,我会说在纯虚拟机环境中,您的共识时间可能在 30 到 100 毫秒之内。在纯物理环境中,一旦时间服务器运行足够长的时间以使时间稳定下来,您的共识时间可能在 10 毫秒之内。

答案3

查看 vmware 计时文档。在 VM 中运行 NTP 守护程序可能不是一个好主意,特别是当您需要可靠的时间时。

答案4

在虚拟化环境中运行 NTP,您很幸运能达到 20ms 的精度(这就是我们使用 VMware 所实现的)。虚拟化时钟偏差非常严重,尤其是在存在资源争用的虚拟化环境中。

这取决于您需要多精确。如果您只关心秒(例如 Web 服务器),那么只要您没有资源争用,那么就没问题。如果您想要毫秒级的精确度(例如繁忙的数据库、日志服务器、研究项目),那么就忘掉虚拟化时间服务器吧。

NTP 服务器应始终位于物理主机上。您应至少有 3 个 NTP 服务器在池中对等(这样,一个恶意服务器就会被池投票否决);如果可能,请从 GPS 或其他本地 0 级源获取它们的时间,而不是通过互联网。

相关内容