Chrony
是一款开源的网络时间协议(NTP)客户端和服务端软件,旨在提供高精度的时间同步功能。相较于传统的 NTP
实现如 ntpd
,Chrony
提供了一些改进和优势,包括更快的同步速度、低延迟、低CPU占用和低内存消耗。以下是 Chrony
的几个关键特性和使用场景:
Chrony
的组成
chronyd
:这是一个后台守护进程,负责与时间服务器通信,根据网络条件和系统时钟特性动态调整内核中的系统时钟,以最小化时间和频率误差。它能够智能地应对网络延迟、间歇性连接、时钟漂移以及虚拟环境中的不稳定性。chronyc
:这是一个命令行工具,为用户提供了一个界面来监控Chrony
的性能、查看同步状态、调整配置参数以及手动执行某些操作,如立即同步或查看时间源的状态。
Chrony
的特点:
- 快速同步:
Chrony
使用特殊算法能快速减少系统时钟的偏移和频率误差,非常适合那些非24小时运行的系统,如虚拟机。 - 频率调整:能够更有效地应对时钟频率的快速变化,适合于拥有不稳定时钟的虚拟环境或受节能技术影响的系统。
- 节能技术兼容性:即使在节能技术导致CPU频率变化的系统中也能保持良好的时间同步。
- 灵活配置:支持多种同步源,包括
NTP
服务器、GPS
接收器或其他参考时钟,以及手动时间输入。
Chrony
使用场景:
- 企业服务器:确保数据中心内的所有服务器保持时间同步,这对于日志记录、交易时间戳、数据一致性等至关重要。
- 桌面系统:提高个人电脑的时间精度,尤其是对于依赖精确时间的应用,如开发环境、金融交易软件或科学计算。
- 嵌入式系统和物联网设备:在资源有限的设备上,
Chrony
的低资源消耗特性使其成为理想的选择。 - 虚拟环境:在云服务器或虚拟机中,
Chrony
能有效应对由于虚拟化带来的时钟漂移问题。 - 高精度应用:科研机构、天文观测、卫星通信等领域,需要高度精确时间同步的应用场景。
综上,Chrony
是一个强大且灵活的时间同步工具,适用于各种需要精确时间同步的环境,尤其在面对现代计算挑战如虚拟化、节能技术和网络波动时表现出色。
yum
命令查看Chrony
是否安装
要使用 yum
命令查看 Chrony
是否已经安装,可以执行以下命令:
yum list installed chrony
- 1.
这条命令会列出所有已安装的软件包,并在结果中查找是否有 chrony
。如果 chrony
出现在输出列表中,那么就意味着 Chrony
已经安装在你的系统上。如果没有找到 chrony
,则表示它尚未安装。
yum
命令安装 Chrony
对于 CentOS 7
及更高版本,Chrony
很可能是预装的。如果不是,或者你需要在较旧的 CentOS
版本上安装,可以使用 YUM 包管理器来安装 Chrony
:
sudo yum install chrony -y
- 1.
对于 CentOS 8
及更高版本,使用 DNF(DNF 是 YUM 的替代品):
sudo dnf install chrony -y
- 1.
Chrony
常用命令
启动 Chrony
服务
sudo systemctl start chronyd
- 1.
对于较老的系统,可能需要使用 service
命令:
sudo service chronyd start
- 1.
停止 Chrony
服务
sudo systemctl stop chronyd
- 1.
重启 Chrony
服务
sudo systemctl restart chronyd
- 1.
设置 Chrony
开机启动
sudo systemctl enable chronyd
- 1.
禁用 Chrony
开机启动
sudo systemctl disable chronyd
- 1.
查看 Chrony
状态
sudo systemctl status chronyd
- 1.
查看 Chrony
日志
默认的日志路径可能在 /var/log/chrony/chronyd.log
,你可以使用如下命令查看:
sudo cat /var/log/chrony/chronyd.log
- 1.
或使用 journalctl
查看实时日志:
sudo journalctl -u chronyd -f
- 1.
Chronyc
命令行工具
chronyc
是 Chrony
的用户界面,用于监视和控制 Chrony
守护进程。一些常用的 chronyc
命令包括:
查看源状态
chronyc sources -v
- 1.
命令返回内容
.-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample ===============================================================================
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
返回参数解析
- Source mode:
^
: 表示此源是作为服务器(server)模式工作,意味着它是一个上游时间服务器。=
: 表示此源是作为对等体(peer)模式工作,意味着它与其他NTP
服务器相互同步。#
: 表示本地时钟,即系统自身的时钟。
- Source state:
*
: 当前已同步(current synced),表明此源正在被用来同步系统时间。+
: 组合使用(combined),意味着虽然此源未直接用于同步,但它对最终的时间调整有贡献。-
: 未组合使用(not combined),此源的信息未被合并进系统时间的计算中。?
: 不可达(unreachable),表示网络不可达或通信失败。x
: 时间可能有误(time may be in error),可能是因为多次连续的测量不一致。~
: 时间变化过大(time too variable),源的时间跳跃或变动太大,不适宜作为同步源。
- Reachability register (octal): 到达性寄存器,用八进制表示,反映了
Chrony
与时间源之间连接的稳定性。 - Log2(Polling interval): 轮询间隔的对数(以2为底)。这个值表示
Chrony
与时间源之间通信的频率,值越大表示轮询间隔越长。
接下来,具体到每行数据的结构:
- MS: Mode and State,模式和状态,结合上述的Source mode和Source state。
- Name/IP address: 时间源的名称或
IP
地址。 - Stratum: 层级,表示此源在
NTP
层次结构中的位置。 - Poll: 当前的轮询间隔,单位为秒。
- Reach: 到达性,八进制表示的位图,展示了最近八次轮询的成功情况。
- LastRx: 最后一次接收到响应的时间。
- Last sample: 最后一个样本的时间戳及偏移量信息,格式为:
xxxx
: 调整后的偏移量(offset),即系统时钟调整后与该源的差异,单位为毫秒。[yyyy]
: 测量到的偏移量,未经过Chrony
调整的原始偏移量。+/- zzzz
: 估算的误差范围,即系统时钟与该源时间的可能偏差范围,单位为毫秒。
.xxxx [yyyy] +/- zzzz
- 1.
根据以上信息,你可以判断每个时间源的健康状况、系统与之同步的情况,以及时间同步的整体质量。
立即同步时间
(使系统时钟尽快与参考时间源同步,而非平滑调整):
chronyc makestep
- 1.
列出跟踪记录
chronyc tracking
- 1.
命令返回内容
Reference ID : CA701FC5 (dns2.synet.edu.cn) Stratum : 2 Ref time (UTC) : Sat Jun 01 08:28:26 2024 System time : 0.000122217 seconds fast of NTP time Last offset : +0.000072612 seconds RMS offset : 212.469070435 seconds Frequency : 3.279 ppm slow Residual freq : +0.003 ppm Skew : 0.157 ppm Root delay : 0.016848214 seconds Root dispersion : 0.001658257 seconds Update interval : 1026.4 seconds Leap status : Normal
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
返回参数解析
- Reference ID: 这是跟踪的参考时钟标识符,通常是一个IP地址或域名的一部分,这里是
CA701FC5 (dns2.synet.edu.cn)
,表明您的系统通过DNS名为dns2.synet.edu.cn
的服务器进行时间同步。 - Stratum: 表示系统的NTP层级,这里是2,意味着您的系统是第二层时钟,直接与第一层(通常是原子钟或GPS时钟作为参考源的服务器)同步。
- Ref time (UTC): 参考时间,即Chrony最后一次成功同步时参考时钟的时间,这里是 "Sat Jun 01 08:28:26 2024"(注意:日期可能不正确,需确认)。
- System time: 系统时间与NTP时间的偏差,这里是 "+0.000122217 seconds fast",表明系统时间比NTP标准时间快了约0.000122秒。
- Last offset: 上一次测量的偏移量,这里是 "+0.000072612 seconds",即上次检查时系统时间比NTP时间快了约0.000073秒。
- RMS offset: 偏移量的均方根(Root Mean Square),长时间内的平均偏移量的波动大小,这里是 "212.469070435 seconds",这个值异常大,通常应接近0且远小于1秒,表明之前可能存在严重的时间同步问题或配置不当。
- Frequency: 频率偏差,这里是 "3.279 ppm slow",表示系统时钟比理想频率慢了3.279 parts per million(每百万分之3.279),通常Chrony会自动调整此频率。
- Residual freq: 残余频率偏差,即最近的频率调整后剩余的偏差,这里是 "+0.003 ppm",意味着最近调整后略有加速。
- Skew: 频率偏差的趋势,这里是 "0.157 ppm",若此值接近0表示系统时钟频率相对稳定。
- Root delay: 到参考时钟的总往返延迟,这里是 "0.016848214 seconds",表明网络延迟较小。
- Root dispersion: 时间分散度,即参考时钟不确定性加上网络传输过程中的不确定度,这里是 "0.001658257 seconds",也相对较低,表示时间同步质量较好。
- Update interval: Chrony与参考源更新时间间隔,这里是 "1026.4 seconds",表示大约每17分钟轮询一次时间源。
- Leap status: 跳秒状态,这里是 "Normal",表明没有即将发生的闰秒调整。
从上述输出看,特别需要注意的是 RMS offset 值异常大,这通常意味着在过去有一段时间系统时间与NTP时间之间存在巨大差异,或者可能是测量误差。如果这个问题持续存在,应检查网络连接、时间源的可靠性以及Chrony的配置。
查看帮助信息
chronyc help
- 1.
以上就是 Chrony
在 CentOS
上的基本安装方法和一些常用命令。根据实际情况和需求,可能还需要对 /etc/chrony.conf
配置文件进行适当的调整。
内网环境下的Chrony
服务配置
在无法联网的服务器集群中,要使集群中的机器通过一台中心节点进行时间同步,这样只需要定期更新中心节点的服务器时间,即可完成整个集群的时间同步,可以采用如下步骤,设置Chrony
来实现内部时间同步:
设置中心节点(时间服务器)
首先确保在充当时间服务器的中心节点上安装Chrony
。
配置Chrony
编辑Chrony
的配置文件 /etc/chrony.conf
,使其作为本地时间源而非外部NTP
服务器。可以注释掉所有外部时间服务器的行,并添加本地作为时间源的声明。
server 127.127.1.0 # Local clock fudge 127.127.1.0 stratum 10
- 1.
- 2.
这里,127.127.1.0
是本地时钟的表示,fudge
命令设置了该时钟的层级为10,意味着它是不太可靠的时间源,但在没有其他外部源的情况下是必要的。
启动并启用Chrony
服务
sudo systemctl start chronyd sudo systemctl enable chronyd
- 1.
- 2.
手动校准时间
如果中心节点的时间不准确,首先需要手动将其调整到尽可能准确的时间,可以使用 date
命令或 ntpdate
(如果安装了)从一个已知准确的时间源临时同步。
设置集群中其他节点
- 安装
Chrony
:在集群中的每台机器上安装Chrony
。 - 配置
Chrony
:编辑每台机器上的/etc/chrony.conf
文件,添加中心节点作为时间源,假设中心节点的IP
地址为192.168.1.100
,则添加:
server 192.168.1.100 iburst
- 1.
iburst
参数告诉Chrony
在启动时迅速进行多次查询以快速同步时间。
- 重启
Chrony
服务:在每台机器上重启Chrony
服务以应用配置。
sudo systemctl restart chronyd
- 1.
验证时间同步
在所有节点上,使用 chronyc sources -v
查看时间源状态,确保它们都指向了中心节点,并且状态为 *
表示已同步。
注意事项
- 确保集群内网络通信畅通,防火墙规则允许
NTP
(UDP 123端口)通信。 - 定期手动检查中心节点的时间准确性,并必要时进行调整,因为所有集群节点都将依赖于此时间源。
- 在高度敏感的环境中,可能还需要考虑物理时钟源(如GPS接收器)接入中心节点,以提高时间同步的准确性。