一、時間同步服務擴展總結
1. 時間同步的重要性
-
多主機協作需求:在分布式系統、集群、微服務架構中,時間一致性是日志排序、事務順序、數據一致性的基礎。
-
安全協議依賴:TLS/SSL證書、Kerberos認證等依賴時間有效性,時間偏差可能導致身份驗證失敗或中間人攻擊漏洞。
-
故障排查:日志時間戳若不同步,跨節點問題定位將極其困難。
-
高精度場景:金融交易(毫秒級誤差可能引發損失)、科學實驗、5G網絡同步(微秒級要求)等場景對時間精度要求極高。
2. NTP 協議核心機制
-
層級結構(Stratum):
-
Stratum 0:高精度物理設備(如原子鐘、GPS衛星時鐘),直接提供時間源。
-
Stratum 1:與Stratum 0設備直連的NTP服務器,作為主時間服務器。
-
Stratum 2:從Stratum 1同步的服務器,依次類推(最多15層)。
-
-
時鐘漂移修正:通過算法(如Marzullo算法)計算網絡延遲和時鐘偏差,逐步調整系統時間,避免時間跳變。
-
閏秒處理:NTP協議支持在協調世界時(UTC)插入閏秒時平滑調整系統時間。
3. chrony 核心原理
-
?設計目標
-
動態網絡適應:自動調整輪詢間隔(
minpoll
/maxpoll
),適應網絡延遲和波動。 -
快速收斂:在初始同步或網絡恢復時,通過?
iburst
?參數快速完成時間校準。 -
最小化時鐘偏差:利用硬件時間戳(
hwtimestamp
)和實時時鐘(RTC)補償,減少累積誤差。 -
離線模式支持:無網絡時依賴本地時鐘維持時間穩定性。
-
-
核心組件
-
chronyd 守護進程:后臺服務,負責與時間源通信并調整系統時鐘。
-
chronyc 命令行工具:用于監控和動態修改配置。
-
配置文件?
/etc/chrony.conf
:定義時間源、策略、日志等參數。
-
4. NTP 服務(ntpd)
-
特點:
-
長連接模式:持續與時間服務器通信,適合長期穩定運行的環境。
-
資源占用低:適合嵌入式設備或低配置服務器。
-
成熟穩定:經過多年驗證,兼容性廣泛(舊系統、網絡設備)。
-
-
局限性:
-
網絡波動敏感:間歇性網絡中斷時同步效率下降。
-
啟動速度慢:初次同步可能需要較長時間。
-
溫度敏感性:物理服務器時鐘易受環境溫度影響,需頻繁修正。
-
5. Chrony 服務
-
核心優勢:
-
動態適應網絡:在斷線、高延遲網絡中快速收斂,適合移動設備、虛擬機、云環境。
-
更小時間偏差:通過更精細的時鐘頻率調整算法(如RTC補償),減少長期運行后的累積誤差。
-
安全性增強:支持NTP的Autokey協議,防止中間人攻擊。
-
-
關鍵特性:
-
硬件時間戳:利用網卡硬件記錄數據包收發時間,消除操作系統調度延遲,顯著提升精度(可達亞微秒級)。
-
隔離模式:無網絡時,依賴本地時鐘維持時間一致性,避免服務中斷。
-
輕量級設計:服務進程資源占用更低,適合容器化環境。
-
二、時間同步服務器的使用
1.使用 timedatectl 命令進行系統時間與時區管理
timedatectl 基礎命令與功能
命令 | 功能說明 |
---|---|
timedatectl | 查看當前時間、時區、NTP 同步狀態等完整信息。 |
timedatectl set-time "YYYY-MM-DD HH:MM:SS" | 手動設置系統時間(需 root 權限)。 |
timedatectl list-timezones | 列出系統支持的所有時區名稱(按?PageUp /PageDown ?翻頁)。 |
timedatectl set-timezone "時區名" | 設置系統時區(如?Asia/Shanghai )。 |
timedatectl set-local-rtc 0 | 將硬件時鐘(RTC)視為?UTC 時間(推薦)。 |
timedatectl set-local-rtc 1 | 將硬件時鐘(RTC)視為?本地時間(Windows 雙系統場景可能需要)。 |
timedatectl set-ntp yes/no(true/false) | 啟用/禁用?NTP 網絡時間同步(啟用后自動同步時間,覆蓋手動設置)。 |
2.從公共 NTP 服務器中同步時間到本地機器
常用公共 NTP 服務器分類匯總表
服務商/項目 | NTP 服務器地址 | .地區/用途 | 備注 |
---|---|---|---|
NTP Pool Project | [0-3].asia.pool.ntp.org | 亞洲地區(動態分配最近節點) | 全球分布式集群,自動選擇最優節點。支持多區域(如?europe.pool.ntp.org )。 |
pool.ntp.org | 全球(默認分配最近節點) | 主入口,推薦普通用戶使用。 | |
阿里云 | ntp.aliyun.com | 中國大陸 | 阿里云公共 NTP,低延遲,國內推薦。 |
ntp1-7.aliyun.com | 中國大陸(多節點負載均衡) | 冗余設計,提升可靠性(如?ntp1.aliyun.com ?至?ntp7.aliyun.com )。 | |
time.pool.aliyun.com | Windows 系統專用 | Windows 時間服務默認支持。 | |
國家授時中心 | ntp.ntsc.ac.cn | 中國大陸 | 中國科學院國家授時中心官方服務器,高精度、高可靠性。 |
騰訊云 | ntp.tencent.com | 中國大陸 | 騰訊云公共 NTP,適用于國內云服務器。 |
time.google.com | 全球 | 谷歌公共 NTP,支持 IPv4/IPv6,需網絡可訪問谷歌。 | |
Microsoft | time.windows.com | 全球 | Windows 默認時間服務器,兼容性強。 |
Apple | time.apple.com | 全球 | macOS 和 iOS 設備默認時間服務器。 |
Amazon | [0-3].amazon.pool.ntp.org | 全球(AWS 區域優化) | 亞馬遜云 NTP 服務,適合 AWS 用戶。 |
Cloudflare | time.cloudflare.com | 全球 | Cloudflare 提供的公共 NTP,低延遲。 |
CNNIC | cn.ntp.org.cn | 中國大陸 | 中國互聯網絡信息中心(CNNIC)維護的 NTP 服務器。 |
下圖我們將NTP服務器的地址源改寫成國家授時中心的NTP服務器地址。
然后使用 systemctl restart chronyd.service 重啟chrony服務,使新的配置生效。
在RHEL9中,chrony
?是 RHEL 9 中默認的 NTP 客戶端,chronyc
?是?chrony
?的控制工具,可用于查看詳細的時間同步信息。
-
查看 NTP 源狀態:chronyc sources -v
-
查看時間同步統計信息:chronyc tracking
chronyc sources -v
?輸出字段詳解
字段 | 說明 | 示例/可能值 |
---|---|---|
MS | 狀態標記:表示源的狀態,符號組合如下: -? ^* :當前同步的源。-? ^+ :候選源(備選)。-? ^- :可接受的源。-? ^? :未同步或不可信源。-? ^x :被排除的源(誤差過大)。 | ^* ,?^+ ,?^- ,?^? ,?^x |
Stratum | 層級:時間源的層級,范圍 1-15,1 表示最高精度(如原子鐘),層級逐級遞增。 | 1 ,?2 ,?3 |
Poll | 輪詢間隔:與源同步的時間間隔(秒),以 2 的冪表示(如?6 ?表示 2?=64 秒)。 | 6 (64秒),?10 (1024秒) |
Reach | 可達性:最近 8 次輪詢的成功率,8 進制表示(377 ?表示 8 次全部成功)。 | 377 (全成功),?25 (部分成功) |
LastRx | 最后接收時間:距離最后一次接收到源響應的時間(格式:秒/分鐘/小時/天)。 | 45s ,?3h ,?7d |
Last sample | 最后樣本偏差:最后一次時間同步的偏差,包含: - 時間偏移( ±數值 ):本地與源的時間差。- 延遲( delay ):網絡延遲。- 離散度( disp ):誤差范圍。 | +0.123ms ± 0.456ms ,?delay 12.3ms |
Source | 時間源地址:NTP 服務器的 IP 或域名。 | ntp.aliyun.com ,?192.168.1.1 |
State | 源狀態:詳細狀態描述,如同步狀態、網絡狀態等。 | SYNC ,?INIT ,?WAIT |
Flags | 標志位:表示源的特性,如: -? N :NTP 協議源。-? P :PPS 信號源。-? S :選擇狀態。-? A :認證通過。 | N ,?NP ,?S ,?A |
Condition | 狀態條件:源的健康狀態,如: -? OK :正常。-? FALSETICK :檢測到異常。-? JITTER :抖動過大。 | OK ,?FALSETICK ,?JITTER |
3.時間同步服務器的搭建
時間同步測試服務器IP地址:192.168.52.200/24
時間同步測試主機IP地址:192.168.52.20/24
以下配置都在Chrony 的配置文件?/etc/chrony.conf?
中進行。
netstat -antlupe各列參數含義
列 | 說明 |
---|---|
Proto | 協議類型(udp 、udp6 ?分別表示 IPv4 UDP 和 IPv6 UDP)。 |
Recv-Q | 接收隊列大小(當前待處理的數據包數量,0 ?表示無積壓)。 |
Send-Q | 發送隊列大小(當前待發送的數據包數量,0 ?表示無積壓)。 |
Local Address:Port | 本地監聽的地址和端口: -? 0.0.0.0:123 :監聽所有 IPv4 接口的 NTP 服務端口(123)。-? 127.0.0.1:323 :IPv4 本地回環地址的 chronyd 控制端口(323)。-? ::1:323 :IPv6 本地回環地址的 chronyd 控制端口(323)。 |
Foreign Address:Port | 遠端連接的地址和端口: -? 0.0.0.0:* ?或?:::* :表示未建立連接(監聽狀態)。 |
State | 連接狀態(UDP 無狀態,因此顯示?* )。 |
UID | 進程所有者的用戶 ID(0 ?表示 root 用戶)。 |
PID/Program | 進程 ID 和程序名稱: -? 98619/chronyd :chronyd 守護進程的 PID。 |
其他擴展信息 | netstat -e ?顯示的額外信息(如網絡統計,此處未顯式展示)。 |
然后就發現測試主機可以同步到服務器端的時間了。