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


11

因此,我尝试调试当前的NTP设置,发现他与我配置的单个服务器的偏移量超过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

我已经读过有关Burst和iburst和minpoll / maxpoll的文章,所以我意识到可能不需要这些,但是我认为这与我当前的问题无关。

另外,由于它的部署方式,该配置文件将需要大量工作来更改,因此我希望没有什么必须更改。我希望这是我不了解NTP如何工作的一种情况。


编辑-

因此,看起来这是This Question的重复,但是我觉得发帖人没有得到足够的答案,所以我仍然想知道为什么本地时间优先于服务器时间。另外,按照下面的答案之一,我尝试prefer在配置的服务器行上使用关键字并重新启动,但这似乎没有效果。

如果我确实删除了配置中的所有“本地”行,如对另一个问题的回答所暗示,那么如果服务器不可达,将会发生什么?NTP会死还是继续尝试?


重要编辑-

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

因此,为了看看会发生什么,我将一台NTP池服务器添加到服务器的配置文件中,这样它将从那里获取时间而不是从本地获取时间。现在,它可以正确地从NTP时间服务器获取时间。

完成之后,客户端现在与服务器同步,而不是偏爱LOCAL(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使用的是LOCAL(0)。嗯,我也有一个LOCAL(0)服务器- -我将直接使用它,而不是通过10.130.33.201“获取相同的信息。

是这样吗 他们是否在试图“直接到达源”(错误地为LOCAL(0))?我需要服务器从LOCAL(0)获取时间,并且我需要客户端从服务器获取时间。现在,从客户端配置文件中删除“本地”服务器是唯一的选择,但是我想了解为什么会发生这种情况,如果可能的话,请避免更改其配置(由于我们的环境...)。

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


另外,如果您始终可以访问10.130.33.201,请考虑删除本地时钟源。
亚伦·科普利2013年

Answers:


9

仅配置一台NTP服务器,该算法并不完全确定谁值得信任。即使远程主机的层数较低,但我敢打赌该算法认为本地时间更值得信赖。

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


编辑-

因此,看起来这是This Question的重复,但是我觉得发帖人没有得到足够的答案,所以我仍然想知道为什么本地时间优先于服务器。

对于一个真正足够的答案,您将深入研究非常复杂的算法。该文档甚至没有具体,但是我确信那里有白皮书或规范。

如果我确实删除了配置中的所有“本地”行,如对另一个问题的回答所暗示,那么如果服务器不可达,将会发生什么?NTP会死还是继续尝试?

NTP守护程序不会终止或停止,但是在无法访问远程服务器后会退出同步时间。这就是为什么最佳实践将建议至少使用三台远程服务器,并且除非您与网络断开连接,否则不要使用LCL的原因。建议使用三台服务器,因为当只有两台服务器时,如果服务器不同意,它将选择哪种服务器?第三台服务器应帮助算法消除伪造的服务器。

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


两个阶层之间的差异是否会完全影响这一点?低于9的服务器会有所帮助吗?
JPhi1618

它可能。诚然,我对算法本身的内部知识并不了解。但是,唯一应该软化层的情况是使用本地时钟。我不建议您使用远程服务器作为修补程序。应该信任NTP来确定干扰最小的最佳来源。您碰巧遇到了需要稍微推动一下的情况。
亚伦·科普利2013年

感谢您的建议。有一个driftfile,但是没有创建它,所以我删除了该文件以查看会发生什么。删除本地线确实会使它与服务器同步,所以就是这样。您说ntpd将“在无法到达远程服务器后退出同步时间”,但是在到达服务器后它将重新启动吗?我只是想在网络临时中断的情况下保持安全。
JPhi1618年

不,它不会再开始。它只是放弃了。这很烦人,对我来说也成了22。现在我们知道如果网络连接丢失,可以重新启动NTP。由于ntp没有访问路径的权限,因此可能无法创建您的driftfile。仔细检查。
亚伦·科普利

7

在我看来,偏移时间间隔(系统时间与NTP主机时间之间的时间差)相差太大,以至于NTP无法正确设置它。

我的建议,

 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

之后,您应该没有任何问题。


2
如果计算机恰好是VM或有其他导致其严重中断时间的状况,则可以设置ntp tinker panic 0选项以强制NTP接受任何偏移。但是,只有将其与NTP服务器一起使用时,您才能确定永远不会返回不良时间。
Zoredache

好的,我认为这必须要超过1000秒钟才能解决,然后我认为该服务器将带有#号?不是吗?“偏移”是以秒还是毫秒为单位?
JPhi1618

由于偏移量太高,它现在不会同步到10.130.33.201,但这不能解决这样的事实:首先,它的漂移足够使LCL更受欢迎。我认为这是一个有效的driftfile,prefer可以解决问题。
亚伦·科普利

你能解释为什么偏移量太高吗?小于1000s(少一些),并且没有#号。另外,我已经验证了这两个系统的实际时间,并且它们相距约4秒。
JPhi1618

+/- 1000 ms ...不是+/- 1000 s。处于-3742 ms
亚伦·科普利2013年

2

作为本地服务器的10.130.33.201的层数为9,这使得从此(9 + 1 = 10)计算出的本地层与本地10层的本地服务器竞争。由于本地本地层没有网络延迟或抖动,因此它对于ntpd而言,它看起来可能比远程的要好一些。

如果希望此配置有效,请将“主” LOCAL服务器设置为低于9的层。如果希望可追溯到第1层服务器的时间为首选,则不要太低。


谢谢。我会尽快检查出来。看起来很有希望。
JPhi1618

好吧,看起来我以前曾尝试降低10.130.33.201 LOCAL服务器的层次。当前,将其设置为5,客户端将其视为6,但是仍然更喜欢它自己的LOCAL(层数为10)。这种配置已经存在了好几天。
JPhi1618

2

我知道这很老,但我认为您是对的。没有人显示任何方法来调试ntpd问题。事实证明这是可行的。

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

当然,这是在我遇到类似问题的4台服务器的时间孤岛上。这些都设置为彼此的同伴,因此可能与您的问题不同。

但是,首先,有一种更好的方法来处理时间孤岛(称为孤岛模式),最近几年的ntpd版本支持这种孤岛模式:

doc.ntp.org上的孤立模式

最初,所有4台服务器具有相同的10层,并且首选本地时钟。我已解决此问题,但他们仍然更喜欢使用本地时钟(尽管层次似乎确实很重要)。

我使用ntpq命令pe(peer)as rv来了解正在发生的事情。您需要在关联号上使用rv(readvar),以便服务器转储信息。pe和as似乎是按相同的索引排序的,因此您可以通过这种方式获得as号。如具有称为条件的字段,如果不喜欢服务器,则可能显示拒绝值。

在rv输出中是一个称为flash的字段。如果一切顺利,它将为零。如果不是,则是问题的位掩码(以十六进制显示)。可以在这里查找它们:

ntpd内部解码

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

使用refid参数来设置唯一的refid无效-在接收方它仍显示为LOCAL(0)。

似乎起作用的是为本地驱动程序使用了唯一的实例号。127.127.1。[0-3]。在服务器和软糖行上使用相同的ID。当我这样做时,服务器通常同步到通常使用其本地时钟的最低层服务器。但是,它偶尔会尝试使用其他将其用作源的服务器之一。然而,时间同步,并且似乎一直保持这种状态。

可能为时已晚,无法提供帮助,但我提供它来证明NTP适用于逻辑和故障排除。我花了几个小时通过反复试验得出答案,然后找到了文档。


-1

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


这需要更好的解释。
斯文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.