我正在寻找解决方案但没有找到明确的答案。
在我的公司,我们所有的服务器都与我们的一台私人 ntp 服务器同步时间(如果我没记错的话,它们是第 3 层)。
这些第 3 层服务器当然被配置为获取一些公共 NTP 服务器的时间(如果我没记错的话,是第 2 层)
由于与我们的业务相关的一些规定,我们需要不断确保我们的客户服务器与第 2 层服务器不会产生太大的偏差。
因此,我们正在监控这一点,但我们的客户端服务器看到的偏移量只是我们第 5 层服务器的偏移量,有什么办法可以获取第 2 层服务器的偏移量,即使它配置为使用内部第 3 层服务器?请注意,我们的客户端服务器无法访问互联网,我们的目标是保持这种状态。
我想知道在我们的客户端服务器上是否可以做一些事情来通过计算获得第 2 层的偏移量?(偏移客户端 srv + 偏移层 3?)还有其他可能性吗?
我想这是很多公司都关心的问题,应该有解决方案
提前谢谢
编辑:我改变了一开始写的层号,因为我的理解此时并不正确
答案1
互联网上 81 毫秒的根散布是相当可信的。层 0 可能位于世界的一半。总误差在多跳中累加。
考虑添加 NTP 硬件设备,配备无线电接收器和合适的振荡器。您的性能要求证明了成本和不便。额外的好处是,它不需要互联网即可工作,但也能保留您的互联网资源。
答案2
您是否考虑过使用 GPS 接收器(可能与 gpsd 结合)作为 NTP 的时间源?
答案3
这个问题的答案是验证内部 NTP 服务器是否发送正确的时间?。 简短的摘要:
确保您有一个良好的配置。
NTP 已经将监视其上游层的偏移作为其正常运行的一部分,因此您只需要使用适当的工具来提取该信息并将其插入您的警报/遥测系统。
您的ntpq
输出显示第 3 层服务器的系统偏移量差异小于 1 毫秒。这几乎是您在不实施特殊措施的情况下通过 Internet 链接可以预期的最佳效果。根散布有点高,但这几乎完全是由于您的上游,因为您对它们的延迟仅略大于 2 毫秒。
如果您将内部系统配置为与 3 层服务器同步,并且它们显示相似的系统偏移量,那么您就实现了目标。但请确保您至少有 4 个公共 1/2 层服务器和至少 4 个内部服务器。
不要忘记阅读 NTP 最佳当前实践草案 RFC,它解释了为什么需要多个源以及为什么监控很重要。
答案4
好的,我找到了解决方案!我可以使用 ntpdc 命令询问我的层 n-1 与层 n-2 之间的偏移量是多少,然后我可以在 peerstat 文件上查看我的客户端服务器与层 n-1 之间的偏移量是多少。我写了一个小脚本:
#!/bin/bash
#determine the IP of the currently used stratum n-1 srv as NTP source
used_ntp_source=`ntpq -np | grep "*" | awk '{print $1}' | sed 's/*//'`
#determine the offset between used stratum n-1 srv and the stratum n-2 (in seconds)
offset_between_stratn_1_and_stratn_2=`ntpdc -np $used_ntp_source | grep "*" | awk '{print \$7}'`
#determine the offset between localhost and the stratum n-1 srv (in seconds),looking in the last 20 lines of peerstats file, but keeping only the last one
local_offset_with_stratn_1=`tail -20 /var/log/ntpstats/peerstats | grep $used_ntp_source | tail -1 | awk '{print $5}'`
#calculation
calculated_offset=$(python -c "from decimal import Decimal; print(Decimal('$offset_between_stratn_1_and_stratn_2') + Decimal('$local_offset_with_stratn_1'))")
echo "the calculated offset is $calculated_offset"