为什么NTP同步到LOCAL而不是远程服务器?

所以,我试图debugging我当前的NTP设置,并发现他偏离我的单个configuration的服务器超过3秒,而不是调整。 ntpq输出中的LOCAL(0)上的星号似乎表示系统正在与其自身而非10.130.33.201服务器(这是我们系统上的另一个Linux盒,我们希望一切都同步到)愉快地同步。

ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== 10.130.33.201 LOCAL(0) 9 u 49 64 377 0.242 -3742.2 1.049 *LOCAL(0) .LOCL. 10 l 2 64 377 0.000 0.000 0.001 

这是我的ntp.conf文件。 由别人写的,所以我不是100%确定一切都是正确的。

 server 10.130.33.201 burst iburst minpoll 4 maxpoll 11 driftfile /mnt/active/etc/ntp.drift restrict -4 default nomodify nopeer notrap restrict -6 default ignore # Undisciplined Local Clock. This is a fake driver intended for backup # and when no outside source of synchronized time is available. server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 

我已经读过关于爆发和iburst和minpoll / maxpoll,所以我意识到那些可能不需要,但我不认为这与我目前的问题有任何关系。

另外,由于configuration文件是如何部署的,configuration文件将需要很多工作来改变,所以我希望没有什么是必须改变的。 我希望这是我不理解NTP如何工作的情况。


编辑 –

所以,看起来这是这个问题的重复,但是我不觉得海报有足够的答案,所以我仍然想知道为什么当地时间比服务器更受欢迎。 此外,根据下面的答案之一,我试图在configuration的服务器行上使用prefer关键字,然后重新启动,但似乎没有效果。

如果我删除configuration中的所有“本地”行作为另一个问题的答案build议,如果服务器无法访问会发生什么? NTP死亡还是继续尝试?


重要编辑 –

好的,通常,10.130.33.201(“服务器”)无法访问互联网,并没有GPS时间源使用。 重要的是,系统中的所有设备与服务器的时间相同,而不pipe实际时间有多正确。

所以,为了看看会发生什么,我将一个NTP池服务器添加到服务器的configuration文件中,以便从中获取时间,而不是从本地获取时间。 它现在正确地从NTP时间服务器获得时间。

我这样做后,客户端现在与服务器同步,而不是喜欢本地(0)

  ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *10.130.33.201 38.229.71.1 3 u 58 64 377 0.216 715621. 1.001 LOCAL(0) .LOCL. 10 l 18 64 377 0.000 0.000 0.001 

新问题 – 当我的服务器使用本地(原来的例子),似乎客户说:“噢,10.130.33.201正在使用本地(0)。嗯,我也有一个本地(0)服务器 – – 我会直接使用它,而不是通过10.130.33.201获取相同的信息“。

是这样吗? 他们是否试图“直接到源”是不正确的本地(0)? 我需要我的服务器从本地(0)获得时间,我需要客户端从服务器获得时间。 现在从客户端configuration文件中删除“本地”服务器是唯一的select,但我想明白为什么发生这种情况,如果可能的话,避免改变他们的configuration(configuration更改将是很多工作,因为我们的环境…)。

此外, 这看起来像没有一个很好的答案的另一个重复。

只configuration一台NTP服务器,该algorithm并不完全确定谁信任。 即使远程主机的层数较低,我敢打赌algorithm认为当地时间更值得信赖。

尝试在您的server语句中使用prefer关键字将其设置为优先时间源。


编辑 –

所以,看起来这是这个问题的重复,但是我不觉得海报有足够的答案,所以我仍然想知道为什么当地时间比服务器更受欢迎。

为了得到真正充分的答案,你将会深入挖掘一个非常复杂的algorithm。 文档甚至没有具体,但我确定有一个白皮书或规范在那里。

如果我删除configuration中的所有“本地”行作为另一个问题的答案build议,如果服务器无法访问会发生什么? NTP死亡还是继续尝试?

NTP守护程序不会停止或停止,但在到达远程服务器之后它会退出同步时间。 这就是为什么最好的做法是build议最less使用三台远程服务器,不要使用LCL,除非你从networking上断开连接。 build议三台服务器,因为只有两台服务器,他们不同意,会select哪一台? 第三台服务器应该帮助algorithm消除伪造的服务器。

最后,我只注意到你没有定义driftfile 。 这可能有帮助吗?

在我看来,像NTP的偏移间隔(系统时间和NTP主机时间之间的差异)差别太大了,无法正确设置它。

我的build议,

  1. Stop the NTP service 2. As root ntpdate -bs 10.130.33.201 to reset your time to something close 3. Start the NTP service 

之后你应该没有问题。

作为LOCAL服务器的10.130.33.201的层数为9,这使得从本地(9 + 1 = 10)计算出的本地层与本地本地服务器在层数10上竞争。由于本地LOCAL层没有networking延迟或抖动, ntpd可能会比远程的好一点。

如果你希望这个configuration能够工作,那么把'主'LOCAL服务器设置为低于9的层。如果你希望一个时间层可以追溯到1层服务器,那么这个服务器是不错的。

我知道这是旧的,但我认为你是对的。 没有人显示任何方式来debuggingntpd问题。 原来这是可行的。

当你怀疑在本地和上游服务器上使用LOCAL(0)可能是一个问题时,我认为你是正确的。

当然是在我有类似问题的4台服务器的时间岛上。 这些都是彼此同行,所以可能是与你不同的问题。

首先,有一个更好的方法来处理过去几年的ntpd版本支持的孤岛模式的时间岛:

doc.ntp.org上的孤儿模式

最初,所有4个服务器都有相同的层数10,并且首选他们的本地时钟。 我解决了这个问题,他们仍然喜欢他们的本地时钟(虽然层次看起来很重要)。

我用ntpq命令pe(peer),as,rv来处理发生的事情。 您需要在服务器的关联编号上使用rv(readvar)来转储信息。 PE和似乎是由相同的索引sorting,所以你可以得到这样的数字。 因为有一个叫做条件的字段,如果它不喜欢服务器,可能会显示值拒绝。

在rv输出中是一个名为flash的字段。 如果一切顺利,这将是零。 如果不是这是一个位掩码(显示在hex)的问题。 他们可以在这里看到:

ntpd内部解码

我遇到的问题是0800 peer_loop。 事实certificate,时钟的重复是很重要的。 在本地时钟和远程服务器上看到LOCAL(0)时,ntpd认为有一个循环。 David Mills在comp.protocols.time的post中确认,“如何避免在NTP中循环”(我已经达到了2个链接的限制,对不起!)

使用refid参数fudge来设置唯一的refid不起作用 – 它仍然显示为LOCAL(0)在收件人。

什么似乎工作是使用本地驱动程序的唯一实例编号。 127.127.1。[0-3]。 在服务器和软性线上使用相同的ID。 当我这样做时,服务器通常会同步到通常使用本地时钟的最低层服务器。 然而,它偶尔会尝试使用其中一个正在使用它作为源的其他服务器。 然而,时间同步,似乎保持这种方式。

可能来不及提供帮助,但我提供它显示NTP是顺从的逻辑和故障排除。 我花了几个小时,通过反复试验得出答案,然后再find文档。

即使一个请求失败,使用iburst强制服务器发送NTP请求到所需的NTS