我希望一组服务器拥有完全相同的时间。所有服务器都使用 UTC 时区。
当前使用 NTP,我仍然看到它们似乎每次相差 10-20 毫秒。
让它们每次都准时到达的最佳方法是什么?
答案1
将 ntpd 连接到 LAN 之外的 NTP 服务器以进行时间同步可能会导致您看到的不一致,因为每个连接都必须经过多个路由器,每个路由器的延迟都不可预测,具体取决于流量。如果每台服务器都自行连接,则所有服务器之间的时间将略有偏差。
为了避免不一致,最好的方法是创建一个本地 NTP 服务器,与外部 NTP 服务器池同步时间,并使用该本地 NTP 服务器作为本地服务器的“主时钟”:
本地 NTP 服务器
您可将此服务器配置为与地理位置靠近您的池中的 NTP 服务器同步。本网站您可以获取服务器列表并找到离您最近的服务器。它将与这些服务器保持时间同步。
服务器上的 NTP 守护进程
配置每台服务器上的 ntpd 以连接到本地 NTP 服务器。由于您在非常快速、低延迟的 LAN 上维护本地 NTP 服务器,因此偏差将很小。
使用此实现,您的服务器上的时间将彼此同步。
答案2
正如其他人指出的那样,从公共服务器同步的本地 NTP 服务器并为其他服务器提供低延迟服务可能是您能做的最好的事情。
如果您能看到天空,您可以从 GPS 获得非常精确的外部同步,但这通常不切实际。
我怀疑如果您遇到问题,则您遇到了以下两个问题之一:要么您正在轮询 NTP(例如来自 cron 的 ntpdate)而不是运行本地守护程序,要么您的问题实际上与测试和网络中的延迟有关,并且您的服务器可能比您想象的同步得更好。
答案3
- 您是否考虑过从 NTP 转向 PTP? http://en.wikipedia.org/wiki/Precision_Time_Protocol
- 如果您无法摆脱 NTP,那么多播可能会有所帮助。 http://doc.ntp.org/4.1.1/confopt.htm
不管怎样,最明显的一点就是要确保时间源的质量。要么将自己的 GPS 接收器和/或原子钟连接到数据中心,要么连接到多个外部 0 层时钟。后期策略有点不确定。你永远不知道互联网上哪种时钟将其作为 0 层提供,它们可以是任何东西,从真正好的时钟到爷爷的滴答声。
ps 用于ntpq -c peers
查看您正在连接的时钟的层级。有关调试的更多信息,请参阅http://www.clock.org/ntp/debug.html