linux下NTP服务器实战(chrony软件)
linux下NTP服务器实战(chrony软件)
记录linux下NTP服务器搭建及相关管理操作,使用chrony软件包安装部署。相比ntp服务,Chrony服务适用于更高精度、更高稳定性、自动化等场景。
1. 安装 chrony
在大多数Linux发行版上,chrony
可以通过包管理器直接安装。
-
CentOS/RHEL:
sudo yum install chrony # CentOS 7 及之前的版本 sudo dnf install chrony # CentOS 8 和 Fedora
-
Ubuntu/Debian:
sudo apt install chrony
chrony 守护进程的默认位置为 /usr/sbin/chronyd
。命令行工具将安装到 /usr/bin/chronyc
。
2. 配置chrony
chrony
的配置文件通常位于/etc/chrony.conf
。要将机器配置为NTP服务器,需进行如下修改:
编辑 /etc/chrony.conf
文件:
sudo vim /etc/chrony.conf
-
允许网络客户端访问:
找到并修改或添加以下配置,允许特定网段或所有网络客户端访问:allow 192.168.0.0/24 # 允许指定网段访问 allow all # 允许所有客户端访问
-
选择上游时间源:
可以设置NTP服务器来同步本地时间。以下是一些常用的NTP服务器:server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst
-
设置NTP服务器为本地时间主机:
如果此NTP服务器在不与外界同步的情况下应保持提供时间服务,可以启用本地时间作为时间源:local stratum 10
这里设置的
stratum
值较高,以避免本地时间被优先用于其他时间服务器。
配置文件示例:
[root@ntp ~]# 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 10.210.10.220 iburst
# 指定了一个 NTP 服务器的地址(10.210.10.220)。iburst 选项使得当客户端第一次与服务器进行通信时,如果无法立即建立连接,客户端会发送一组加速的请求(通常为 4 个包),以加快与时间服务器的同步速度。
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
# driftfile 参数指定了存储系统时钟漂移数据的文件。系统定期测量其内部时钟的漂移(增快或减慢的速率)并记录到该文件中,这可以帮助 chrony 更好地调整系统时钟。
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
# 允许在前 3 次时间更新时,如果系统时钟的偏差超过 1 秒,chrony 可以直接调整系统时钟,而不是渐进调整。这在系统启动后可以快速纠正较大的时间偏差。
# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
# 启用内核的 RTC(实时时钟)同步。当系统时钟与 NTP 服务器同步时,内核会自动同步硬件时钟(通常是 BIOS 中的时钟)与系统时钟,以确保即使系统关机,硬件时钟也能保持准确。
# 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
# 如果启用,将设置系统调整时钟时所需的最少可用时间源数目为 2。这有助于确保同步的时间更为可靠。
# Allow NTP client access from local network.
# allow 192.168.0.0/16 # 允许特定的网络范围(如 192.168.0.0/16)内的客户端访问本地 NTP 服务。
# 默认情况下,远程的 NTP 客户端是无法与该 chrony 服务器进行时间同步的。需要通过 allow 指令明确地允许特定的网络范围或 IP 地址进行时间同步。
allow all # 允许所有客户端同步时间。
# Serve time even if not synchronized to a time source.
#local stratum 10
# 如果启用,即使本机没有与外部时间源同步,也会向网络上的其他设备提供时间服务,并将本地服务器的 stratum 设置为 10(即优先级较低的时间源)。
# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys
# 如果启用,它会指定一个包含 NTP 身份验证密钥的文件。这用于在服务器和客户端之间进行身份验证,确保同步时间的安全性。
# Specify directory for log files.
logdir /var/log/chrony
# logdir 参数指定了 chrony 写日志的目录路径。在这里,日志文件将存储在 /var/log/chrony 目录下。
# Select which information is logged.
#log measurements statistics tracking
# 如果启用,chrony 会记录测量值、统计信息以及时间跟踪等详细日志信息。
3. 启动chrony服务
保存配置文件后,启动并启用chrony
服务:
sudo systemctl start chronyd
sudo systemctl enable chronyd
4. 检查NTP服务状态
确认chrony
正在运行并同步时间:
chronyc tracking
此命令会显示本地系统与NTP服务器的同步状态。
5. 客户端配置
在客户端机器上,确保chrony
或ntpd
安装完成并且配置好指向你的NTP服务器:
编辑客户端的/etc/chrony.conf
或/etc/ntp.conf
,添加你的NTP服务器IP地址:
server <NTP服务器的IP地址> iburst
保存后,重启客户端的chronyd
或ntpd
服务:
sudo systemctl restart chronyd # 或 ntpd
6. 验证同步
在客户端上,可以通过以下命令检查是否与服务器同步:
chronyc sources
这会列出当前的时间源,确保NTP服务器显示为活动时间源。
示例输出:
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- time1.google.com 1 6 377 48 -176us[ -199us] +/- 15ms
^* time2.google.com 1 6 377 47 +245us[ +220us] +/- 13ms
^- time3.google.com 1 6 377 47 -310us[ -332us] +/- 16ms
^+ time4.google.com 1 6 377 48 +129us[ +105us] +/- 14ms
[root@dns ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 10.210.10.45 5 6 37 15 +18us[+1062us] +/- 11ms
字段解释:
-
MS: 这列表示当前时间源的状态标记。
^
表示该时间源是NTP服务器。*
表示当前使用的时间源(同步的主源)。+
表示备用时间源,可能被选为候选同步源。-
表示被排除的时间源,当前不会同步该时间源。=
表示该时间源是peer节点。?
:表示该服务器的状态未知,可能无法到达或正在等待响应。x
:表示该时间源的时间可能有错误,因此不能被信任。~
:表示该时间源的时间变化太大,波动性过高,无法稳定同步。
-
Name/IP address:
这是时间源的主机名或IP地址。它显示的是你系统上配置的时间源。
-
Stratum:
NTP层级值,表示时间源的层次。
stratum
越低,时间源越靠近参考时钟(例如原子钟)。本地时钟通常会被设置为较高的stratum
值(如15),表示优先级较低。 -
Poll:
表示轮询间隔,单位是秒的对数(
2^Poll
)。在这个示例中,值6
表示当前的轮询间隔是2^6 = 64
秒。 -
Reach:
这是一个八位的二进制数值,表示最近的查询是否成功。
377
的十六进制表示是11111111
,表示最近8次查询全部成功。 -
LastRx:
上次接收到NTP服务器响应的时间,单位是秒。
-
Last sample:
该列表示时间偏差(时间源与本地时钟的差异)和误差范围:
+245us[ +220us]
:表示偏差为+245微秒
,括号内表示的是过滤后的估计值+220微秒
。+/- 13ms
:这是该时间源的误差范围。
7. chronyc相关命令
-
chronyc tracking
- chronyc 跟踪,查看本地系统的时间同步状态,包括与时间源的偏差、同步源的
stratum
层级、本地时钟漂移等信息。 - 输出示例:
Reference ID : 203.0.113.1 (ntp.example.com) Stratum : 3 Ref time (UTC) : Tue Aug 29 12:00:00 2024 System time : 0.000000001 seconds fast of NTP time Last offset : -0.000000002 seconds RMS offset : 0.000000003 seconds Frequency : 12.345 ppm slow Residual freq : -0.001 ppm Skew : 0.005 ppm
- chronyc 跟踪,查看本地系统的时间同步状态,包括与时间源的偏差、同步源的
-
chronyc sources
- 显示当前配置的所有时间源的信息,包括其状态、
stratum
层级、延迟、偏差等。 - 输出示例:
MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* ntp.example.com 2 6 377 30 -240us[ -310us] +/- 16ms ^+ ntp2.example.com 2 6 377 31 -124us[ -154us] +/- 12ms
可以指定可选的
-v
参数来打印更详细的信息。在这种情况下,会输出额外的标头行显示字段含义的信息。 - 显示当前配置的所有时间源的信息,包括其状态、
-
chronyc sourcestats
- 显示时间源的统计信息,包括标准偏差、延迟等。
- 输出示例:
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev =============================================================================== ntp.example.com 12 6 198 +0.000 0.005 +12ns 16us
可以使用可选参数
-v
来包括详细信息。在这种情况下,会输出额外的标头行显示字段含义的信息。 -
chronyc ntpdata
- 查看与某个特定时间源的NTP数据,包括该源的
stratum
、延迟、偏差、抖动等详细信息。 - 用法:
chronyc ntpdata ntp.example.com
- 查看与某个特定时间源的NTP数据,包括该源的
-
chronyc sources -v
- 以详细模式显示时间源的信息。
- 输出示例:
210 Number of sources = 2 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* ntp.example.com 2 6 377 30 -240us[ -310us] +/- 16ms ^+ ntp2.example.com 2 6 377 31 -124us[ -154us] +/- 12ms
-
chronyc activity
- 显示当前
chrony
服务的活动状态,如使用的时间源数量、已处理的请求数量等。 - 命令:
chronyc activity
- 显示当前
-
chronyc makestep
- 强制进行时间跳步校正。适用于时间偏差较大(通常大于 1 秒)的情况。
- 命令:
chronyc -a makestep
-
chronyc waitsync
- 等待本地系统与NTP源同步完成,通常用于系统启动时确保时间已同步。
- 命令:
chronyc waitsync
-
chronyc clients
- 显示已连接到此 NTP 服务器的客户端信息。
- 命令:
chronyc clients
-
chronyc serverstats
- 显示当前NTP服务器的统计信息,包括已处理的NTP请求数量、拒绝的请求数量等。
- 命令:
chronyc serverstats
-
chronyc add server <server_ip>
- 动态添加一个新的NTP服务器作为时间源。
- 命令:
chronyc add server ntp.example.com iburst
-
chronyc delete server <server_ip>
- 动态删除一个时间源。
- 命令:
chronyc delete server ntp.example.com
说明:
动态修改不会永久保存,重启 Chrony 后会丢失。要永久更改,请编辑配置文件。
8. ntp服务与chrony服务对比
Chrony服务和NTP服务对比:
时间同步服务 | 使用场景 | 时间同步精度 | 稳定性 | 简介 |
---|---|---|---|---|
Chrony服务 | 适用于高精度、高稳定性、自动化等场景。 | 较高 | 能够更好地适应高延迟和不稳定的网络环境。 | Chrony是一个实现网络时间协议(NTP)的软件包,用于同步计算机的系统时间与世界各地的NTP服务器。Chrony特别适合在变化的网络环境中运行,能够以快速和高效的方式调整系统时间。更多信息,请参见Chrony。 |
NTP服务 | 适用于大多数无需太高精度要求的普通场景。 | 正常 | 仅能适应一定程度的网络不稳定。 | NTP是一种经典的时间同步服务,是NTP协议的一个实现。NTP适用于长期运行的服务器,特别是在网络条件比较稳定的环境下。更多信息,请参见NTP。 |
ntp服务文件和chrony服务文件对比:
ntp name | chrony name |
---|---|
/etc/ntp.conf | /etc/chrony.conf |
/etc/ntp/keys | /etc/chrony.keys |
ntpd | chronyd |
ntpq | chronyc |
ntpd.service | chronyd.service |
ntp-wait.service | chrony-wait.service |
将ntp服务器迁移到chrony服务器:
在chrony包(/usr/share/doc/chrony)的文档中,包含了一个名为ntp2chrony.py的Python脚本。该脚本用于自动将现有的NTP配置转换为chrony配置。详情参考下面链接:
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/configuring-time-synchronization_configuring-basic-system-settings#proc_migrating-to-chrony_using-chrony-to-configure-ntp
9. 相关资料
- Chapter 18. Configuring NTP Using the chrony Suite | Red Hat Product Documentation