我有两台Linux机器(A和B)在一个孤立的networking上。 他们必须时间同步。 机器A间歇供电,并且必须提供时间,因为它连接到授权时间源(GPS)。 机器B只有在机器A上电的情况下才供电,但是它是embedded式Linux设备,其电源状态会频繁变化。 这两台机器都无法访问其他系统。 这是一个封闭的networking。
我知道这对于NTP来说是相当高的,因为NTP通常期望与多个服务器联系。 机器A与GPS同步正常,机器B可以到达机器A甚至做时间查询,但是机器A不受信任(也许是自己的?)。 机器A在一小时后,突然发生了变化,机器B工作。 但是,当机器A停机(并且因此机器B)时,机器B再次无法find一个很好的时间同步。
这是一些ntpdate信息。 请注意,即使机器A的层数为1,操作也会失败,并以相同的输出结束。
10.10.10.1:服务器掉线:分层太高 服务器10.10.10.1,端口123 分层16,精度-19,飞跃11,信任000 refid [10.10.10.1],延迟0.02614,色散0.00000 在filter4中传输4 参考时间:00000000.00000000 Thu,2036年2月7日6:28:16.000 始发时间戳:d3a9bdc4.27ebb350 Thu,Jul 12 2012 21:19:00.155 传输时间戳:bc17c803.b42dfffe星期六,一月1 2000 0:25:39.703 滤波器延迟:0.02625 0.02614 0.02618 0.02625 0.00000 0.00000 0.00000 0.00000 filter偏移量:39544160 39544160 39544160 39544160 0.000000 0.000000 0.000000 0.000000 延迟0.02614,色散0.00000 抵消了395441600.451568 1月1日00:25:39 ntpdate [677]:找不到适合于同步的服务器
我的猜测是,机器A只是不相信自己的服务时间。 51分钟后(可能更早发生,我不知道)的正常运行时间和时钟同步到GPS,机器A开始正确服务时间,机器B拿起它。 我需要这个发生在早些时候。 就像在几秒钟内如果可能的话。
通过以下configuration(以及许多等待),它最终成功。
机器一个ntp.conf:
服务器127.127.28.0更喜欢真正的minpoll 4 maxpoll 4 软糖127.127.28.0地层1次1 0.420 refid GPS
机器B ntp.conf:
服务器10.10.10.1更喜欢真正的minpoll 4 maxpoll 4
机器B上的ntpq -c对等点没有很好的时间修复:
当轮询到达延迟偏移抖动时,远程反转 ================================================== ============================ 10.10.10.1。步骤 16 u 9 16 0 0.000 0.000 0.000
机器B上的ntp1 -c对等机器具有良好的时间修复:
当轮询到达延迟偏移抖动时,远程反转 ================================================== ============================ * 10.10.10.1 SHM(0)2 u 7 16 17 0.669 2.597 1.808
那么现在问题就变成了:我怎样才能使Machine A快速地信任自己呢?
机器B前后机器A的一些debugging输出决定了机器A足够好用。
之前..
〜#ntpq -c rv associd = 0 status = c418 leap_alarm,sync_uhf_radio,1事件,no_sys_peer, version =“ntpd [email protected] Fri Feb 24 15:01:45 UTC 2012(1)”, processor =“armv7l”,system =“Linux / 2.6.35.14”,leap = 11,stratum = 2, precision = -19,rootdelay = 0.000,rootdisp = 44.537,refid = SHM(0), reftime = d3ab0053.43b44780 Fri,Jul 13 2012 20:15:15.264, clock = d3ab0062.e7e03154 Fri,Jul 13 2012 20:15:30.905,peer = 34819,tc = 4, mintc = 3,偏移量= 0.000,频率= 0.000,sys_jitter = 3.853, clk_jitter = 36.492,clk_wander = 0.000
后…
〜#ntpq -c rv associd = 0 status = 0415 leap_none,sync_uhf_radio,1事件,clock_sync, version =“ntpd [email protected] Fri Feb 24 15:01:45 UTC 2012(1)”, processor =“armv7l”,system =“Linux / 2.6.35.14”,leap = 00,stratum = 2, precision = -19,rootdelay = 0.000,rootdisp = 41.278,refid = SHM(0), reftime = d3ab0063.43b37856 Fri,Jul 13 2012 20:15:31.264, clock = d3ab006d.9ee53ec2 Fri,Jul 13 2012 20:15:41.620,peer = 34819,tc = 4, mintc = 3,offset = 0.000,频率= 43.896,sys_jitter = 0.762, clk_jitter = 36.953,clk_wander = 0.000
NTP应该可以正常工作。 看看启动时快速同步的一些选项。 查看系统B的burst
和iburst
选项。查看GPS时钟源的true
选项。
考虑在两个系统上使用硬件时钟作为备份时间源。 设置一个更高的层次系统B.像下面这样的东西应该工作:
server 127.127.1.0 fudge 127.127.1.0 stratum 8
观察ntpq -c peers
的输出以查看何时获得可信的时钟源。 正常情况下, ntp
在信任它之前需要来自可信时间源的许多响应。 这由每行的第一个字符表示。
虽然NTP喜欢更多的来源,但是在一个阶层中任何奇数的时间源应该工作得很好。 由于您只有两台服务器和一个GPS时钟,所以信源的优先级(层数)应该从GPS,服务器A的时钟,服务器B的时钟增加。每增加三层或四层之间的层数,将确保优先级受到尊重。
编辑:如果您有服务器A上的busybox NTP服务器,它可能是值得安装完整的ntp服务器软件包。 了解服务器A发生了什么事情应该会很快解决您的问题。 在服务器B应该信任它之前,您至less需要一个可信的时间源。 如果ntpq -c peers
不起作用,那么你可以尝试ntpdc peers
。 这两个命令都允许您查询其他主机。 同peerstats
日志也可能有用。
在服务器B上使用ntpclientlogging了busybox ntp如何logging正在发生的事情
如果服务器没有长时间停机,时钟应该合理接近正确的时间。 如果你需要同步这两个系统,那应该就足够了。 全球定位系统将最终与现实世界同步。
'ntpd -q'快速同步,但退出(ntpdate行为)。 在没有quit选项的情况下,需要使用ntpd
命令进行连续同步。
编辑2:我检查我的服务器,发现其中一台服务器closures了一秒钟。 在解决这个问题的时候,我使用了设置。 iburst
非常快速地获得一个可信任的服务器。 如果没有多个其他可信源,则确保时钟驱动器是可信的。 时钟花了一分多钟才被本地信任,可以远程信任。
testing时,应该能够在同步后重新启动ntpd
进程,并testing设置的工作速度。 在上面的情况下,服务器B可能需要重新启动以testing它同步的速度。 在监视ntpd
更改时,我使用如下行:
while ntpq -c peers localhost; do sleep 10; done
主机名和睡眠时间根据需要进行调整。 在某些情况下,我会在循环中链接两个或多个ntpq
命令行。 这样做时,我使用echo和/或date命令来提供数据集在哪里更改的指示。