文章目录
Chrony 时钟同步概念及配置
一、Chrony 概念
1.定义
Chrony 是一个现代化的时间同步工具,它使用 NTP 协议与外部时间源(通常是 NTP 服务器)通信,定期调整本地时钟,确保其与世界标准时间(UTC)保持同步。相比于传统的 NTP 服务,Chrony 更适合高负载、虚拟化环境以及对时间同步精度要求较高的场景。
2.工作原理
Chrony 的工作分为两个主要部分:时钟偏差的测量和时钟的校准。
- 时钟偏差的测量: Chrony 定期向配置的时间服务器发送请求,收到响应后,它会计算往返延时和本地时钟与服务器时间的差异。
- 时钟的校准: 根据测量得到的时钟偏差,Chrony对本地时钟进行调整,以使其与外部时间源保持同步。
3.同步周期特点
Chrony 的同步周期不是固定的,它会根据网络条件和之前的同步精度动态调整。初次启动时,Chrony 会更频繁地同步,以快速减小时钟偏差。随着时间的推移,如果网络条件稳定,Chrony会逐渐增长同步间隔,减少系统负载。
4.chrony 与 ntp的区别
-
设计理念
- Chrony: 专为现代网络环境优化,采用轻量级架构和动态补偿算法(如时间平滑滤波器),在网络不稳定或时钟源频繁变动时能快速适应。
- NTPd: 基于传统 NTP 协议,依赖复杂的时钟同步算法,初始化时间较长,更适合稳定网络环境。
-
同步精度与速度
- Chrony: 在高延迟或波动网络中表现更优,精度可达毫秒级
- NTPd: 在稳定网络中能提供高精度,但网络抖动时易出现较大偏差
- Chrony: 启动后快速完成同步(秒级)
- NTPd: 可能需要数分钟完成初始校准
-
配置复杂度
- Chrony: 配置简单,默认配置即可满足多数场景,仅需修改
/etc/chrony.conf
中的服务器地址。 - NTPd: 需手动调整
/etc/ntp.conf
,涉及复杂的参数调优(如 server、restrict 规则)。
- Chrony: 配置简单,默认配置即可满足多数场景,仅需修改
-
资源消耗与稳定性
- Chrony: 占用系统资源更少,仅在需要时唤醒 CPU,适合资源受限的云环境或虚拟机。
- NTPd: 长期运行稳定,但启动时可能占用较多资源。
-
安全性
- Chrony: 支持加密通信(如 NTS 协议)和身份验证机制,安全性更高。
- NTPd: 依赖传统认证方式,存在潜在安全漏洞。
5.适用场景建议
工具 | 推荐场景 | 典型用例 |
---|---|---|
Chrony | 网络不稳定、高精度需求、资源敏感环境 | 云计算、移动设备、金融交易系统 |
NTPd | 稳定局域网、传统架构、深度定制需求 | 企业内网时间服务器、科研计算环境 |
二、Chrony 软件安装
# 停用 NTPd
systemctl stop ntpd && systemctl disable ntpd
# 安装 Chrony
yum install chrony
# 启用并配置
systemctl enable --now chronyd
三、Chrony 时钟服务器配置
1.配置文件位置
在大多数 Linux 系统中,Chrony 的主要配置文件是 /etc/chrony.conf
。
2.配置文件常用参数及作用
指令 | 作用 |
---|---|
server | 用于指定外部 NTP 服务器的地址,可指定多个服务器提高可靠性。例如:server ntp1.example.com iburst |
refclock | 仅作为内网服务端,可注释server 服务器,添加本地硬件时钟。例如:refclock SHM 0 offset 0.0 delay 0.0 |
iburst | 当 Chrony 第一次启动或无法从服务器获得响应时,它会在短时间内发送一连串的请求以快速同步时间。这对于初次同步或网络条件不稳定时快速准确地设置时钟非常有用。 |
makestep | 此指令用于设置在启动时或在发现较大时钟偏差时立即调整时钟的阈值。例如:makestep 1.0 3 表示当时间偏差超过 1 秒时,最多进行 3 次大步调整。 |
maxupdateskew | 此参数用于设置在认为时钟偏差是由网络条件引起之前,允许的最大时钟频率误差的百分比。 |
driftfile | 指定漂移文件的位置,Chrony 会记录时钟的漂移信息到该文件中。例如:driftfile /var/lib/chrony/drift |
logdir | 指定日志文件的存储目录。例如:logdir /var/log/chrony |
log | 用于指定要记录的日志信息类型,如 log measurements statistics tracking 表示记录测量、统计和跟踪信息。 |
allow | 在配置文件中添加 allow 指令,指定允许同步的客户端网段 |
local stratum | 即使无外部时间源也能作为独立时钟源 |
3.服务端配置示例
编辑 /etc/chrony.conf
配置以下相关信息
#使用公共 NTP 服务器 ,如果作为内网服务器可以使用 refclock SHM 0 offset 0.0 delay 0.0 替换 server参数
server ntp.aliyun.com iburst
server time.google.com iburst
#指定漂移文件位置
driftfile /var/lib/chrony/drift
#设置大步调整阈值
makestep 1.0 3
#记录日志
logdir /var/log/chrony
log measurements statistics tracking
#指定允许同步的客户端网段,允许 192.168.1.0 子网访问 deny all 默认拒绝其他IP
allow 192.168.1.0/24
deny all
#即使无外部时间源也能作为独立时钟源
local stratum 10
4.启动 chrony 服务
启动服务后chrony
可以作为时钟服务器提供时间同步服务,在不同的 Linux 发行版中,重启命令可能有所不同。
#CentOS/RHEL 系统
systemctl restart chronyd
#Ubuntu/Debian 系统
systemctl restart chrony
四、Chrony 客户端同步配置
1.客户端配置示例
编辑 /etc/chrony.conf
配置以下相关信息:
#使用公共 NTP 服务器 ,内网时钟服务器替换相应的IP即可
server ntp.aliyun.com iburst
server time.google.com iburst
#指定漂移文件位置
driftfile /var/lib/chrony/drift
#设置大步调整阈值
makestep 1.0 3
#记录日志
logdir /var/log/chrony
log measurements statistics tracking
2.启动 chrony 服务
#CentOS/RHEL 系统
systemctl restart chronyd
#Ubuntu/Debian 系统
systemctl restart chrony
五、 验证时间同步
1.常用指令
作用 | 指令 |
---|---|
查看时间同步源 | chronyc sources -v |
查看时间同步源状态 | chronyc sourcestats -v |
查看时间同步状态 | chronyc tracking |
立即手工同步 | chronyc -a makestep |
查看当前连接到 Chrony 服务器的客户端列表 | chronyc clients |
2.查看时间同步状态
使用 chronyc tracking
命令查看时间同步状态,确认本地时钟是否已与外部时间源同步。
Reference ID : 41564630 (ntp1.example.com)
Stratum : 3
Ref time (UTC) : Mon Mar 03 16:04:28 2025
System time : 0.000043 seconds fast of NTP time
Last offset : -0.000002 seconds
RMS offset : 0.000021 seconds
Frequency : 1.487 ppm slow
Residual freq : -0.001 ppm
Skew : 0.004 ppm
Root delay : 0.034582 seconds
Root dispersion : 0.000731 seconds
Update interval : 64.4 seconds
Leap status : Normal
结果讲解:
- Reference ID:
- 这是时间参考源的标识。通常是 NTP 服务器的 IP 地址的十六进制表示,括号内是对应的域名。在这个例子中,时间参考源是
ntp1.example.com
。
- 这是时间参考源的标识。通常是 NTP 服务器的 IP 地址的十六进制表示,括号内是对应的域名。在这个例子中,时间参考源是
- Stratum:
- 层级表示时间源的可信度级别。层级越低,越接近精确的时间源(如原子钟)。层级 0 通常是原子钟或
GPS
时钟,层级1
是直接连接到层级0
的服务器,层级2
是连接到层级1
的服务器,以此类推。这里的层级是3
,说明该时间源通过了三级的传递。
- 层级表示时间源的可信度级别。层级越低,越接近精确的时间源(如原子钟)。层级 0 通常是原子钟或
- Ref time (UTC):
- 参考时间,即从参考源接收到的协调世界时(UTC)时间。
- System time:
- 系统时间与 NTP 时间的偏差。正数表示系统时间比 NTP 时间快,负数表示系统时间比 NTP 时间慢。在这个例子中,系统时间比 NTP 时间快
0.000043
秒。
- 系统时间与 NTP 时间的偏差。正数表示系统时间比 NTP 时间快,负数表示系统时间比 NTP 时间慢。在这个例子中,系统时间比 NTP 时间快
- Last offset:
- 上一次测量的系统时间与 NTP 时间的偏差。这里是
-0.000002
秒,意味着上一次测量时系统时间比 NTP 时间慢了这个数值。
- 上一次测量的系统时间与 NTP 时间的偏差。这里是
- RMS offset:
- 均方根偏差,是一段时间内系统时间与 NTP 时间偏差的统计值,反映了时间同步的稳定性。
- Frequency:
- 系统时钟频率与理想时钟频率的偏差。
ppm
表示百万分之一。这里显示1.487 ppm slow
,意味着系统时钟频率比理想频率慢1.487 ppm
。
- 系统时钟频率与理想时钟频率的偏差。
- Residual freq:
- 剩余频率偏差,是对时钟频率调整后仍存在的偏差。
- Skew:
- 频率偏差的不确定性,反映了时钟频率随时间变化的稳定性。
- Root delay:
- 从本地系统到参考源的网络延迟,单位是秒。
- Root dispersion:
- 表示时间误差在网络中传播的分散程度,单位是秒。较小的值表示时间同步的精度较高。
- Update interval:
- Chrony 与参考源进行时间同步的时间间隔,单位是秒。
- Leap status:
- 闰秒状态,
Normal
表示当前没有闰秒调整。其他可能的值包括Insert leap second
(插入闰秒)和Delete leap second
(删除闰秒)。
- 闰秒状态,
3.查看时间源
使用 chronyc sources
列出时间源
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- time1.google.com 2 6 377 32 -28ms[ -28ms] +/- 24ms
^- time2.google.com 2 6 377 32 -29ms[ -29ms] +/- 24ms
^+ time3.google.com 2 6 377 32 -27ms[ -27ms] +/- 24ms
^* time4.google.com 2 6 377 32 -26ms[ -26ms] +/- 24ms
结果讲解
-
210 Number of sources = 4
- 这行信息表示 Chrony 当前配置的时间源数量为 4 个。
210
是 Chrony 内部用于标识该响应的代码。
- 这行信息表示 Chrony 当前配置的时间源数量为 4 个。
-
MS
:这一列包含两个字符,用于表示时间源的状态和模式。- 第一个字符表示源的状态:
^
表示该时间源是一个 NTP 服务器。#
表示该源是一个本地参考时钟(如硬件时钟)。
- 第二个字符表示源的模式:
-
表示该源被暂时拒绝或不可用。+
表示该源是一个候选源,但目前不是首选源。*
表示该源是当前的首选时间源,Chrony 主要根据这个源来同步时间。x
表示该源的时间被认为是错误的,可能是由于网络问题或源本身不可靠。
- 第一个字符表示源的状态:
-
Name/IP address
:显示时间源的名称或 IP 地址。 -
Stratum
:时间源的层级。层级越低,越接近精确的时间源(如原子钟)。层级 0 通常是原子钟或 GPS 时钟,层级 1 是直接连接到层级 0 的服务器,层级 2 是连接到层级 1 的服务器,以此类推。在示例中,所有时间源的层级都是 2。 -
Poll
:Chrony 向该时间源发送请求的时间间隔,以 2 的幂次方秒为单位。例如,6
表示时间间隔为2^6 = 64
秒。 -
Reach
:一个 8 位的十六进制数,表示最近 8 次与该时间源通信的成功次数。377
是八进制表示,转换为十进制是 255,表示最近 8 次通信都成功了。 -
LastRx
:距离最后一次接收到该时间源响应的秒数。在示例中,所有时间源的LastRx
都是 32 秒。 -
Last sample
:这一列包含两个时间值,用方括号分隔。- 方括号外的值是相对于本地时钟的最后一次测量的时间偏移。负数表示本地时钟比源时钟快,正数表示本地时钟比源时钟慢。
- 方括号内的值是经过平滑处理后的时间偏移。
+/-
后面的值是时间偏移的估计误差范围。在示例中,所有时间源的估计误差范围都是 24ms。
通过 chronyc sources
命令的输出,我们可以了解 Chrony 当前使用的时间源的状态、可靠性以及与本地时钟的时间偏移情况,从而判断时间同步的效果和稳定性。
4.查看客户端列表
使用 chronyc clients
指令可以查看当前连接到 Chrony 服务器的客户端列表
Hostname NTP Drop Int IntL Last Cmd Drop Int Last
================================================================================
192.168.1.100 2 0 6 - 36 0 0 - -
结果讲解
- NTP: 客户端请求次数。
- Drop: 丢弃的请求数(通常因网络问题或配置错误)。
- Last: 最后一次请求的时间(单位为秒)。
六、常见问题及解决方法
- 时间未同步:检查配置文件中指定的 NTP 服务器是否可用,可以使用
ping
命令测试网络连通性。另外,检查防火墙是否开放了 NTP 服务使用的 UDP 123 端口。 - 服务无法启动:查看系统日志文件(如
/var/log/messages
或/var/log/syslog
),查找相关错误信息,根据错误提示进行排查。可能是配置文件语法错误或依赖服务未正常运行。