30 使用 NTP 同步時間 #
NTP (網路時間協定) 機制是一種協定,用於同步化網路上的系統時間。首先,機器可以從提供可靠時間來源的伺服器取得時間。其次,機器本身在網路中可以做為其他電腦的時間來源。這個目標是雙重的 — 即維護絕對正確的時間,並同步化網路內所有機器的系統時間。
維謢精準的系統時間對於許多情況都非重要。內建的硬體時鐘通常無法符合資料庫或叢集等應用程式的要求。手動校正系統時間有可能會造成嚴重的問題,因為,例如時間倒退將可能造成重要應用程式無法正常運作。在網路中,通常需要同步所有機器中的系統時間,而手動調整時間的做法並不可取。NTP 提供了一種用於解決這些問題的機制。NTP 服務會依據網路中可靠的時間伺服器持續調整系統時間。它可以進一步管理本地參考的時鐘,例如收音機控制的時鐘。
自 SUSE Linux Enterprise Server 15 起,採用 chrony
做為 NTP 的預設實作。chrony
包含兩個部分:chronyd
精靈可在開機時啟動,chronyc
指令行介面程式用於監控 chronyd
的效能,以及在執行時期變更各種操作參數。
從 SUSE Linux Enterprise Server 15.2 開始,如果不是設定為以精靈的形式執行,適用於 NTP 用戶端組態的 YaST 模組會設定 systemd-timer 而不是 cron 精靈來執行 chrony
。
30.1 使用 YaST 設定 NTP 用戶端 #
chrony
套件中隨附的 NTP 精靈 (chronyd
) 預先設定為使用本地電腦硬體時鐘做為時間參考。硬體時鐘的精確度極大程度上取決於它的時間來源。例如,原子鐘或 GPS 接收器是非常精確的時間來源,而通用的 RTC 晶片則不是可靠的時間來源。YaST 簡化了 NTP 用戶端的組態。
在 YaST NTP 用戶端組態 (
› ) 視窗中,您可以指定啟動 NTP 精靈的時間、組態來源的類型,以及新增自訂的時間伺服器。30.1.1 NTP 精靈啟動 #
您可以從下面三個選項中選擇啟動 NTP 精靈的時間:
如果您想手動啟動
chrony
精靈,請選取 。選取
可定期設定系統時間,而不會永久執行chrony
。您可以設定 。選取
可在系統開機時自動啟動chronyd
。建議您使用此設定。
30.1.2 組態來源的類型 #
在
下拉式方塊中,選取 或 。如果伺服器只使用固定的一組 (公用) NTP 伺服器,請設定 ;如果您的內部網路透過 DHCP 提供 NTP 伺服器,則使用 更合適。30.1.3 設定時間伺服器 #
供用戶端查詢的時間伺服器列在
視窗的下半部分。修改清單時,可依需要使用「 」、「 」以及「 」。按一下
可新增新的時間伺服器:在
欄位中,輸入要與機器時間同步的時間伺服器或時間伺服器池的 URL。填寫好 URL 後,按一下 以驗證該 URL 是否指向有效的時間來源。啟用
,以便在chronyd
精靈啟動時透過傳送更多要求來加速時間同步。啟用
,以使自動啟動chronyd
精靈且開機時可能沒有網際網路連接的系統加快開機速度。例如,對於由 NetworkManager 管理網路連接的筆記型機器,此選項非常實用。按一下
加以確認。
30.2 手動設定網路中的 NTP #
chrony
從 /etc/chrony.conf
檔案讀取其組態。若要讓電腦時鐘保持同步,您需要告訴 chrony
使用什麼時間伺服器。您可以使用特定的伺服器名稱或 IP 位址,例如:
server 0.europe.pool.ntp.org server 1.europe.pool.ntp.org server 2.europe.pool.ntp.org
還可以指定池名稱。池名稱會解析為數個 IP 位址:
pool pool.ntp.org
若要同步同一網路中多部電腦的時間,建議不要透過一部外部伺服器來同步所有電腦。比較好的做法是將其中一部電腦做為時間伺服器 (它與外部時間伺服器同步),其他電腦做為它的用戶端。將 local
指令新增至伺服器的 /etc/chrony.conf
,以將其與權威時間伺服器區分開:
local stratum 10
若要啟動 chrony
,請執行:
systemctl start chronyd.service
啟始化 chronyd
後,系統需要花費一些時間來穩定時間,以及建立用於校正本地電腦時鐘的偏移檔案。使用漂移檔案,可以在電腦開機時計算硬體時鐘的系統錯誤。它會立即使用校正,使系統時間具有更高的穩定性。
若要啟用 chrony
,以便該服務在開機時自動啟動,請執行:
systemctl enable chronyd.service
30.3 在執行時期使用 chronyc
設定 chronyd
#
在執行時期,您可以使用 chronyc
來變更 chronyd
的行為。它會產生有關 chronyd
操作的狀態報告。
您可以採用互動模式或非互動模式執行 chronyc
。若要採用互動模式執行 chronyc
,請在指令行上輸入 chronyc
。如此會顯示提示符並等待您輸入指令。例如,若要檢查有多少 NTP 來源在線上或離線,請執行:
root #
chronyc
chronyc> activity 200 OK 4 sources online 2 sources offline 1 sources doing burst (return to online) 1 sources doing burst (return to offline) 0 sources with unknown address
若要結束 chronyc
的提示符,請輸入 quit
或 exit
。
如果您不需要使用互動式提示符,請直接輸入指令:
root #
chronyc
activity
使用 chronyc
進行的變更不是永久性的。當 chronyd
下次重新啟動時,它們將會遺失。若要進行永久變更,請修改 /etc/chrony.conf
。
如需 chronyc
指令的完整清單,請參閱它的手冊頁 (man 1 chronyc
)。
30.4 執行時期的動態時間同步 #
儘管 chronyd
通常在開機時沒有網路連接的系統上啟動,但該工具無法解析組態檔案中所指定時間伺服器的 DNS 名稱。
chronyd
會依遞增的時間間隔,不斷嘗試解析由 server
、pool
和 peer
指令指定的時間伺服器名稱,直到成功為止。
如果啟動 chronyd
時將無法存取時間伺服器,您可以指定 offline
選項:
server server_address offline
如此,chronyd
將不會嘗試輪詢該伺服器,除非使用以下指令啟用它:
root #
chronyc online server_address
設定 auto_offline
選項後,如果向時間伺服器傳送了兩個要求,但未接收到任何回應,chronyd
會假設時間伺服器已離線。此選項使 chronyc
在網路連結斷開時,無需執行「離線」指令。
30.5 設定本地參考時鐘 #
套裝軟體 chrony
依賴於其他程式 (例如 gpsd
) 來透過 SHM 或 SOCK 驅動程式存取計時資料。在 /etc/chrony.conf
中使用 refclock
指令可指定要當成時間來源使用的硬體參考時鐘。它有兩個強制參數:驅動程式名稱和驅動程式特定的參數。這兩個參數後面跟著零或多個 refclock
選項。chronyd
包含以下驅動程式:
PPS:核心「pulse per second」API 的驅動程式。例如:
refclock PPS /dev/pps0 lock NMEA refid GPS
SHM:NTP 共用記憶體驅動程式。例如:
refclock SHM 0 poll 3 refid GPS1 refclock SHM 1:perm=0644 refid GPS2
SOCK:Unix 網域通訊端驅動程式。例如:
refclock SOCK /var/run/chrony.ttyS0.sock
PHC:PTP 硬體時鐘驅動程式。例如:
refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37 refclock PHC /dev/ptp1:nocrossts poll 3 pps
如需各驅動程式的選項的詳細資訊,請參閱 man 8 chrony.conf
。
30.6 與外部時間參考 (ETR) 的時鐘同步 #
支援將時鐘與外部時間參考 (ETR) 同步。外部時間參考每 2**20 (2 的 20 次方) 微秒傳送一次振盪器訊號與同步訊號,以將所有連結伺服器的 TOD 時鐘保持同步。
為了便利,兩個 ETR 裝置可連接到一個機器。如果時鐘偏差超出同步檢查容錯,將會對所有 CPU 執行一次機器檢查,這表示時鐘未同步。如果出現這種狀況,則所有啟用了 DASD I/O 到 XRC 的裝置就會停止運作,直到時鐘重新同步。
ETR 支援透過兩個 sysfs
屬性啟動;請以 root
身分執行下列指令:
echo 1 > /sys/devices/system/etr/etr0/online echo 1 > /sys/devices/system/etr/etr1/online