Linux中服务器时间同步

发布于:2025-04-22 ⋅ 阅读:(12) ⋅ 点赞:(0)

简单介绍

在 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可能会出一些问题,建议用一个检测就行,可能你刚开始是?,可以多刷新几次,看结果是否变化。


网站公告

今日签到

点亮在社区的每一天
去签到