Linux時間同步服務(wù)Chronyd同步時間工作機制探討
我之前由于測試了SSL證書過期如何延期,我把服務(wù)器的時間往后調(diào)了一年。事后我沒有把服務(wù)器的時間調(diào)整回去,服務(wù)器上安裝了chronyd服務(wù),我原以為時間會在不久之后修正回去。然而直到我發(fā)現(xiàn)Prometheus無法工作才知曉,時間并沒有及時修正。
我檢查了chronyd的服務(wù)狀態(tài)是正常運行,配置也沒有問題,配置是:
# cat /etc/chrony.conf |egrep -v '^$|#'
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
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
其中 makestep 參數(shù)用于控制在啟動時或手動強制同步時的最大步長。具體來說,它有兩個子參數(shù):
- 第一個參數(shù):最大步長(以秒為單位)。如果系統(tǒng)時間與NTP時間的偏差超過這個值,chronyd 會進(jìn)行一步調(diào)整。
- 第二個參數(shù):最大步長的允許次數(shù)。如果在一定時間內(nèi)多次需要進(jìn)行大步調(diào)整,chronyd 會限制調(diào)整次數(shù)。
rtcsync 參數(shù)用于啟用或禁用將系統(tǒng)時間寫入實時時鐘(RTC, Real-Time Clock)的功能。實時時鐘是硬件時鐘,通常在系統(tǒng)關(guān)機后仍然保持時間。
那么為什么時間沒有及時的修正呢?我只有在手動重啟chronyd服務(wù)之后,時間才正確修正了呢?
原來chronyd不是一下子就修正時間的,它是逐步調(diào)整時間的,具體請查看如下截圖,chronyc tracking 檢查每隔一段時間的時間差是越來越小的。
圖片
其實我們也可以手動強制 chronyd 進(jìn)行時間同步,而不需要重啟服務(wù)。
chronyc makestep
這個命令會強制chronyd立即調(diào)整系統(tǒng)時間,而不是逐步調(diào)整。
圖片
所以假如我們在服務(wù)器上時間相差太大,建議直接執(zhí)行下 chronyc makestep,另外測試好需要及時恢復(fù)環(huán)境,或者臨時新建一個測試服務(wù)器處理。