Skip to content
Kurisu
Go back

Chronyd 时间同步

精确时间同步对日志一致性、安全审计、分布式协调至关重要;RHEL 8 起用 Chrony 替代传统 NTP 守护进程,更快更准。


一、Chrony 概述

1.1 为什么精确计时很重要

网络中需要准确的数据包与日志时间戳。Linux 下 NTP 由用户空间的守护进程实现,它负责更新内核中的系统时钟。

系统时钟通常基于时间戳计数器(TSC):一个 CPU 寄存器,统计自上次重置以来的循环数,速度极快、分辨率高、不被中断。

RHEL 8 起 NTP 由 chronyd 守护进程实现,来自 chrony 软件包。

1.2 Chrony 功能

功能说明
与 NTP 服务器同步将系统时钟与远程 NTP 服务器同步
与参考时钟同步支持 GPS 接收器等硬件参考时钟
手动时间输入同步支持手动输入时间进行同步
作为 NTPv4 服务器为网络中其他计算机提供时间服务
作为对等服务器与同级服务器互相同步

Chrony 在以下条件下表现良好:

1.3 精度


二、Chrony 组件

Chrony 有两个主要组件:

组件说明
chronyd在用户空间运行的守护进程,负责时间同步
chronyc命令行工具,用于监控 chronyd 性能并在运行时更改参数

默认 chronyd 只接受本地 chronyc 命令,也可配置接受远程监控命令(应限制访问)。


三、安装与状态检查

3.1 安装

Chrony 在 RHEL 上默认安装;未安装则:

# 安装 chrony
dnf install chrony -y

chronyd 默认位置 /usr/sbin/chronyd,命令行工具 /usr/bin/chronyc。

3.2 服务管理

# 启动并设置开机自启
systemctl enable --now chronyd

# 查看服务状态
systemctl status chronyd

# 重启服务(修改配置后)
systemctl restart chronyd

四、使用 chronyc 交互模式

4.1 进入交互模式

# 以 root 身份进入交互模式
chronyc
# chrony version 4.2
# Copyright (C) 1997-2003, 2007, 2009-2021 Richard P. Curnow and others
# chronyc>

交互模式下 help 查看所有可用命令:

chronyc> help
System clock:
tracking                    Display system time information
makestep                    Correct clock by stepping immediately
......
exit|quit                   Leave the program
help                        Generate this help

4.2 非交互模式

也可直接在命令行指定命令:

# 非交互命令模式
chronyc tracking
chronyc sources
chronyc sourcestats

chronyc 的更改不持久,chronyd 重启即丢;要持久化需改 /etc/chrony.conf。


五、检查同步状态

5.1 tracking 命令

chronyc tracking

输出示例及关键字段:

字段说明示例值
Reference ID当前参考时钟源771CB7B8 (119.28.183.184)
Stratum时钟层级(越小越准确)3
Ref time (UTC)上次同步的 UTC 时间Wed Mar 08 11:36:38 2023
System time系统时钟与 NTP 时间的偏差0.000400987 seconds slow
Last offset上次测量的偏移量-0.000400063 seconds
RMS offset长期偏移平均值0.000868900 seconds
Frequency时钟频率误差5.757 ppm slow
Residual freq残余频率误差-0.006 ppm
Skew频率估计的误差范围0.335 ppm
Root delay到参考时钟的总延迟0.058458306 seconds
Root dispersion最大误差范围0.007332922 seconds
Update interval更新间隔1033.4 seconds
Leap status闰秒状态Normal

5.2 sources 命令

sources 显示 chronyd 当前访问的时间源信息:

chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- stratum2-1.ntp.mow01.ru.>     2  10   377   671    +12ms[  +11ms] +/- 108ms
^- ntp8.flashdance.cx            2  10   363   393    -46ms[  -46ms] +/- 183ms
^- tick.ntp.infomaniak.ch        1  10   377   690  -8219us[-8615us] +/- 100ms
^* 119.28.183.184                2  10   377   543  -2120us[-2520us] +/-  70ms

状态符号说明:

