為什麼時間同步很重要#
在分散式系統中,各主機的時間必須一致,否則會導致:
- 登錄檔時序混亂,無法正確追蹤事件
- 排程任務(cron)執行時機錯誤
- 分散式資料庫的資料一致性問題
- 安全機制(如 Kerberos 認證)失效
時區與時間基礎#
- UTC(協調世界時)以原子鐘為基準,比傳統 GMT 更精確
- Linux 系統有兩種時鐘:軟體時鐘(系統時間,從 1970/01/01 起算)和硬體時鐘(BIOS 時間)
- 由於晶片震盪週期的微小誤差,兩者會逐漸偏離
NTP 通訊協定原理#
NTP(Network Time Protocol)是網路時間同步機制:
- 用戶端向伺服器發送時間請求
- 伺服器回傳標準時間
- 用戶端自動計算網路傳輸延遲並補償,調整自身時間
階層架構#
NTP 採用分層設計來分散負載:
- Stratum 1:直接連接原子鐘的國際標準時間伺服器
- Stratum 2:向 Stratum 1 同步的伺服器
- 依此類推,最多 15 層
不要讓所有主機都直接向 Stratum 1 伺服器校時。應在區域網路內架設自己的 NTP 伺服器,由它向上層同步,其他主機再向內部伺服器同步。
核心設定要素#
- restrict:控制用戶端連線權限(誰可以向你校時)
- server:設定上層時間伺服器(你向誰校時)
- driftfile:記錄系統時鐘與標準時間的偏差值(單位:百萬分之一秒),NTP 利用此數據進行持續微調
用戶端校時#
ntpdate:手動進行一次性校時ntpd:持續運行的校時服務- 兩者不可同時啟用
- 校時後需使用
hwclock將系統時間寫入 BIOS,確保重開機後時間正確
若無法持續運行
ntpd,可透過crontab定期執行ntpdate進行校時,例如每小時同步一次。