网络时间协议
必须在服务器上保持正确的时间。 在处理需要按特定顺序处理的金融交易或其他重要功能时尤其如此。 使用网络时间协议(或 NTP),计算机可以将其内部时钟时间与互联网标准参考时钟同步。 本质上,NTP 是服务器的层次结构。 服务器的层数越高,计时越准确,服务器的层数越低,准确性和时间稳定性越低。 Stratus 由与初始参考时钟的距离定义。
- Stratum 0 由原子钟、GPS 卫星和“国家时间和频率传输”无线电接收器组成,这些无线电接收器经过调谐以接收原子钟广播的信号。 它们不直接连接到任何设备以提供时间同步。
- Stratum 1 是主服务器,直接连接到 Stratum 0 服务器,并将时间分配给 Stratum 2 及以下服务器。 一组 Stratum 0 和 Stratum 1 服务器被视为 NTP 服务器。
- 一组 Stratum 2 级服务器被认为是 NTP Peers,可以相互共享以及 Stratum 的以下服务器。 第 2 层服务器对任何人都是公开的,可供任何人连接,它们为第 3 层服务器提供时间,以此类推。
- Stratum 3 及以下服务器,下至 Stratum 15 服务器,根据需要将时间分配到它们下面的级别。 第 15 层是最低的层。
计时码表
要从远程 NTP 服务器获取正确的时间,本地服务器需要使用 NTP 客户端。 Chrony 就是这样的客户之一。 Chrony 是实现此目的的绝佳选择,因为它旨在在各种条件下运行良好,例如间歇性和/或严重拥塞的网络连接或其他不利条件。 Chrony 在启动时将系统内部时钟时间与更高的 Stratum NTP 服务器、参考时钟或计算机的实时时钟同步。 它也可以通过使用手表和键盘手动与输入同步。 这种同步方法不是最准确的,因此不鼓励使用。
通常,在 LAN 上,两台同步机器之间的准确度在几毫秒内。 Chrony 由两个主要系统组成,chronyc 和chronyd。
- Chronyc 是一个命令行界面,用于监控 chronyd 的性能并在必要时进行更改。
- Chronyd 是启动和启用 chrony NTP 服务并在后台运行时监控时间服务器的时间和状态的守护程序。
chronyd 监控的时间 NTP 服务器在 chrony.conf 文件中定义。 Chronyd 系统的主要功能是从主要的 NTP 服务器源之一获取正确的时间。 如果服务器时间不准确,chronyd 会相应地更改系统时钟。
安装和启用 Chrony
可以使用以下命令安装 Chrony(取决于操作系统)。
在 Centos/RHEL 服务器上,可以使用 yum 或 dnf 安装 Chrony。
[root@host ~]# yum install chrony
[root@host ~]# dnf install chrony
在基于 Debian/Ubuntu 的系统上,可以使用 apt 安装 Chrony。
[root@host ~]# apt install chrony
安装 chrony 后,我们需要启动并启用守护程序,以便它在服务器启动时自动启动。 完成此操作的命令如下。
[root@host ~]# systemctl start chronyd
[root@host ~]# systemctl enable chronyd
为了检查守护进程的状态,我们可以使用 systemctl 命令。
[root@host ~]# systemctl status chronyd
顺便说一句,Chrony 本身使用 Fedora NTP 池,而 CentOS 和 RHEL 有自己独特的 NTP 服务器池。
配置文件
Chrony 的配置文件位于 /etc/chrony.conf 文件中,安装的默认文件不需要任何修改即可使 Chrony 作为客户端正常工作。 这是一个典型的 example RedHat chrony.conf 文件
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
pool 2.fedora.pool.ntp.org 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).
# 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
# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC
# Specify directory for log files.
logdir /var/log/chrony
# Select which information is logged.
#log measurements statistics tracking
配置文件中指定的第一个指令是计算机将用于同步的 NTP 服务器池的列表。 在 CentOS 和 RHEL 系统上,默认列表将包含以下服务器:
- 服务器 0.centos.pool.ntp.org iburst
- 服务器 1.centos.pool.ntp.org iburst
- 服务器 2.centos.pool.ntp.org iburst
- 服务器 3.centos.pool.ntp.org iburst
除了服务器列表之外,配置文件还包括一些其他信息,例如 makestep、driftfile、logdir、keyfile 等。
验证时间同步
可以使用以下命令手动与 NTP 服务器同步时间:
[root@host ~]# chronyd -q ‘server {ntp_server_name} iburst’
以上面提到的 NTP 服务器池列表作为 example,与指定的 NTP 服务器同步时间的命令如下所示:
[root@host ~]# chronyd -q 'server 0.centos.pool.ntp.org iburst'
我们还可以通过运行以下命令,在忽略当前正在运行的应用程序和调整的情况下立即步进或重新启动系统时钟:
[root@host ~]# chronyc -a makestep
要验证服务器的时间是否使用 Chrony 同步,我们可以使用命令 chronyc tracking。 该命令的输出将显示如下代码所示的信息。
root@host [~]# chronyc tracking
Reference ID : 32CDF416 (ntp3.doctor.com)
Stratum : 3
Ref time (UTC) : Fri Apr 03 18:51:09 2020
System time : 0.001277962 seconds fast of NTP time
Last offset : +0.001406281 seconds
RMS offset : 0.001406281 seconds
Frequency : 18.132 ppm fast
Residual freq : +0.000 ppm
Skew : 25.616 ppm
Root delay : 0.024071140 seconds
Root dispersion : 0.020099793 seconds
Update interval : 65.6 seconds
Leap status : Normal
root@host [~]#
作为参考,以下是上述值及其含义的细分。
- 参考编号 是该值表示系统时间当前同步到的NTP服务器的名称和ID。
- 地层 指定服务器级别到 NTP 层次结构的跃点数。
- 参考时间 是处理来自参考源的最后一次测量时的每个 UTC 时间。
- 系统时间 表示来自同步服务器的系统时钟的延迟量。
- 最后偏移 是自上次时钟更新以来的估计时间偏移。
- 有效值偏移 表示时间偏移的长期平均值
- 频率 是如果 chronyd 没有更正它,服务器时钟将关闭的值。 该值以 ppm(百万分之一)为单位
- 剩余频率 表示下一级 Stratum 源与当前使用的频率之间的差异测量。
- 偏斜 是以百万分之几为单位测量的频率误差的估计方差
- 根延迟 是与本地服务器同步的更高级别层计算机的网络路径内的总延迟时间。
- 根分散 是计算从跟踪命令报告的根延迟和根色散得出的值的方程式的一部分
- 更新间隔 是前两次时钟更新之间的距离。
- 飞跃状态 是可以具有以下设置之一的值
- 普通的
- 插入第二个
- 删除第二个
- 不同步。
“chronyc tracking”命令中的“系统时间”是 chronyd 对当前真实时间的估计与系统时间之间的差异。 这种差异与根延迟和色散一起为您提供了来自 UTC 的估计最大误差,根据 NTP rfc 信息.
delta 和 epsilon 统计数据从参考时钟在每个层级累积,以产生:
root delay (DELTA) and root dispersion (EPSILON) statistics or abs(System_time) + Root_delay / 2 + Root_dispersion <= target
为了获取有关 chronyd 正在使用的当前时间源的信息,我们可以运行命令 chronyc sources 并将提供 example 我们在下面的代码中看到的输出。
root@host [~]# chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
================================================================
^+ 134.209.141.224 2 6 377 307 +7645us [+7686us] +/- 72ms
^* ntp3.doctor.com 2 7 377 50 +1520us [+1493us] +/- 31ms
^+ anaheim.capsaic.in 2 7 377 114 +293us [+256us] +/- 62ms
^+ mis.wci.com 2 7 377 113 -11ms [-11ms] +/- 77ms
root@host [~]#
NTP 服务器旁边的符号表示以下信息。
- 这些是 chronyd 当前同步到的选定源 (+)
- 这些是与所选来源相结合的可接受来源 (-)
这些是排除的可接受来源
此外,我们可以通过运行命令 chronyc sourcestats 列出有关漂移速度的信息以及 chronyd 使用的每个源的偏移估计。
结论
总体而言,chrony 是我们可以在服务器上实现的出色计时资源。 从上面的信息可以看出,我们可以深入研究网络时间协议(第 4 版)和协议和算法规范的程度,让我们在基于基态超精细的原子钟的毫秒内铯 133 原子的跃迁频率,我们目前的计时结构是在该原子上建立的。
学到更多!
如果您有任何问题,我们的 3 级系统管理员将随时协助您设置此软件。 只需拨打 800.580.4985 联系我们,或打开 聊天
或与我们联系,与我们知识渊博的 Linux 技术人员或经验丰富的托管顾问交谈,了解您今天如何利用这项技术!