Linux 系统时间同步 -- Chrony
在 Linux 系统中,时间同步至关重要,尤其是对于分布式系统而言,时间不一致可能会引发各种问题。
Chrony 作为一款高精度的时间同步工具,相比传统的 NTP(Network Time Protocol)具有诸多优势,比如更快的同步速度、更低的系统资源占用,以及在网络不稳定的情况下更好的性能表现。
下面详细介绍如何在 Linux 系统上使用 Chrony 进行时间同步。
一、Chrony 简介
Chrony 包含两个核心组件:
- chronyd:一个在后台持续运行的守护进程,用于调整系统时钟。
- chronyc:一个命令行工具,可用于监控 Chrony 服务的状态并与之交互。
二、安装 Chrony
不同的 Linux 发行版安装 Chrony 的方式有所不同:
基于 Red Hat/CentOS 的系统:
yum install chrony -y
基于 Debian/Ubuntu 的系统:
apt-get install chrony -y
三、配置 Chrony
Chrony 的主配置文件是
/etc/chrony.conf,下面是一个典型的配置示例:# 配置时间服务器源
server ntp.aliyun.com iburst
server time.google.com iburst
server cn.pool.ntp.org iburst
# 允许本地网络中的客户端同步时间
allow 192.168.0.0/16
# 禁止 chronyd 修改内核 RTC(硬件时钟)
rtcsync
# 保存时钟的频率偏移量
driftfile /var/lib/chrony/drift
# 设置最大误差范围
maxupdateskew 100.0
# 日志配置
logdir /var/log/chrony
log measurements statistics tracking
配置说明:
- server:指定要使用的 NTP 服务器,
iburst选项的作用是在首次连接或者服务器重新上线时,快速发送多个 NTP 请求,从而加快初始同步速度。 - allow:允许特定网段的客户端通过当前服务器进行时间同步。
- rtcsync:启用内核时间同步功能,确保系统时间和硬件时钟保持同步。
- driftfile:用于存储时钟频率的偏移量,以便系统重启后能更快地实现时间同步。
四、管理 Chrony 服务
以下是一些常用的 Chrony 服务管理命令:
启动 Chrony 服务:
systemctl start chronyd
设置 Chrony 服务开机自启:
systemctl enable chronyd
重启 Chrony 服务:
systemctl restart chronyd
查看 Chrony 服务状态:
systemctl status chronyd
五、验证时间同步状态
可以使用以下命令来验证 Chrony 的时间同步状态:
检查当前时间源和同步状态:
chronyc sources -v
示例输出:
210 Number of sources = 3
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp.aliyun.com 2 6 377 32 -222us[ -234us] +/- 101ms
^+ time.google.com 2 6 377 33 +243us[ +255us] +/- 115ms
^- cn.pool.ntp.org 2 6 377 31 -105us[ -117us] +/- 120ms
输出说明:
^*表示当前正在使用的首选时间源。Stratum代表时间服务器的层级,数值越小表示越接近原子钟,精度越高。Last sample显示的是与时间源的时间偏移量。
查看时间同步统计信息:
chronyc tracking
示例输出:
Reference ID : 85A70054 (ntp.aliyun.com)
Stratum : 3
Ref time (UTC) : Sun May 19 12:34:56 2025
System time : 0.000002283 seconds fast of NTP time
Last offset : +0.000000256 seconds
RMS offset : 0.000001023 seconds
Frequency : 11.235 ppm slow
Residual freq : +0.002 ppm
Skew : 0.085 ppm
Root delay : 0.033456 seconds
Root dispersion : 0.009358 seconds
Update interval : 1024.0 seconds
Leap status : Normal
六、手动同步时间
在某些特殊情况下,可能需要手动强制同步时间:
立即强制同步系统时间:
chronyc makestep
如果系统时钟与 NTP 服务器的时间差异超过了配置的阈值,
chronyd 会逐渐调整时间。使用 makestep 命令可以强制立即完成时间同步,这在系统刚启动或者时间偏差较大时非常有用。七、配置 Chrony 作为 NTP 服务器
如果需要将当前服务器配置为内部网络的 NTP 服务器,除了之前提到的
allow 选项外,还需要添加以下配置:# 允许作为 NTP 服务器响应查询
local stratum 10
配置完成后,重启 Chrony 服务,内部网络中的其他设备就可以将此服务器作为 NTP 源进行时间同步了。
八、常见问题及解决方法
-
时间无法同步:
- 检查防火墙设置,确保 UDP 123 端口是开放的。
- 确认配置的 NTP 服务器地址是否正确,是否可以正常访问。
- 尝试使用
chronyc sources命令查看时间源的状态。
-
时间同步缓慢:
- 可以增加更多可靠的 NTP 服务器。
- 检查网络连接是否稳定,是否存在丢包现象。
-
Chrony 服务无法启动:
- 检查配置文件
/etc/chrony.conf的语法是否正确。 - 查看系统日志(如
/var/log/messages),查找启动失败的具体原因。
- 检查配置文件
通过以上步骤,你可以在 Linux 系统上成功配置和使用 Chrony 进行高精度的时间同步。Chrony 的动态调整机制能够确保系统时间始终保持准确,即使在网络条件不佳的情况下也能稳定工作。
浙公网安备 33010602011771号