文章目录
- 注意
- Chrony介绍
- Chrony 支持的系统与联系方式
- Chrony Git 仓库
- 环境准备
- 服务端
- 确认是否安装chrony
- 如果没有安装,那就执行以下命令进行安装
- 配置文件/etc/chrony.conf
- 命令参数讲解
- 基本用法
- 选项
- 命令
- 系统时钟命令
- 时间源命令
- NTP 访问命令
- 执行命令参考
- 客户端
- 确认是否安装chrony
- 如果没有安装,那就执行以下命令进行安装
- 编辑/etc/chrony.conf,添加时间服务器为服务端地址,其余配置不用动
- 常用chronyc命令如下
- 场景
注意
有时候重启不起来,可以查看/var/log/message,博主因为chronyc版本是最新的,但是不兼容linux的内核,需要升级系统版本或者直接yum -y update
Chrony介绍
概述
Chrony 是一款多功能的网络时间协议(NTP)实现,它能够通过NTP服务器来同步系统时钟。此外,它还可以作为NTPv4(RFC 5905)服务器和对等体,为网络中的其他计算机提供时间服务。
适用环境
Chrony 设计用于在广泛的条件下表现出色,包括间歇性网络连接、网络拥堵严重、温度变化(普通计算机时钟对温度敏感)以及非持续运行的系统,或在虚拟机上运行的系统。Chrony 的适应性使其成为了在各种复杂环境中保持时间同步的理想选择。
同步精度
在实际应用中,Chrony 的同步精度非常高。对于通过互联网同步的两台机器,典型的精度可以达到几毫秒以内;而在局域网(LAN)中,精度通常在几十微秒内。如果使用硬件时间戳或硬件参考时钟,甚至可以达到亚微秒级的精度。
组件与功能
Chrony 包含两个主要程序:
- chronyd:这是一个守护进程,可以在系统启动时运行。
- chronyc:这是一个命令行界面程序,可以用于监控 chronyd 的性能,并在其运行时更改各种操作参数。
Chrony 的设计使得它不仅适用于传统的服务器和桌面系统,还能够胜任一些更加苛刻的环境,如移动设备或间歇连接的系统。因此,Chrony 已成为许多对时间同步有高要求的用户和组织的首选方案。
Chrony 支持的系统与联系方式
支持的系统
Chrony 软件支持以下操作系统:
- Linux
- FreeBSD
- NetBSD
- macOS
- illumos
此外,与这些系统紧密相关的操作系统也可能兼容。如果是其他系统,则可能需要进行移植工作才能运行 Chrony。
联系方式
Chrony 项目提供了两个邮件列表来帮助用户解决问题和参与开发:
- chrony-user:用于用户提问、提交错误报告。
- chrony-devel:用于提交补丁和开发讨论。
有关邮件列表的更多信息,请访问 Chrony 官方网站。
对于安全漏洞,建议直接使用加密方式联系维护者进行报告。
开发和维护者
Chrony 最初由 Richard Curnow 编写,目前由 Miroslav Lichvar 维护和开发(PGP 密钥可用)。
官方网址
欲了解更多信息,请访问 Chrony 官方网站。
Chrony Git 仓库
Chrony 的 Git 仓库托管在 GitLab 上,可以通过以下链接访问:
- Chrony Git 仓库
要克隆这个仓库,可以使用以下命令:
git clone https://gitlab.com/chrony/chrony.git
通过克隆仓库,您可以获得 Chrony 的最新源代码,并可以参与开发或定制。
环境准备
主机名 | IP | 用途 |
---|---|---|
10-255-101-147 | 10.255.101.147 | 时间服务器,需要安装chrony |
10-255-101-203 | 10.255.101.203 | 客户端服务器,同步时间,也需要安装chrony |
服务端
确认是否安装chrony
systemctl status chronyd
如果没有安装,那就执行以下命令进行安装
# 安装
yum -y install chrony
# 开机自启
systemctl enable chronyd
# 启动
systemctl start chronyd
配置文件/etc/chrony.conf
默认的可以删除,也可以对比看一下,我主要是中文注释,不是英文其他都一样,配置很多可以参考官网的配置
# 这个配置文件用于Chrony的时间同步配置
# 使用阿里云的NTP服务器池进行时间同步。
pool ntp1.aliyun.com iburst
pool ntp2.aliyun.com iburst
pool ntp3.aliyun.com iburst
pool ntp4.aliyun.com iburst
pool ntp5.aliyun.com iburst
pool ntp6.aliyun.com iburst
# 使用Rocky Linux的NTP服务器池进行时间同步。
pool 2.rocky.pool.ntp.org iburst
# 从DHCP获取的NTP服务器。
sourcedir /run/chrony-dhcp
# 记录系统时钟的漂移率,即系统时钟增速或减速的速率。
driftfile /var/lib/chrony/drift
# 允许在前3次更新中,如果时间偏差超过1秒,可以立即调整系统时钟。
makestep 1.0 3
# 启用内核对实时时钟 (RTC) 的同步。
rtcsync
# 启用所有支持硬件时间戳的接口上的硬件时间戳。
#hwtimestamp *
# 增加调整系统时钟所需的最少可选择源的数量。
#minsources 2
# 允许本地网络中的NTP客户端访问,不指定就是允许所有,默认不开启
# 允许10.255.101.0的地址段同步
allow 10.255.101.0/24
# 允许192.168.1.0的地址段同步
allow 192.168.1.0/24
# 即使没有同步到时间源,也允许提供时间服务。
#local stratum 10
# 为所有NTP源要求身份验证 (nts 或 key 选项)。
#authselectmode require
# 指定包含NTP身份验证密钥的文件。
keyfile /etc/chrony.keys
# 保存NTS密钥和cookies。
ntsdumpdir /var/lib/chrony
# 通过slew(渐变调整)插入/删除闰秒,而不是通过stepping(步进调整)。
#leapsecmode slew
# 从系统时区数据库获取TAI-UTC偏移量和闰秒信息。
leapsectz right/UTC
# 指定日志文件的目录。
logdir /var/log/chrony
# 选择要记录的信息。
#log measurements statistics tracking
注意看allow是允许那个地址段的,不设置表示所有客户端都可同步
修改完进行重启
systemctl restart chronyd
命令参数讲解
基本用法
chronyc [OPTION]... [COMMAND]...
选项
-4
:仅将主机名解析为 IPv4 地址。-6
:仅将主机名解析为 IPv6 地址。-n
:禁用 IP 地址到主机名的解析。-m
:允许在命令行上指定多个命令。-h host
:指定要联系的chronyc
主机。-p port
:指定目标chronyd
使用的 UDP 端口号(默认为 323)。-v, --version
:显示chronyc
的版本号并退出。--help
:显示帮助信息并退出。
命令
系统时钟命令
tracking
:显示系统时钟性能的参数。makestep
:使系统时钟立即跳到正确的时间。waitsync
:等待chronyd
同步。
时间源命令
sources
:显示当前时间源的信息。sourcestats
:显示每个时间源的漂移率和偏移估计过程信息。selectdata
:显示时间源选择的具体信息。selectopts
:修改 NTP 源的配置选择选项。reselect
:强制chronyd
重新选择最佳同步源。add peer
、add pool
、add server
:添加新的 NTP 对等端、服务器池或服务器。delete
:删除 NTP 服务器或对等端。burst
:让chronyd
在短时间内对每个 NTP 源进行一系列测量。
NTP 访问命令
accheck
:检查特定主机是否允许 NTP 访问。clients
:显示访问 NTP 服务器的客户端列表。serverstats
:显示 NTP 和命令服务器统计信息。allow
、deny
:配置允许或拒绝 NTP 访问的主机。
执行命令参考
# 检查 Chrony 的时间同步状态
[root@10-255-101-147 ~]# chronyc tracking
# 输出解释:
# Reference ID: 当前参考时间源的IP地址或主机名。
# Stratum: 时间源的层级,值越小,离实际时间源越近。
# Ref time (UTC): 上次与时间源同步的时间(UTC时间)。
# System time: 系统时间与NTP时间的差异,单位为秒。
# Last offset: 上次同步的时间偏移量。
# RMS offset: 均方根偏差,即所有时间偏移的均方根值。
# Frequency: 系统时钟的频率误差,单位为ppm(百万分之一)。
# Residual freq: 剩余频率误差。
# Skew: 系统时钟的频率误差不确定性,单位为ppm。
# Root delay: 本地系统与参考时间源之间的总网络延迟。
# Root dispersion: 时间源的不确定性。
# Update interval: 两次同步之间的时间间隔。
# Leap status: 闰秒状态,Normal表示正常。
Reference ID : CA701D52 (dns1.synet.edu.cn)
Stratum : 2
Ref time (UTC) : Tue Aug 13 07:44:24 2024
System time : 0.000010633 seconds fast of NTP time
Last offset : -0.000089578 seconds
RMS offset : 0.000145360 seconds
Frequency : 16.293 ppm fast
Residual freq : -0.001 ppm
Skew : 0.025 ppm
Root delay : 0.014218345 seconds
Root dispersion : 0.000804991 seconds
Update interval : 1032.6 seconds
Leap status : Normal
# 查看当前Chrony同步的时间源
[root@10-255-101-147 ~]# chronyc sources
# 输出解释:
# MS: 标记同步的状态符号。^表示备选时间源,*表示当前正在使用的时间源。
# Name/IP address: 时间源的主机名或IP地址。
# Stratum: 时间源的层级。
# Poll: 轮询时间间隔。
# Reach: Reachability, 表示与该时间源的最近轮询是否成功。
# LastRx: 上次收到时间更新的时间。
# Last sample: 最后一次采样的偏差量和它的时间差异。
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp5.flashdance.cx 2 10 175 33m -26ms[ -26ms] +/- 130ms
^- stratum2-1.ntp.mow01.ru.> 2 10 72 46m -16ms[ -16ms] +/- 63ms
^- 1.117.63.30 3 9 377 160 -4752us[-4752us] +/- 158ms
^- ntp7.flashdance.cx 2 10 377 672 -32ms[ -32ms] +/- 154ms
^- 120.25.115.20 2 10 20 85m +168us[ +80us] +/- 20ms
^+ 203.107.6.88 2 10 377 218 +242us[ +242us] +/- 16ms
^* dns1.synet.edu.cn 1 10 377 506 -469us[ -559us] +/- 7377us
^- ntp.wdc2.us.leaseweb.net 2 10 157 34m +6404us[+6338us] +/- 252ms
^- 119.28.206.193 2 10 374 96m -281us[ -462us] +/- 53ms
^- time.cloudflare.com 3 10 213 23m +25ms[ +25ms] +/- 139ms
# 手动执行系统时钟的步进调整,使其立即与时间源同步
[root@10-255-101-147 ~]# chronyc makestep
200 OK
# 查看连接到本地NTP服务器的客户端
[root@10-255-101-147 ~]# chronyc clients
# 输出解释:
# Hostname: 客户端主机名或IP地址。
# NTP: 接收的NTP数据包数。
# Drop: 丢弃的NTP数据包数。
# Int: 时间间隔。
# IntL: 上次接收时间间隔。
# Last: 上次接收NTP数据包的时间。
# Cmd: 接收的命令包数。
Hostname NTP Drop Int IntL Last Cmd Drop Int Last
===============================================================================
10.255.98.6 263 0 8 - 156 0 0 - -
10.255.101.203 271 0 8 - 107 0 0 - -
客户端
客户端同步时间也使用chrony守护进程进行同步
确认是否安装chrony
systemctl status chronyd
如果没有安装,那就执行以下命令进行安装
# 安装
yum -y install chrony
# 开机自启
systemctl enable chronyd
# 启动
systemctl start chronyd
编辑/etc/chrony.conf,添加时间服务器为服务端地址,其余配置不用动
[root@10-255-101-203 ~]# cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 10.255.101.147 iburst
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2
# Allow NTP client access from local network.
#allow 192.168.0.0/16
# Serve time even if not synchronized to a time source.
#local stratum 10
# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys
# Specify directory for log files.
logdir /var/log/chrony
# Select which information is logged.
#log measurements statistics tracking
[root@10-255-101-203 ~]#
修改完进行重启
systemctl restart chronyd
常用chronyc命令如下
# 查看 NTP 服务器列表及其详细信息
chronyc sources -v
# 查看 NTP 服务器的统计信息和性能数据
chronyc sourcestats -v
# 检查 NTP 服务器的在线状态
chronyc activity -v
# 查看系统时钟的跟踪状态和性能参数
chronyc tracking -v
# 强制系统时钟立即同步(慎用,可能影响正在运行的服务)
chronyc -a makestep
# 查看访问 NTP 服务器的客户端列表
chronyc clients
# 等待 Chrony 同步完成
chronyc waitsync
# 添加新的 NTP 服务器
chronyc add server <ntp_server_ip_or_hostname> [options]
# 删除现有的 NTP 服务器
chronyc delete <ntp_server_ip_or_hostname>
# 刷新 NTP 服务器的 IP 地址(如果服务器使用动态 DNS)
chronyc refresh
# 允许或拒绝特定主机访问 NTP 服务
chronyc allow <subnet_or_host>
chronyc deny <subnet_or_host>
# 查看 RTC(实时时钟)的参数
chronyc rtcdata
# 校正 RTC 时钟到系统时钟
chronyc trimrtc
# 查看 NTP 服务器统计信息
chronyc serverstats
# 查看当前 Chrony 守护进程的版本
chronyc -v
场景
监控时候,如果没有外网,服务端可以直接指定到自己,例如服务端那可以配置
server 10.255.101.147 iburst
其他的局域网内都可以向这里进行同步,这种情况就不需要外网了