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 源进行时间同步了。

八、常见问题及解决方法

  1. 时间无法同步:
    • 检查防火墙设置,确保 UDP 123 端口是开放的。
    • 确认配置的 NTP 服务器地址是否正确,是否可以正常访问。
    • 尝试使用 chronyc sources 命令查看时间源的状态。
  2. 时间同步缓慢:
    • 可以增加更多可靠的 NTP 服务器。
    • 检查网络连接是否稳定,是否存在丢包现象。
  3. Chrony 服务无法启动:
    • 检查配置文件 /etc/chrony.conf 的语法是否正确。
    • 查看系统日志(如 /var/log/messages),查找启动失败的具体原因。

通过以上步骤,你可以在 Linux 系统上成功配置和使用 Chrony 进行高精度的时间同步。Chrony 的动态调整机制能够确保系统时间始终保持准确,即使在网络条件不佳的情况下也能稳定工作。

posted on 2025-05-30 10:03  数据派  阅读(1601)  评论(0)    收藏  举报