在我们的生产环境中,我面临着 ntpd 的问题。我正在为我们的生产盒启用 NTP 功能并观察一个问题。
我们在盒子的初始化过程中启动 ntpd 守护进程。在那段时间互联网连接不存在。下面是我的小ntp.conf
文件
driftfile /etc/ntp.drift
logconfig =syncstatus
server pool.ntp.org iburst
一旦接口出现,我们的盒子就可以很晚地获得互联网连接。那个时候我看到 ntpd 没有同步时钟。当我这样做时ntpq -c as
,我得到了no association id's found
。我确实等了将近 30 分钟,但还是得到了no association id's found
我必须重新启动ntpd。重启后,ntpd 同步时钟,一切正常。但是,如果我重新启动我的盒子,那么同样的问题就会发生。再次,我必须重新启动 ntpd,一旦盒子出现并且可以访问互联网。
有没有人遇到过类似的问题?
我应该延迟 ntpd 的启动直到时间界面出现吗?
更新
我做了一些更多的实验,并用这个更改替换server pool.ntp.org iburst
了pool pool.ntp.org iburst
ntpd 自动同步时钟。我不必重新启动 ntpd。所以这里对我提出了另一个问题。
当我替换为 时发生server
了pool
什么?
我应该总是使用pool
关键字而不是server
?
我应该什么时候使用pool
,什么时候应该使用server
?
我做了一些研究,发现
pool is the same as server, except it resolves one name into several addresses and uses them all
如果他们在做同样的事情,那为什么server pool.ntp.org iburst
不为我工作但pool pool.ntp.org iburst
工作。
更新
正如建议的那样,我已经使用pool
了,server
但我的时钟仍然无法在启动时同步。以前no association id's found
来过,但在使用池后它正在显示列表。
GW:/admin# ntpq -c lpeer
remote refid st t when poll reach delay offset jitter
===================================================================== =========
time.google.com .POOL. 16 p - 64 0 0.000 +0.000 0.002
GW:/admin# ntpq -np
remote refid st t when poll reach delay offset jitter
time.google.com .POOL. 16 p - 64 0 0.000 +0.000 0.002
GW:/admin# ntpq -c as
ind assid status conf reach auth condition last_event cnt
===========================================================
1 34173 8811 yes none none reject mobilize 1
GW:/admin# ntpq -c "rv 34173"
associd=34173 status=8811 conf, bcast, sel_reject, 1 event, mobilize,
srcadr=0.0.0.0, srcport=0, srchost="time.google.com", dstadr=0.0.0.0,
dstport=0, leap=11, stratum=16, precision=-19, rootdelay=0.000,
rootdisp=0.000, refid=POOL, reftime=(no time), rec=(no time), reach=000,
unreach=0, hmode=3, pmode=0, hpoll=6, ppoll=10, headway=0,
flash=1400 peer_dist, peer_unreach, keyid=0, offset=+0.000, delay=0.000,
dispersion=16000.000, jitter=0.002,
filtdelay= 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00,
filtoffset= +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00 +0.00,
filtdisp= 16000.0 16000.0 16000.0 16000.0 16000.0 16000.0 16000.0 16000.0
我看到闪存状态为1400
。1400
我无法1400
在 ntp 文档中找到闪存状态是什么意思。
更新
它开始工作了。我替换iburst
为minpoll 3 maxpoll 4
,之后它正在重新启动。我用过这样的游泳池 pool pool.ntp.org minpoll 3 maxpoll 4
。我不确定这种变化有什么不同。
我还读到我们应该避免使用 minpoll 和 maxpoll。
Too frequent for a sustained period and public NTP services may block you. ntpd is already good at dynamically selecting the pool interval.
不管怎样,谢谢大家帮助我。
当您向 ntpd 提供服务器时,它会在启动时将主机名解析为 IP 地址并尝试使用该 IP 地址来同步时间。如果该主机名未解析,则会将其删除。即使它确实解决了它,它也不记得主机名,只记得 ip 地址。
如果您的
server
线路中的服务器是具有固定 IP 地址(而不是动态池)的本地主机,您可以将主机名替换为真实 IP 地址,即使网络未启动也不应将其删除启动。如果您改为向 ntpd 提供一个池,它会保留主机名(并用 标记它
.POOL.
)。定期(包括在启动时),它将在 DNS 中解析该主机名,并将它获得的任何 IP 添加为单独的条目,并修剪一些最不受欢迎的条目。您可以使用命令
ntpq -np
或等效地看到其中的一些ntpq -n -c peers
请注意,所有这些都存在时间问题和 ntpd 版本问题。这个确切的问题是作为 ntpd 中的一个错误提交的,并且有几个修复变体。如果失败,某些版本的 ntpd 会推迟主机名解析,但它最终可能会放弃;因此,如果您通过短暂断开网络并重新连接来进行测试,则可能不会出现问题。此外,ntp 使用轮询算法以指数方式增加可访问和不可访问主机的主机轮询时间(取决于您的时钟稳定性和主机作为时间同步的有用性),上限为 1024 秒(32 分钟),所以如果网络可达性变化,它可能需要很长时间才能注意到。(轮询时间和间隔在 中列出
ntpq -np
)此外,一些引导启动脚本使用 ntpdate 或类似工具从 ntp.conf 将系统时钟设置为服务器,以便在 ntpd 启动之前部分同步时钟。这是一次尝试,如果失败,ntpd 可能会从严重错误的时钟开始。如果只是轻微错误,ntp 会修复它,但如果严重错误,ntpd 可能会拒绝同步时钟,并且在某些情况下和版本的 ntpd 可能会崩溃或退出。某些版本的 ntpd 有自己的一次性时钟大步选项。