我想在本地网络上设置多个 Stratum 2 时间服务器。与购买三台 1U 服务器相比,虚拟机肯定是一种更便宜的方法。这样做会带来哪些限制?也就是说,准确性会受到多大程度的不利影响?
此外,我的直觉是,这些本地时间服务器应该位于不同的物理机器上,以减轻任何硬件异常。这种直觉正确吗?
编辑 我应该说,我说的“虚拟机”并不是具体来说意思是VMware。相反,我指的是虚拟化实例的一般概念。
答案1
现在是 2023 年,之前对这个问题的所有回答现在都是错误的(至少从 2016 年底开始就如此),至少就 Linux VM 而言。[以下建议可能不适用于 Windows VM。]
如果您在 2023 年或之后阅读本文,请不要相信 2013 年或更早的答案中关于最大 20-100 毫秒精度的说法。现代虚拟机中的时间同步可以在 LAN 上实现低于 1 毫秒的精度,在消费级 Internet 连接上可达到接近 1 毫秒的精度。
以下 ServerFault 问题包含更多最新讨论:
以下是一些说明性的偏移图(按时间顺序排列),以支持我的主张。在某些情况下,我仍然有原始日志文件,我非常乐意将其提供给任何想要自己调查的人。请注意每个实例中的图表比例:
ntpd
2016 年末,在 KVM 虚拟机管理程序(某种 Intel Xeon 处理器)下的 OpenStack 私有云中 运行的虚拟机:ntpd
2020 年中,在独立 KVM 主机(Intel Celeron 1037U 上)上 运行的虚拟机:- 2021 年末
t3a.micro
运行的 AWS (AMD) 实例数量:chronyd
- 2021 年末
t4g.micro
运行的 AWS(ARM)实例数量:chronyd
- 2022 年初
Standard_B1s
运行的 Azure (Intel) 实例数量:chronyd
chronyd
2022 年底在 AWS ECS/Fargate(Intel)中 运行的容器数量:
答案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 级源获取它们的时间,而不是通过互联网。