為什麼時間同步很重要#

在分散式系統中,各主機的時間必須一致,否則會導致:

  • 登錄檔時序混亂,無法正確追蹤事件
  • 排程任務(cron)執行時機錯誤
  • 分散式資料庫的資料一致性問題
  • 安全機制(如 Kerberos 認證)失效

時區與時間基礎#

  • UTC(協調世界時)以原子鐘為基準,比傳統 GMT 更精確
  • Linux 系統有兩種時鐘:軟體時鐘(系統時間,從 1970/01/01 起算)和硬體時鐘(BIOS 時間)
  • 由於晶片震盪週期的微小誤差,兩者會逐漸偏離

NTP 通訊協定原理#

NTP(Network Time Protocol)是網路時間同步機制:

  1. 用戶端向伺服器發送時間請求
  2. 伺服器回傳標準時間
  3. 用戶端自動計算網路傳輸延遲並補償,調整自身時間

階層架構#

NTP 採用分層設計來分散負載:

  • Stratum 1:直接連接原子鐘的國際標準時間伺服器
  • Stratum 2:向 Stratum 1 同步的伺服器
  • 依此類推,最多 15 層

不要讓所有主機都直接向 Stratum 1 伺服器校時。應在區域網路內架設自己的 NTP 伺服器,由它向上層同步,其他主機再向內部伺服器同步。

核心設定要素#

  • restrict:控制用戶端連線權限(誰可以向你校時)
  • server:設定上層時間伺服器(你向誰校時)
  • driftfile:記錄系統時鐘與標準時間的偏差值(單位:百萬分之一秒),NTP 利用此數據進行持續微調

用戶端校時#

  • ntpdate:手動進行一次性校時
  • ntpd:持續運行的校時服務
  • 兩者不可同時啟用
  • 校時後需使用 hwclock 將系統時間寫入 BIOS,確保重開機後時間正確

若無法持續運行 ntpd,可透過 crontab 定期執行 ntpdate 進行校時,例如每小時同步一次。