Linux

如何判斷 chronyd 是否真正正確地自同步?

  • June 7, 2018

我正在開發一些設備,我希望它們在網路連接中斷時進行自同步(即使用 chrony 的漂移率計算來補償系統時鐘漂移),然後在遠端連接可用時正常同步。

不幸的是,chronyd 無法綁定到 NTP 偵聽埠,並主動嘗試將數據包發送到 NTP 偽伺服器地址,我無法確定這是否是預期的行為。

chrony.conf推薦用於自同步的標准設置是:

server 127.127.1.0 # Self-synchronise
allow 127.0.0.0/8  # NTP server for the local system, not just a client
local stratum 10   # Serve low quality time even when the remote link is down

但是,當我chrony sources使用該配置執行時,它聲稱它尚未與偽時間伺服器同步localhost

chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? 127.127.1.0                   0   7     0     -     +0ns[   +0ns] +/-    0ns

儘管chrony tracking似乎確實表明它按預期工作:

$ chronyc tracking
Reference ID    : 7F7F0101 ()
Stratum         : 10
Ref time (UTC)  : Mon Jun 04 08:27:11 2018
System time     : 0.000000007 seconds fast of NTP time
Last offset     : +3.297439098 seconds
RMS offset      : 3.297439098 seconds
Frequency       : 466.833 ppm slow
Residual freq   : +0.000 ppm
Skew            : 0.000 ppm
Root delay      : 0.000000000 seconds
Root dispersion : 0.000000000 seconds
Update interval : 0.0 seconds
Leap status     : Normal

無論我如何調整allow配置文件中的設置,我都無法chronyd顯示為實際偵聽123任何機器介面上的 UDP 埠,而netstat -ulnp如果我已成功將其設置為充當時間伺服器。

更奇怪的是,如果我在chronyd下執行strace -f,我看到它試圖實際向 發送消息127.127.1.0,即使它應該知道這是本地時間同步的偽地址。

就目前的情況而言,我幾乎沒有信心chrony在遠端連接中斷時實際補償時鐘漂移,因為要引發實際上確實需要自動校正時鐘漂移的情況是很棘手的。

所以我的實際問題是:有誰知道如何判斷 chrony 是否正確設置為離線時的自同步?或者我是否只需要按照我目前的配置進行部署,然後等待設備與後端管理伺服器斷開連接時時鐘漂移是否存在問題?

我設法找到了問題:port 0我開始使用的現有配置文件中有一條無關的行,因此該allow行沒有正確設置本地時間伺服器。刪除該行,一切都開始按我預期的方式工作。

這意味著我最初問題的答案是“做你所做的”:

  • 檢查是否sudo netstat -ulnp顯示chronyd正在偵聽 NTP 埠 (UDP 123)
  • 檢查該sudo chronyc sources節目是否127.127.1.0為可用來源

這些檢查對我來說失敗的事實準確地反映了port 0設置不正確的事實。

您可能需要 根據隔離網路上的內容考慮

https://chrony.tuxfamily.org/doc/3.3/chrony.conf.html上的資訊。

有幾個選項可以幫助配置偽時間。特別是這一段可能對你很有趣:

如果沒有合適的電腦被指定為主電腦,或者即使客戶端失敗也需要保持客戶端同步,則 local 指令的孤兒選項啟用一種特殊模式,即自動從多台電腦中選擇主電腦。它們都需要使用相同的本地配置並相互輪詢。具有最小參考 ID(基於其 IP 地址)的伺服器將充當主伺服器,其他伺服器將與其同步。當它失敗時,具有第二小的參考 ID 的伺服器將接管,依此類推。

但正如我從文件中了解到的那樣,需要幾台伺服器。

關於您的伺服器出現同步也許這種情況可能適用於您: https ://chrony.tuxfamily.org/faq.html#_computer_is_not_synchronising

檢查Reachchronycsources命令列印的值。如果它為零,則意味著 chronyd 沒有從您嘗試使用的 NTP 伺服器獲得任何有效響應。

該手冊還解釋了該local指令

當地的$$ option $$

…​ local 指令啟用本地參考模式,它允許 chronyd 作為 NTP 伺服器執行,以顯示為與實時同步(從客戶端輪詢它的角度來看),即使它從未同步或時鐘的最後一次更新發生很久以前。

所以它可能會給出一個同步時間,儘管它不是真的

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