Jam*_*sen 16 virtualization ntp
我想在本地网络上设置多个 Stratum 2 时间服务器。与购买三台 1U 服务器相比,虚拟机肯定是一种更便宜的方式。这样做会带来什么限制?也就是说,准确性会在多大程度上受到不利影响?
此外,我的直觉是这些本地时间服务器应该驻留在不同的物理机器上,以减轻任何硬件异常。这种直觉是否正确?
编辑 我应该说“虚拟机”我并不是特别指VMware。相反,我指的是虚拟化实例的一般概念。
sys*_*138 20
一个简单的事实是,VM 内的时钟精度仍然非常糟糕。这来自几个点,但致命的是时间漂移不是恒定的;漂移因子随时变化。NTP 是一种内置时钟补偿的协议,但它的设计内置了静态漂移因子。例如,如果一台物理机每 30 天损失 12 秒,NTP 可以对此进行补偿并且做得很好。但是,如果这台机器每 30 天会丢失 4 到 70 秒,那么 NTP 就不太擅长跟踪这种程度的变化。
使 NTP 在 VM 环境中保持同步的真正原因是,它看到的本地时钟可以在一分钟内改变其漂移系数。根据它检查其父时间源的频率,它可能会导致主要的漂移因素变化并导致它更频繁地不同步。整个组织中的不同步时间级联。
本地网络的 NTP 是一种影响相对较小的协议,内存占用非常小,并且可以愉快地搭载在您的其他网络基础架构服务器上,例如您的 DNS 和 DHCP 服务器。某些路由器还可以提供 NTP 功能,因此您可能需要研究一下。
理想情况下,您需要位于不同位置的两个独立服务器,每个服务器都与一组不同的更高层服务器同步。将两个时间服务器配置为使用另一台服务器作为“对等方”也是一个很好的主意,如果上游时间源之一出错,这将最大限度地减少对时间服务的影响;会发生层级变化,但至少不会报告不同步。最后,善待你的上游时间提供者,并在时间确定后配置你的服务器在轮询之间运行很长时间。这是“服务器”行上的“maxpoll”参数,是同步尝试之间以秒为单位的 2 次幂。
如果您绝对必须为此使用虚拟机,我会设置不少于三个这样的 NTP 服务器。每个都需要在不同的主机上,如果可能的话,在不同的数据中心。正如我刚刚建议的那样,他们需要不同的时间源,并且应该相互对等。然后将所有 NTP 客户端配置为使用所有三个作为父源。确保您的 maxpoll 值足够低,在网络外同步数据包和网络上 30 分钟之间的同步数据包之间不会超过一个半小时。在任何给定时间,三者中至少有一个是同步的。对于只能与一位时间主持人交谈的客户,他们只需要忍受偶尔出现的不同步事件。总体而言,这种情况下的时间质量不会像物理服务器那样准确。
如果我不得不说,我会说你在纯 VM 环境中的共识时间可能会在,哦,30 到 100 毫秒之内。在纯粹的物理环境中,一旦服务器启动足够长的时间来解决,您的共识时间可能会在 10 毫秒以内。
Pau*_*ear 12
现在是 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 上)上
运行的虚拟机:t3a.micro
(AMD) 实例:chronyd
t4g.micro
(ARM) 实例:chronyd
Standard_B1s
(Intel) 实例:chronyd
chronyd
2022 年末在 AWS ECS/Fargate (Intel) 中
运行的大量容器:不幸的是,ntp 和虚拟化不能很好地结合在一起。客户端在大多数情况下都可以,但是 ntp 服务器(esp str2 及更高版本)通常无法在虚拟服务器上可靠地工作。
我是从 xen 和 xen 企业的角度进行评论的,但我相信 vmware/kvm 将是一样的。
关于不同的服务器,是的,你是对的,理想情况下它们也应该在不同的环境中,这样温度/湿度也不会影响准确性,但至少我不介意。也不要忘记,无论你做什么,它仍然不如适当的原子钟准确,所以接受这个(非常轻微的)偏差。