文章目錄
- 前言
- 一、NTP (Network Time Protocol) & ntpd
- 1.原理
- 2. 安裝與配置(ntp 包)
- 3.NTPd 優缺點對比
- 二、Chrony
- 1.原理
- 2.安裝與配置 (`chrony` 包)
- 3. 優點
- 4. 缺點
- 三、systemd-timesyncd
- 1.原理
- 2.安裝與配置 (systemd 自帶)
- 3. 優點
- 4. 缺點
- 四、手動同步工具
- 1.ntpdate`(已廢棄,不推薦)
- 2. date 命令
- 五、關鍵操作與注意事項
- 1. 防火墻
- 2. 硬件時鐘 (RTC) 同步
- 3. 時區設置
- 4. 服務選擇建議
- 總結
前言
在 CentOS 7 中,保持系統時間準確至關重要,尤其對于集群、數據庫、日志記錄等場景。主要的時間同步方式和工具有 ntpd (NTP daemon)、chronyd (Chrony daemon) 和 systemd-timesyncd
一、NTP (Network Time Protocol) & ntpd
1.原理
* 使用 NTP 協議 (UDP 端口 123)
* 客戶端 (ntpd) 與一個或多個 NTP 服務器通信
* 通過交換帶有時間戳的數據包,計算網絡延遲 (delay) 和時間偏差 (offset)
* 采用復雜算法(如 Marzullo 算法、時鐘篩選、組合)過濾噪聲,選擇最可靠的服務器
* 通過 漸進式調整 系統時鐘(slew)來糾正偏差(每秒最多調整幾毫秒),避免時間跳變,對依賴連續時間的應用友好。只有在啟動時偏差過大 (>128ms 或 panic 閾值) 才會進行階躍調整 (step)。
* 維護一個持續的頻率漂移校正模型,即使暫時斷網也能保持一定精度
2. 安裝與配置(ntp 包)
# 安裝
sudo yum install ntp
# 主配置文件:/etc/ntp.conf
# 編輯配置文件,指定 NTP 服務器池或服務器
sudo vim /etc/ntp.conf
示例配置片段
# 使用 CentOS 官方池
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst# 允許本地網絡客戶端同步 (可選)
# restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
iburst
: 初始啟動時發送 8 個數據包加速同步restrict ... nomodify notrap
: 允許指定網絡查詢時間但不允許修改配置或設置陷阱
# 啟動服務并設置開機自啟
sudo systemctl start ntpd
sudo systemctl enable ntpd
# 查看同步狀態
ntpq -pn
ntpq -pn
輸出解釋:
remote refid st t when poll reach delay offset jitter
==============================================================================
-162.159.200.1 10.107.8.118 3 u 28 64 3 359.100 -70.096 38.033
+95.111.202.5 106.10.186.200 3 u 28 64 3 165.314 0.278 52.889
*202.118.1.81 202.118.1.46 2 u 27 64 3 51.261 2.783 10.046
+185.209.85.222 130.173.91.58 2 u 25 64 3 247.237 -21.915 12.004
*
表示當前優選的時間源remote
: NTP 服務器 IPoffset
: 本地時間與服務器時間的偏差 (ms)。負數表示本地時間慢delay
: 網絡延遲 (ms)jitter
: 偏移量的平均偏差 (ms)
3.NTPd 優缺點對比
類別 | 優點 | 缺點 |
---|---|---|
歷史與穩定 | 歷史悠久,穩定可靠,算法成熟 | 啟動和收斂速度相對較慢(尤其初始同步) |
時間調整 | 漸進調整(slew )避免時間跳變,適合數據庫、交易系統 | 對間歇性網絡連接或高延遲網絡適應性不如 chrony |
斷網表現 | 頻率漂移模型在斷網時維持精度 | 資源消耗略高于 chrony |
工具支持 | 強大的日志和監控工具(ntpq ,ntpstat ) | 默認配置下處理大時間偏差(>1000s)需要手動干預(ntpd -gq ) |
二、Chrony
1.原理
* CentOS 7 的默認時間同步工具(chronyd服務)
* 兼容 NTP 協議,但算法更先進
* 能更快適應網絡不穩定、間歇性連接(如筆記本、移動設備)
* 在啟動時或時間偏差較大時,能更快地大幅糾正時間 (step) 或快速調整 (slew)
* 更精確地處理時鐘頻率漂移,尤其適合虛擬化環境(因虛擬化時鐘常不穩定)
* 支持 NTP 和 PTP (需硬件支持) 時間源
* 提供 chronyc 命令行工具進行實時監控和控制
2.安裝與配置 (chrony
包)
# 安裝 (通常默認已安裝)
sudo yum install chrony# 主配置文件:/etc/chrony.conf
# 編輯配置文件
sudo vim /etc/chrony.conf
示例配置片段
# 使用阿里云公共 NTP 服務器
server ntp.aliyun.com iburst
server time1.cloud.tencent.com iburst# 允許特定網絡同步 (可選)
# allow 192.168.1.0/24# 啟用內核實時時鐘 (RTC) 同步
rtcsync# 記錄頻率漂移
driftfile /var/lib/chrony/drift# 日志目錄
logdir /var/log/chrony
iburst
: 同ntpd
,加速初始同步rtcsync
: 定期將系統時間同步到硬件時鐘 (RTC)driftfile
: 存儲計算出的時鐘頻率漂移值
# 啟動服務并設置開機自啟
sudo systemctl start chronyd
sudo systemctl enable chronyd# 查看狀態
chronyc tracking # 顯示系統時間信息
chronyc sources -v # 查看時間源及其狀態
chronyc sources -v
輸出解釋:
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp8.flashdance.cx 2 6 377 10 -2300us[-2300us] +/- 94ms
^- stratum2-1.ntp.mow01.ru.> 2 6 177 6 +8681us[+8681us] +/- 83ms
^* time.neu.edu.cn 2 6 377 11 -1442us[-1609us] +/- 28ms
^- time.cloudflare.com 3 6 37 11 +4486us[+4486us] +/- 117ms
^*
: 當前最優時間源。Stratum
: 時間源的層級 (數字越小越接近原子鐘)。Last sample
:[offset]
是本地時間與源時間的偏差。
3. 優點
- 啟動快、收斂快,特別適合不穩定的網絡環境
- 處理大時間偏差能力強,自動執行階躍或快速調整
- 在虛擬機和動態網絡中表現更優
- 資源占用低
- 配置靈活,支持
NTP
和PTP
chronyc
提供強大實時控制能力
4. 缺點
- 相比
ntpd
,在某些極端穩定網絡下長期穩定性可能略遜(但差距極小) - 歷史不如
ntpd
悠久(但已是主流且默認選擇)
三、systemd-timesyncd
1.原理
* systemd 生態提供的輕量級 SNTP (Simple NTP) 客戶端
* 只實現 NTP 客戶端的基本功能,不支持作為 NTP 服務器
* 使用 timedatectl 命令管理。
* 設計目標是提供基本的時間同步,適合桌面或不需要高精度/復雜配置的系統
* 同步間隔較長(通常幾分鐘一次)
2.安裝與配置 (systemd 自帶)
# 通常默認已安裝并啟用
# 主配置文件:/etc/systemd/timesyncd.conf
sudo vim /etc/systemd/timesyncd.conf
示例配置片段
[Time]
# 指定 NTP 服務器
NTP=ntp.aliyun.com time1.cloud.tencent.com
# FallbackNTP=0.centos.pool.ntp.org
# 重啟服務
sudo systemctl restart systemd-timesyncd# 查看狀態
timedatectl status
timedatectl status
輸出中包含:
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
3. 優點
- 極其輕量級,零額外依賴
- 集成于
systemd
,管理統一 (timedatectl
) - 配置簡單
4. 缺點
- 功能簡陋:僅作客戶端,不支持服務器模式、復雜過濾、頻率漂移補償等
- 精度和魯棒性低于
ntpd
和chronyd
- 同步間隔長,不適合高精度場景
- 無法精細監控
四、手動同步工具
1.ntpdate`(已廢棄,不推薦)
- 原理
- 一次性查詢 NTP 服務器并立即階躍 (
step
) 調整系統時間
- 一次性查詢 NTP 服務器并立即階躍 (
- 操作
sudo ntpdate ntp.aliyun.com
- 缺點:
- 中斷性:階躍調整導致時間跳變,可能引發應用錯誤(日志混亂、交易失敗)
- 精度差:單次測量易受網絡抖動影響
- 無持續補償:執行后即結束
- 與
ntpd
/chronyd
沖突:不能同時運行
- 強烈建議避免在生產環境使用。如需階躍調整,優先使用:
sudo chronyc makestep # Chrony 手動階躍
sudo ntpd -gq # ntpd 在啟動前強制同步 (需先停止 ntpd 服務)
2. date 命令
- 原理
- 手動設置系統時間
- 操作
sudo date -s "2024-04-15 14:30:00" # 設置具體時間
sudo date +%T -s "14:30:00" # 僅設置時間 (保留日期)
- 缺點
- 完全手動,精度依賴操作者,無網絡同步能力。僅用于臨時調試或初始化
五、關鍵操作與注意事項
1. 防火墻
- NTP 使用 UDP 123 端口
- 確保防火墻允許出站訪問 NTP 服務器
sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload
2. 硬件時鐘 (RTC) 同步
- 系統時間 (
clock
) 在重啟后從硬件時鐘加載——確保兩者一致
# 將當前系統時間寫入硬件時鐘
sudo hwclock --systohc
# 查看硬件時鐘時間
sudo hwclock --show
- 在
ntp.conf
(使用ntpd
) 或chrony.conf
(使用chronyd
并設置rtcsync
) 中配置,服務會自動定期同步
3. 時區設置
- 時間同步解決的是 UTC 時間問題——顯示時間需正確設置時區
# 列出可用時區
timedatectl list-timezones# 設置時區 (如 Asia/Shanghai)
sudo timedatectl set-timezone Asia/Shanghai# 檢查
timedatectl
4. 服務選擇建議
- 絕大多數 CentOS 7 服務器:首選
chronyd
(默認且優秀) - 需要非常傳統或特定 NTP 功能/生態:考慮
ntpd
- 輕量級桌面/簡單設備:
systemd-timesyncd
足夠
總結
1.對于 CentOS 7 服務器環境,
chronyd
是最佳、最推薦的時間同步解決方案,平衡了速度、精度、資源消耗和網絡適應性
2.除非有特定兼容性要求,否則無需使用ntpd
3.systemd-timesyncd
僅適用于要求極低的場景
對比表
特性 | ntpd (NTP) | chronyd (Chrony) | systemd-timesyncd | ntpdate (廢棄) |
---|---|---|---|---|
定位 | 成熟穩定的 NTP 實現 | 現代、快速、適應性強的默認工具 | 輕量級 SNTP 客戶端 | 一次性時間設置工具 |
啟動/收斂速度 | 較慢 | 極快 | 慢 | 一次執行 |
網絡適應性 | 穩定網絡好 | 不穩定/動態網絡極佳 | 一般 | 依賴單次網絡質量 |
時間偏差處理 | 主要靠漸進 (slew ),大偏差需手動 | 自動階躍或快速調整 (slew/step ) | 階躍調整 | 強制階躍調整 |
精度 | 高 | 高 (尤其虛擬化) | 一般 | 低 (單次測量) |
資源占用 | 中等 | 低 | 極低 | 執行時占用 |
作為 NTP 服務器 | 支持 | 支持 | 不支持 | 不支持 |
配置復雜度 | 中等 | 中等 | 簡單 | 簡單 |
監控工具 | ntpq , ntpstat | chronyc | timedatectl | 無 |
推薦場景 | 傳統環境/特定需求 | 默認選擇/服務器/虛擬機 | 桌面/簡單設備 | 避免使用 |