Ntp

如果網路連接稍晚一點,ntpd 不會同步時鐘

  • July 26, 2021

在我們的生產環境中,我面臨著 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 iburstpool pool.ntp.org iburstntpd 自動同步時鐘。我不必重新啟動 ntpd。所以這裡對我提出了另一個問題。

當我替換為 時發生serverpool什麼?

我應該總是使用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

我看到快閃記憶體狀態為14001400我無法1400在 ntp 文件中找到快閃記憶體狀態是什麼意思。

更新

它開始工作了。我替換iburstminpoll 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 有自己的一次性時鐘大步選項。

引用自:https://serverfault.com/questions/1070492