隔离networking上的单个NTP服务器

我有两台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的burstiburst选项。查看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命令来提供数据集在哪里更改的指示。