符号含义
*当前最佳时间源(正在使用)
+可合并的候选源
-未合并的候选源
x可能出错的源
~变动太大的源
?不可用的源
^服务器
=对等服务器
#本地时钟

5.3 使用 -v 查看详细信息

chronyc sources -v
chronyc sourcestats -v

5.4 sourcestats 命令

sourcestats 显示每个源的偏移率与误差估算:

chronyc sourcestats
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
stratum2-1.ntp.mow01.ru.>  44  24  328m     +0.423      0.416    +19ms  4537us
ntp8.flashdance.cx         32  16  317m     +0.098      0.769    -46ms  6952us
tick.ntp.infomaniak.ch     47  27  345m     +0.398      0.236  -9923us  2774us
119.28.183.184             30  19  273m     -0.005      0.264  -4615ns  1847us
字段说明
NP测量集中的采样点数
NR同符号的残余运行次数
Span测量集的时长
Frequency估计的时钟频率误差 (ppm)
Freq Skew频率估计的误差
Offset估计的偏移量
Std Dev标准偏差

六、配置 Chrony 服务器

6.1 服务器端配置

编辑 /etc/chrony.conf:

vim /etc/chrony.conf

关键配置项:

# 允许来自本地网络的 NTP 客户端访问
allow 192.168.0.0/16

# 指定上级 NTP 服务器
server ntp.example.com iburst

# 选择记录哪些日志
log measurements statistics tracking

allow 格式:

格式说明
allow 192.168.0.0/16允许整个子网访问
allow 10.0.0.1允许单个主机访问
allow all允许所有主机(慎用)

改完重启服务:

systemctl restart chronyd

6.2 防火墙配置

# Chronyd 使用 UDP 端口 123
firewall-cmd --permanent --add-service=ntp
firewall-cmd --reload

# 或者直接关闭防火墙(测试环境)
systemctl stop firewalld

七、配置 Chrony 客户端

7.1 客户端配置

编辑客户端 /etc/chrony.conf:

vim /etc/chrony.conf

把默认 NTP 池换成指定服务器:

# 注释掉默认的 pool
#pool 2.rhel.pool.ntp.org iburst

# 指定自定义时间服务器
server 192.168.115.128 iburst

# 记录日志
log measurements statistics tracking

iburst:服务器不可达时发 8 个包(通常 1 个),加快初始同步。

7.2 验证客户端同步

# 重启 chronyd
systemctl restart chronyd

# 查看时间源
chronyc sources
chronyc sources -v

八、日志管理

8.1 日志文件

日志保存在 /var/log/chrony/:

ll /var/log/chrony/
# -rw-r--r--. 1 chrony chrony 3699 Mar  8 21:06 measurements.log
# -rw-r--r--. 1 chrony chrony 2925 Mar  8 21:06 statistics.log
# -rw-r--r--. 1 chrony chrony 3432 Mar  8 21:06 tracking.log
日志文件内容
measurements.log每次测量的详细数据
statistics.log统计信息汇总
tracking.log系统时钟跟踪变化记录

九、关键 chronyc 命令速查表

命令功能
chronyc tracking查看系统时钟同步状态
chronyc sources查看时间源列表
chronyc sources -v查看时间源详细信息
chronyc sourcestats查看时间源统计信息
chronyc sourcestats -v查看时间源详细统计
chronyc makestep立即修正时钟(大步跳跃)
chronyc add server <host>运行时添加新时间源
chronyc delete <host>运行时删除时间源
chronyc activity查看 NTP 源的活动状态
chronyc clients查看连接的客户端
chronyc serverstats查看服务器统计信息

十、最佳实践

  1. 多 NTP 源:至少配 3-4 个时间源,提高可靠性与准确性
  2. 限制访问:用 allow 限定客户端 IP,不要开 allow all
  3. 开日志:log measurements statistics tracking,便于排查同步问题
  4. 防火墙放行:NTP 用 UDP 端口 123
  5. 轻量替代:不需要服务器功能时可用 systemd-timesyncd(仅客户端)


Share this post:

Previous Post
Linux 计划任务
Next Post
网络基础与信息收集:HTTP、DNS 与 HTTPS