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