文章詳情

騰訊雲國際帳號辦理 騰訊雲 CVM 實例開啟 NTP 時間同步失敗导致系統時間偏差排查

騰訊雲國際2026-08-03 20:19:38阿里雲
{"description":"本文以騰訊雲 CVM 為例,梳理 NTP 同步啟用失敗後系統時間偏差的排查思路,從網路、服務衝突到配置細節逐步定位並給出修復方案。","content":"

問題現象:看起來只是時間不準,實際上影響很大

\n

在騰訊雲 CVM 上,NTP 時間同步失敗,最常見的表現不是服務直接報錯,而是系統時間慢慢偏掉。短時間內可能只差幾秒,過一陣子就可能累積到幾分鐘,甚至更久。對普通使用者來說,這只是日誌時間不一致;但對資料庫、證書驗證、分散式任務、交易簽名、定時器和排程系統來說,時間偏差往往就是故障源頭。

\n

很多人第一次發現問題,是因為應用日誌排序亂了,SSL 握手失敗,Token 過期判斷異常,或者主從同步、任務補償機制出現怪現象。這時去看系統,才發現 NTP 明明已經開啟,時間卻沒有真正同步上去。真正麻煩的地方就在這裡:不是所有同步失敗都會直接報錯,更多時候是悄悄失敗。

\n

所以排查這類問題,不能只看服務有沒有啟動,而要沿著「系統狀態、NTP 服務、網路連通、時間源配置、虛擬化環境」一層層查。只要路徑對了,通常都能把問題定位清楚。

\n\n

先判斷:到底是沒同步,還是同步了又偏回去

\n

排查前先分清兩件事:一是 NTP 根本沒有成功同步;二是同步過,但系統時間很快又漂移回去。這兩種情況的處理方式不一樣。

\n\n

騰訊雲國際帳號辦理 先看系統自己怎麼說

\n

如果系統使用的是 systemd 系列,可以先看時間同步狀態:

\n
timedatectl status
\n

重點看這幾個欄位:

\n
Local time
Universal time
RTC time
NTP service
System clock synchronized
\n

如果 NTP service 顯示 inactive,或者 System clock synchronized 是 no,基本就能確認同步沒有成功。即使顯示 yes,也不代表一定正常,還要再看偏差是否持續擴大。

\n\n

再看 NTP 客戶端的實際狀態

\n

如果是 chrony,常用命令是:

\n
chronyc tracking
chronyc sources -v
\n

如果是 ntpd,可以看:

\n
ntpq -p
\n

這些輸出裡最值得注意的是:

\n
是否已選中可用時間源
delay 是否正常
offset 是否持續過大
reach 是否長期為 0
stratum 是否合理
\n

如果 sources 裡時間源前面沒有 *,或者 reach 一直上不去,說明客戶端雖然配置了時間源,但沒有真正完成校時。

\n\n

CVM 上 NTP 同步失敗的常見原因

\n

騰訊雲 CVM 的環境裡,NTP 失敗通常不是單一原因,而是幾個小問題疊在一起。以下幾類最常見。

\n\n

1. 同時啟用了多個時間同步服務

\n

很多 Linux 發行版預設就帶有 systemd-timesyncd、chronyd、ntpd 其中之一。部分鏡像在雲環境初始化時又會額外安裝同步工具,結果就是幾個服務同時搶時間控制權。表面上看,每個服務都在運行,實際上互相干擾,最後誰也校不準。

\n

這種情況常見於以下組合:

\n
chronyd 與 ntpd 同時啟用
systemd-timesyncd 與 chronyd 同時啟用
手動執行 ntpdate,與常駐服務衝突
\n

原則很簡單:一台機器只保留一種主同步方案,其他全部關掉。

\n\n

2. 網路能通,但 UDP 123 被擋住

\n

騰訊雲國際帳號辦理 NTP 使用的是 UDP 123 端口。很多人檢查時只測試了 ping 或 80、443 端口,發現網路正常,就以為 NTP 沒問題。其實 NTP 不走這些端口,只要安全組、主機防火牆、出站策略、邊界設備中有一層擋住 UDP 123,就會導致同步失敗。

\n

騰訊雲國際帳號辦理 在 CVM 內部,還要注意三個位置:

\n
安全組是否限制了出站 UDP 123
系統防火牆是否封了 UDP 123
是否存在代理、轉發或白名單策略
\n

如果只允許業務常用端口,而忽略了時間同步這類基礎通信,NTP 就會默默失效。

\n\n

3. 時間源地址配置錯誤或 DNS 解析失敗

\n

很多人套用模板時會把 NTP 伺服器寫成某個域名,但該域名在當前地域不可達,或者 DNS 本身不穩定,最後導致客戶端一直解析失敗。也有人把內網時間源和外網時間源混著寫,結果在沒有外網能力的環境下完全不同步。

\n

排查時不要只看配置文件,還要確認實際解析結果和連通性。對於騰訊雲 CVM,優先使用可達性穩定、適合當前網路環境的時間源,並保持配置簡潔,不要一次塞太多來源。

\n\n

4. 虛擬機長時間離線,時間漂移過大

\n

如果一台 CVM 長時間關機、暫停,或者在異常狀態下跑了很久,重啟後可能會出現很大的初始偏差。某些 NTP 客戶端對過大的時間跳變會比較保守,不會立刻大幅修正,而是慢慢校時。這時你會覺得「明明已經開了同步,怎麼還是不準」。

\n

特別是帶有嚴格時間限制的應用,不能只等自動慢慢拉回來,必要時要先做一次手動校正,再交給 NTP 持續維持。

\n\n

完整排查步驟:從表層到根因

\n

下面這套順序比較實用,適合在生產環境快速定位問題。

\n\n

第一步:確認服務是否真的在跑

\n

先看服務狀態,不要先改配置。

\n
systemctl status chronyd
systemctl status ntpd
systemctl status systemd-timesyncd
\n

如果啟動失敗,再看啟動錯誤原因。常見問題包括配置文件格式錯誤、端口衝突、權限不足、系統時間被鎖定等。

\n\n

第二步:檢查配置文件是否乾淨

\n

以 chrony 為例,常見配置位置是 /etc/chrony.conf/etc/chrony/chrony.conf。檢查內容時,重點不是行數多,而是要簡單、準確、可達。

\n

一個乾淨的思路是:

\n
只保留少量可信的時間源
避免同時混用多個不一致的伺服器
確認 driftfile 路徑存在且可寫
不要把測試配置直接留在生產環境
\n

如果是 ntpd,則要檢查 /etc/ntp.conf 裡的 server 配置和限制規則,避免客戶端請求被自己擋住。

\n\n

第三步:檢查端口與路由

\n

先測 DNS,再測 UDP 123 的可用性。雖然 UDP 不像 TCP 那樣容易直接測通,但至少要確認路由和防火牆沒有明顯阻斷。

\n
nslookup 時間源域名
ping 時間源地址
ss -ulnp | grep 123
iptables -S
firewall-cmd --list-all
\n

如果是雲上安全組配置錯誤,主機內部怎麼改都沒用,因為包根本出不去。

\n\n

第四步:看日誌,別只看錯誤級別

\n

很多 NTP 問題在日誌裡不是 error,而是 warning 或 info。尤其是 chrony,會清楚告訴你它是否收到了時間源回包、是否因偏差過大而暫時拒絕使用、是否因時鐘源不穩定而放棄選擇。

\n
journalctl -u chronyd
journalctl -u ntpd
journalctl -u systemd-timesyncd
\n

如果看到類似「no suitable source」或者「cannot reach」的訊息,基本就能把問題往網路或時間源方向推。如果提示配置解析失敗,就先回頭查配置文件。

\n\n

第五步:必要時手動校正一次

\n

當系統時間偏差已經很大,單靠後台慢慢同步可能太慢。可以先做一次臨時校正,再讓常駐服務接管。

\n

騰訊雲國際帳號辦理 思路是先停掉衝突服務,再手動拉一次時間,最後重新開啟常駐同步:

\n
systemctl stop ntpd
systemctl stop chronyd
systemctl stop systemd-timesyncd

ntpdate 時間源地址

systemctl start chronyd
\n

如果系統環境不允許直接執行 ntpdate,也可以用 chrony 的命令進行一次較強制的修正。關鍵不是工具名稱,而是先把偏差拉回合理範圍,再交給服務長期維持。

\n\n

修復方案:最有效的是減少不確定性

\n

真正穩定的做法,通常不是找更多工具,而是減少變數。時間同步也是一樣。

\n\n

方案一:只保留一個同步服務

\n

在大多數 CVM 場景中,建議只保留 chrony。它對虛擬機、網路抖動和變化較大的環境適應性更好,對時間漂移的修正也更靈活。做法是停掉其他同步服務,避免互相搶資源。

\n
systemctl disable ntpd
systemctl stop ntpd
systemctl disable systemd-timesyncd
systemctl stop systemd-timesyncd
systemctl enable chronyd
systemctl start chronyd
\n

這樣做的好處很直接:責任單一,出了問題也容易定位。

\n\n

方案二:把時間源改成穩定可達的官方來源

\n

如果當前配置的是不穩定的公共來源,或者某個地域不可達的節點,直接換成更合適的時間源。對雲主機來說,最重要的不是伺服器名字好不好看,而是穩定、低延遲、可持續訪問。

\n

配置時要注意:

\n
優先選擇距離近、延遲低的時間源
不要把過多 server 堆在一起
保持首選源與備選源一致性
修改後要重啟服務並重新觀察 tracking 結果
\n\n

方案三:放通安全組和主機防火牆

\n

如果安全策略收得很緊,至少要為時間同步留一條通路。這不是額外開銷,而是基礎設施的一部分。服務之間的時間一致性,和 DNS、NTP、鏡像源一樣,都屬於底層保障。

\n

建議檢查的內容包括:

\n
出站 UDP 123
必要時的入站回包策略
主機防火牆的白名單
是否有審計或安全代理攔截時間同步報文
\n\n

方案四:重建時間基準,避免長期漂移

\n

騰訊雲國際帳號辦理 如果 CVM 已經偏差很大,最好在業務低峰時做一次完整校時,並觀察 24 小時以上的漂移情況。校時後還要看 CPU 負載、虛擬化層、磁碟 I/O 和網路抖動,因為有些系統不是 NTP 配置錯,而是機器本身太忙,導致時鐘更新不及時。

\n

另外,RTC 時鐘和系統時間也要保持一致。很多人只盯著 date 命令,卻忽略了硬體時鐘。重啟後時間又回到錯誤狀態,往往就是這個原因。

\n\n

一套更穩的日常運維習慣

\n

時間同步不是修一次就結束的事。真正穩定的做法,是把它納入日常運維標準。

\n\n

把時間同步列為基礎巡檢項

\n

每次巡檢時固定查看:

\n
系統時間是否與標準時鐘一致
NTP 是否已同步
服務是否有持續報警
偏差是否超過閾值
\n

如果能做監控,最好把 System clock synchronized、offset、stratum、reach 這些指標納入告警。早發現一小時,總比業務出事後回頭補救要好。

\n\n

新機初始化時就標準化配置

\n

很多時間問題,其實是「每台機器各自調」造成的。建議在鏡像、初始化腳本或配置管理工具中統一處理:

\n
安裝固定版本的時間同步服務
統一時間源
統一時區
統一關閉衝突服務
統一日志檢查方式
\n

這樣後面新開的 CVM,不會因為人工遺漏而埋下隱患。

\n\n

對應用層做好容錯

\n

底層時間再穩,也不可能永遠零偏差。業務系統應該對少量時間誤差有容忍空間,尤其是簽名驗證、任務調度、分散式鎖和過期判斷。不要把一秒級波動變成全站故障。基礎設施要穩,應用層也要有彈性,這才是完整方案。

\n\n

結語:時間問題看似小,實際最容易拖成大故障

\n

騰訊雲 CVM 上的 NTP 同步失敗,表面上只是時鐘不準,實際上會影響整個系統的可信度。排查時最忌諱兩種做法:一是只重啟服務,不看根因;二是只改配置,不驗證連通性。真正有效的方式,是先確認現象,再分層定位,最後把服務、網路、配置和監控一起收斂。

\n

只要把「服務是否衝突、UDP 123 是否暢通、時間源是否可達、偏差是否過大、重啟後是否穩定」這幾個問題查透,絕大多數時間同步故障都能解決。時間看起來只是系統裡的一個小數字,但在雲主機上,它往往決定的是整個應用是否可靠。

"}

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系