简单介绍
在 redhat 8 之前,时间同步服务是使用 NTP(网络时间协议)来实现的,在 redhat 8 及之
后使用是 NTP 的实现工具 chrony 来实现时间同步。
在 redhat 8 及之后,默认情况下已经安装好 chrony 软件并已经开机启动 chronyd 服务。我
们可以使用 chronyc 命令来临时修改时间同步,但更建议去修改 /etc/chony.conf 配置文件
来实现持久化的修改。
[root@nfs share]# rpm -ql chrony | grep chrony
/etc/chrony.conf # 核心配置文件
/etc/chrony.keys
/etc/dhcp/dhclient.d/chrony.sh
/etc/logrotate.d/chrony
/etc/sysconfig/chronyd # chrony的守护进程配置文件
/usr/bin/chronyc # chrony的客户端
/usr/lib/NetworkManager/dispatcher.d/20-chrony-dhcp
/usr/lib/NetworkManager/dispatcher.d/20-chrony-onoffline
/usr/lib/systemd/ntp-units.d/50-chronyd.list
/usr/lib/systemd/system/chrony-wait.service
检查同步
/usr/lib/systemd/system/chronyd-restricted.service
/usr/lib/systemd/system/chronyd.service # 用户管理chrony的服务
/usr/lib/sysusers.d/chrony.conf
/usr/sbin/chronyd # chrony的守护进程执行文件
/usr/share/doc/chrony
/usr/share/doc/chrony/FAQ
/usr/share/doc/chrony/NEWS
/usr/share/doc/chrony/README
/usr/share/licenses/chrony
/usr/share/licenses/chrony/COPYING
/usr/share/man/man1/chronyc.1.gz
/usr/share/man/man5/chrony.conf.5.gz
/usr/share/man/man8/chronyd.8.gz
/var/lib/chrony
/var/lib/chrony/drift
/var/lib/chrony/rtc
/var/log/chrony # 日志文件
检查同步
[root@nfs share]# chronyc tracking
Reference ID : A29FC801 (162.159.200.1)
Stratum : 4
Ref time (UTC) : Sat Apr 19 11:39:03 2025
System time : 0.000000116 seconds slow of NTP time
Last offset : -0.001120899 seconds
RMS offset : 0.017774450 seconds
Frequency : 38.105 ppm fast
Residual freq : -0.045 ppm
Skew : 45.345 ppm
Root delay : 0.214364186 seconds
Root dispersion : 0.265033543 seconds
Update interval : 65.2 seconds
Leap status : Normal
详细介绍
chronyc tracking 命令用于查看 chrony 当前的时钟同步状态,以下是对输出中各字段的详细解释:
Reference ID:值为 A29FC801 (162.159.200.1) ,指的是当前系统正在与之同步的远程 NTP 服务器的 IP 地址(括号内内容) ,十六进制形式 A29FC801 也是该服务器地址的另一种表示方式。它表明了当前系统获取时间同步的来源服务器。
Stratum:值为 4 ,表示当前系统时钟在 NTP 层次结构中的级别。Stratum 1 服务器直接与原子钟或 GPS 时钟等高精度的时间源同步;Stratum 2 服务器与 Stratum 1 服务器同步,依此类推。这里系统时钟的 Stratum 为 4 ,意味着它是经过多层同步后与某个 Stratum 较低的服务器完成同步,数字越小说明越接近 NTP 服务器,时间同步的精度理论上相对越高。
Ref time (UTC):值为 Sat Apr 19 11:39:03 2025 ,指的是上一次从远程 NTP 服务器接收到时间更新的时间,采用世界协调时(UTC)表示。这一时间记录了最近一次系统从 NTP 服务器获取准确时间的时刻。
System time:值为 0.000000116 seconds slow of NTP time ,表示当前系统时间与 NTP 服务器时间的差异。这里表明系统时间比 NTP 时间慢了 0.000000116 秒 。如果显示为 “fast” ,则表示系统时间比 NTP 时钟快。
Last offset:值为 -0.001120899 seconds ,指的是上一次时间同步时,系统时间与 NTP 服务器时间的偏移量。负数表示上一次同步时系统时间比 NTP 时间快了相应的秒数,正数则表示系统时间比 NTP 时间慢了相应的秒数。
RMS offset:值为 0.017774450 seconds ,即时间偏移量的均方根,是一个衡量时间同步精度的指标。它反映了在最近一段时间内,系统时间与 NTP 服务器时间之间偏差的平均水平,数值越小说明时间同步的精度越高。
Frequency:值为 38.105 ppm fast ,表示本地系统时钟的频率误差。“ppm” 是 “parts per million” 的缩写,意为每百万部分。这里表示系统时钟的速度相对于完美的时间源,每百万秒会快 38.105 秒 ,即系统时钟运行得比理想中的完美时钟要快。如果显示为 “slow” ,则表示系统时钟比完美时钟慢。
Residual freq:值为 -0.045 ppm ,指的是在最后一次同步之后,已经观察到的本地时钟频率的改变。它反映了时钟频率在一段时间内的变化趋势,这里负号表示频率有降低的趋势。
Skew:值为 45.345 ppm ,表示本地时钟频率估计的不确定性,即系统时钟频率的稳定性。该值越大,说明时钟频率的稳定性越差,也就是系统时钟的准确性可能会受到一定影响。
Root delay:值为 0.214364186 seconds ,指的是从本地系统到 NTP 服务器的往返时间延迟。它反映了网络传输等因素对时间同步的影响,数值越小说明本地系统与 NTP 服务器之间的通信延迟越低。
Root dispersion:值为 0.265033543 seconds ,表示本地时钟和 NTP 服务器时钟之间的最大可能误差。它综合考虑了各种因素导致的时间偏差,反映了时间同步的最大不确定范围。
Update interval:值为 65.2 seconds ,指的是系统时钟与 NTP 服务器时钟之间进行连续两次同步更新的时间间隔。该时间间隔的设置会影响系统时间与 NTP 时间保持同步的及时性和稳定性。
Leap status:值为 Normal ,表示 NTP 服务器的闰秒状态。“Normal” 说明当前不处于闰秒调整期间;如果出现 “Insert second” ,则表示需要插入闰秒(即增加一秒)来保持时间的准确性;“Delete second” 则表示需要删除闰秒(即减少一秒) 。闰秒调整是为了协调原子时与世界时之间的差异。
总体而言,如果系统时间与 NTP 时间的差异接近于 0 ,并且 “Leap status” 显示为 “Normal” ,通常可以认为时间同步状态是正常的。但还需要结合其他指标,如 RMS offset、Frequency 等来综合判断时间同步的质量和稳定性。
查看当前时间的同步源
[root@nginx ~]# chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp.wdc2.us.leaseweb.net 3 8 317 77 -2185us[-2185us] +/- 164ms
^- time.cloudflare.com 3 8 377 75 +37ms[ +37ms] +/- 158ms
^* time.neu.edu.cn 2 8 377 146 -6428us[-7654us] +/- 35ms
^- ntp6.flashdance.cx 2 8 377 205 -1828us[-3013us] +/- 136ms
详细解释:
chronyc sources命令用于显示与本地系统连接的 NTP(网络时间协议)源的相关信息。它提供了以下有用的信息:
NTP 服务器列表:显示了当前系统正在使用的 NTP 服务器的名称或 IP 地址,如ntp.wdc2.us.leaseweb.net、time.cloudflare.com、time.neu.edu.cn和ntp6.flashdance.cx。这有助于确认系统从哪些服务器获取时间同步。
Stratum(层级):表示每个 NTP 服务器在 NTP 层次结构中的级别。较低的 Stratum 值通常意味着更接近权威时间源,时间同步的精度可能更高。例如,time.neu.edu.cn和ntp6.flashdance.cx的 Stratum 为 2,相对更接近时间源,而ntp.wdc2.us.leaseweb.net和time.cloudflare.com的 Stratum 为 3。
Poll(轮询间隔):显示了系统与 NTP 服务器之间的轮询间隔。轮询间隔决定了系统多久向 NTP 服务器请求一次时间更新。这里的轮询间隔都是 8,说明系统按照一定的时间周期与这些服务器进行时间同步请求。
Reach(可达性):表示系统与 NTP 服务器之间的连接状态。这个值反映了系统成功连接到 NTP 服务器的次数。数值越高,表示连接越稳定。例如,time.cloudflare.com、time.neu.edu.cn和ntp6.flashdance.cx的 Reach 值都为 377,说明与这些服务器的连接较为稳定,而ntp.wdc2.us.leaseweb.net的 Reach 值为 317,相对来说连接稳定性稍差一些。
LastRx(上次接收时间):显示了从 NTP 服务器接收到最后一次时间更新的时间间隔(以秒为单位)。这个信息可以帮助判断服务器的响应及时性。例如,ntp.wdc2.us.leaseweb.net的 LastRx 为 77 秒,time.cloudflare.com的 LastRx 为 75 秒,说明系统在不久前从这些服务器接收到了时间更新。
Last sample(上次样本):提供了上次从 NTP 服务器获取的时间样本与本地系统时间的差异。方括号内的值是实际的时间偏移量,而后面的+/-值表示估计的误差范围。例如,time.neu.edu.cn的时间偏移量为-7654us(微秒),误差范围为+/- 35ms(毫秒),说明本地系统时间比time.neu.edu.cn服务器的时间快了约 7654 微秒,且误差在 35 毫秒左右。
通过查看chronyc sources的输出,系统管理员可以了解当前系统的时间同步来源、服务器的状态以及时间同步的准确性和稳定性,以便及时发现和解决时间同步方面的问题。
也可以使用 -v 选项来查看更详细的信息
[root@nfs share]# chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not
combined,
| / 'x' = may be in error, '~' = too variable, '?' =
unusable.
|| .- 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
======================================================================
=========
^? 193.182.111.143 2 6 0 96m -22ms[ -22ms]
+/- 150ms
^? 162.159.200.1 3 6 0 96m -10ms[ -11ms]
+/- 108ms
^? 193.182.111.142 2 6 0 96m +8917us[+8917us]
+/- 113ms
^? 193.182.111.12 2 6 0 96m -10ms[ -10ms]
+/- 132ms
[root@nfs share]#
sourcestats 命令显示目前被 chronyd 检查的每个源的偏移率和误差估算过程的信息。
[root@nginx ~]# chronyc sourcestats
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
ntp.wdc2.us.leaseweb.net 24 15 40m -1.812 7.011 +1676us 6100us
time.cloudflare.com 27 14 40m -2.573 14.953 -1417us 14ms
time.neu.edu.cn 25 18 36m +0.114 5.950 +28us 5104us
ntp6.flashdance.cx 27 14 42m -3.281 14.473 +5709us 13ms
[root@nginx ~]# chronyc sourcestats -v
.- Number of sample points in measurement set.
/ .- Number of residual runs with same sign.
| / .- Length of measurement set (time).
| | / .- Est. clock freq error (ppm).
| | | / .- Est. error in freq.
| | | | / .- Est. offset.
| | | | | | On the -.
| | | | | | samples. \
| | | | | | |
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
ntp.wdc2.us.leaseweb.net 24 15 40m -2.014 7.011 +1309us 6100us
time.cloudflare.com 27 14 40m -2.775 14.953 -1827us 14ms
time.neu.edu.cn 26 18 41m +0.046 5.404 +1906ns 5029us
ntp6.flashdance.cx 27 14 42m -3.483 14.473 +5261us 13ms
配置时间同步服务*
1、编写/etc/chrony.conf文件
[root@nfs share]# vim /etc/chrony.conf
2 # Please consider joining the pool
(https://www.pool.ntp.org/join.ht ml).
3 server ntp.aliyun.com iburst
25 # Allow NTP client access from local network.
26 allow 192.168.0.0/16
28 # Serve time even if not synchronized to a time source.
29 local stratum 10
第 2 行:是一条注释,提示用户考虑加入 NTP 池(https://www.pool.ntp.org/join.html),这里提供了加入 NTP 池的相关链接信息,NTP 池是由许多志愿者维护的 NTP 服务器集合,可用于获取准确的时间同步。
第 3 行:指定了一个 NTP 服务器为ntp.aliyun.com,并使用了iburst选项。iburst的作用是在初始同步时,以较快的速率发送 NTP 请求,以便更快地与服务器进行时间同步。这行配置表示将阿里云的 NTP 服务器ntp.aliyun.com作为时间源,并且采用iburst方式进行同步。
第 25 - 26 行:配置了允许从本地网络192.168.0.0/16中的 NTP 客户端访问该服务器。192.168.0.0/16是一个 CIDR 表示法的网络地址,它表示一个包含192.168.0.0到192.168.255.255范围内所有 IP 地址的网络。这意味着在这个网络中的设备可以向该chrony服务器发起 NTP 请求以获取时间同步服务。
第 28 - 29 行:配置了即使没有与时间源同步,也提供时间服务,并且将本地层(stratum)设置为 10。通常,stratum用于表示设备在 NTP 层次结构中的位置,数值越大表示离权威时间源越远。这里将本地stratum设置为 10,表明即使在未与外部精确时间源同步的情况下,该服务器也可以为其他设备提供相对不太精确的时间服务。
2、重启chronyd服务
[root@nfs share]# systemctl restart chronyd
3、验证是否同步
[root@nginx ~]# chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- 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
===============================================================================
^* 203.107.6.88 2 6 37 8 -301us[-4829us] +/- 46ms
4、其他服务同步
[root@nginx www]# vim /etc/chrony.conf
# Please consider joining the pool
(https://www.pool.ntp.org/join.html).
server 192.168.72.133 iburs
5、你选择的这个虚拟机ip需要进行一定的配置,配置为ntp服务器
vim /etc/chrony.conf
# 注释掉默认的服务器配置,添加可靠的外部时间源
# pool 2.debian.pool.ntp.org offline iburst
server ntp.aliyun.com iburst
server time.google.com iburst
# 允许哪些客户端可以访问该 NTP 服务器
# 允许 192.168.0.0/16 网段的客户端访问 看你自己的网段
allow 192.168.0.0/16
# 即使没有与外部时间源同步,也可以提供时间服务
local stratum 10
修改完配置文件要重启服务
6、原本虚拟机重启服务然后验证服务是否同步
[root@nginx www]# chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not
combined,
| / 'x' = may be in error, '~' = too variable, '?' =
unusable.
|| .- 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
======================================================================
=========
^* 192.168.72.133 10 6 17 7 -7921ns[ -14us]
+/- 467us
7、结果分析
^* 192.168.72.133 10 6 17 7 -7921ns[ -14us]
MS 列符号
Source mode 符号
^:表示该时间源是一个 NTP 服务器。
=:表示该时间源是一个对等体(peer),对等体之间可以相互同步时间。
#:表示该时间源是本地时钟,即使用本地系统的时钟作为时间参考。
Source state 符号
*:表示该时间源是当前最佳的时间源,chrony 会优先使用它进行时间同步。
+:表示该时间源与其他时间源组合使用,用于提高时间同步的准确性。
-:表示该时间源未被用于组合,可能是因为其质量不够好或者其他原因。
x:表示该时间源可能存在错误,可能是服务器故障、网络问题或时间数据不合理等。
~:表示该时间源的时间数据变化过大,不稳定,不适合用于精确的时间同步。
?:表示该时间源不可用,如前面分析的那样,可能是网络连接、服务器配置等问题导致。
结果后面全部为0说明根本没有同步上,一般前面的符号为?,这里设置多个ntp可能会出一些问题,建议用一个检测就行,可能你刚开始是?,可以多刷新几次,看结果是否变化。