我正在配置 VPS 来记录一些时间序列在线数据,我注意到时间不对。我希望精度能超过 10 秒。
我读到过,VPS 计时与本机 (x86) 系统不同,因为误差会根据系统负载或其他原因而不同?因此 ntpd 可能不适合在 VPS 内部运行?
道听途说就够了,我想知道:如何在 VPS 上保持正确的系统时间?这是否因虚拟化技术或 VPS 提供商而异?为什么 ntpd 不适合在 VPS 内部运行?
答案1
简短版本:容器中的计时(大多数 VPS 都是如此)是主机的责任;您可能需要游说您的 VPS 提供商来解决这个问题。
笔记:这个建议确实不是如果您的 VPS 是 Xen(例如 AWS)、KVM(例如 GCE)或 Hyper-V(例如 Azure)虚拟机,则适用。在这种情况下,内核及其时钟驱动程序是虚拟化的,您应该像对待裸机一样对待它们,并运行 NTP 客户端,例如ntpd
、chronyd
或systemd-timesyncd
。
详细版本:如果您的 VPS 是典型的容器,则 NTP 无法规范本地时钟。内核时钟未容器化(命名空间化),并且大多数容器管理器(例如 OpenVZ、Docker、LXC/LXD)不向容器授予内核时间功能。(参见https://bugs.launchpad.net/ubuntu/+source/chrony/+bug/1589780在 Ubuntu 和 Chrony 的背景下讨论此问题。
如果您从典型的提供商处租用 VPS,听起来他们要么根本没有配置 NTP,要么配置不当并且没有对其进行监控。
您可以使用类似的配置https://gist.github.com/kuzetsa/4a64cd1a95260d0bc5cc1b8aeaba1878让 ntpd 在您的容器中运行,而无需尝试更改本地时钟(该disable kernel
行是重点部分)。这将允许您监视主机的 NTP 服务器(如果有);如果您想将您的 VPS 主机的时钟与某些外部源进行比较,请添加 pool.ntp.org 或其他公共 NTP 服务。
答案2
如果您可以访问硬件、虚拟(VM)或物理(裸机/虚拟机管理程序),则可以并且应该使用 NTP 进行同步。
通过配置 ntpd 并在各种主机上启用统计信息来进行自己的实验。与您最喜欢的参考时钟进行比较,看看它们的性能如何。
存在运营挑战非常精确计时和 VM。然而,这些往往只在比个位数秒更好的数量级上才有意义。