Linux时间同步服务Chronyd同步时间工作机制探讨

我之前由于测试了SSL证书过期如何延期,我把服务器的时间往后调了一年。事后我没有把服务器的时间调整回去,服务器上安装了chronyd服务,我原以为时间会在不久之后修正回去。然而直到我发现Prometheus无法工作才知晓,时间并没有及时修正。

我检查了chronyd的服务状态是正常运行,配置也没有问题,配置是:

复制
# 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/chrony1.2.3.4.5.6.7.8.9.

其中 makestep 参数用于控制在启动时或手动强制同步时的最大步长。具体来说,它有两个子参数:

第一个参数:最大步长(以秒为单位)。如果系统时间与NTP时间的偏差超过这个值,chronyd 会进行一步调整。第二个参数:最大步长的允许次数。如果在一定时间内多次需要进行大步调整,chronyd 会限制调整次数。

rtcsync 参数用于启用或禁用将系统时间写入实时时钟(RTC, Real-Time Clock)的功能。实时时钟是硬件时钟,通常在系统关机后仍然保持时间。

那么为什么时间没有及时的修正呢?我只有在手动重启chronyd服务之后,时间才正确修正了呢?

原来chronyd不是一下子就修正时间的,它是逐步调整时间的,具体请查看如下截图,chronyc tracking 检查每隔一段时间的时间差是越来越小的。

图片

其实我们也可以手动强制 chronyd 进行时间同步,而不需要重启服务。

复制
chronyc makestep1.

这个命令会强制chronyd立即调整系统时间,而不是逐步调整。

图片

所以假如我们在服务器上时间相差太大,建议直接执行下 chronyc makestep,另外测试好需要及时恢复环境,或者临时新建一个测试服务器处理。

THE END
本站服务器由亿华云赞助提供-企业级高防云服务器