13.2. 使用 Chrony
以下章节介绍了如何安装、启动和停止 chronyd
,以及如何检查 chrony
是否同步。这些章节还介绍了如何手动调整系统时钟。
13.2.1. 管理 chrony
以下流程描述了如何安装、启动、停止和检查 chronyd
的状态。
流程
chrony 在 Red Hat Enterprise Linux 被默认安装。以
root
用户运行以下命令进行验证:# dnf install chrony
chrony 守护进程的默认位置为
/usr/sbin/chronyd
。命令行工具将安装到/usr/bin/chronyc
。运行以下命令检查
chronyd
的状态:$ systemctl status chronyd chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled) Active: active (running) since Wed 2013-06-12 22:23:16 CEST; 11h ago
要启动
chronyd
,使用root
用户身份运行以下命令:# systemctl start chronyd
要确保
chronyd
在系统启动时自动启动,以root
身份运行以下命令:# systemctl enable chronyd
要停止
chronyd
,以root
身份运行以下命令:# systemctl stop chronyd
要防止
chronyd
在系统启动时自动启动,以root
身份运行以下命令:# systemctl disable chronyd
13.2.2. 检查是否同步 chrony
以下流程描述了如何检查 chrony 是否与 tracking
、sources
和 sourcestats
命令的使用同步。
流程
运行以下命令检查 chrony 跟踪:
$ chronyc tracking Reference ID : CB00710F (ntp-server.example.net) Stratum : 3 Ref time (UTC) : Fri Jan 27 09:49:17 2017 System time : 0.000006523 seconds slow of NTP time Last offset : -0.000006747 seconds RMS offset : 0.000035822 seconds Frequency : 3.225 ppm slow Residual freq : 0.000 ppm Skew : 0.129 ppm Root delay : 0.013639022 seconds Root dispersion : 0.001100737 seconds Update interval : 64.2 seconds Leap status : Normal
sources 命令显示
chronyd
正在访问的当前时间源的信息。要检查 chrony 源,请运行以下命令:$ chronyc sources 210 Number of sources = 3 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== #* GPS0 0 4 377 11 -479ns[ -621ns] /- 134ns ^? a.b.c 2 6 377 23 -923us[ -924us] +/- 43ms ^ d.e.f 1 6 377 21 -2629us[-2619us] +/- 86ms
您可以指定可选的
-v
参数来打印更详细的信息。在这种情况下,会输出额外的标头行显示字段含义的信息。sourcestats
命令显示目前被chronyd
检查的每个源的偏移率和误差估算过程的信息。要检查 chrony 源的统计信息,请运行以下命令:$ chronyc sourcestats 210 Number of sources = 1 Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev =============================================================================== abc.def.ghi 11 5 46m -0.001 0.045 1us 25us
可以使用可选参数
-v
来包括详细信息。在这种情况下,会输出额外的标头行显示字段含义的信息。
其他资源
-
chronyc(1)
手册页
13.2.3. 手动调整系统时钟
下面的流程描述了如何手动调整系统时钟。
流程
要立即调整系统时钟,绕过单机进行的任何调整,以
root
身份运行以下命令:# chronyc makestep
如果使用了 rtcfile
指令,则不应该手动调整实时时钟。随机调整会影响 chrony 测量实时时钟漂移速率的需要。
13.2.4. 禁用 chrony 分配程序脚本
chrony
分配程序脚本管理 NTP 服务器的在线和离线状态。作为系统管理员,您可以禁用分配程序脚本,以使 chronyd
持续轮询服务器。
如果在系统上启用了 NetworkManager 来管理网络配置,NetworkManager 会在接口重新配置过程中执行 chrony
分配程序脚本,停止或启动操作。但是,如果您在 NetworkManager 之外配置某些接口或路由,则您可能会遇到以下情况:
- 当没有到 NTP 服务器的路由时,分配程序脚本可能会运行,导致 NTP 服务器切换到离线状态。
- 如果您稍后建立路由,脚本默认不会再次运行,NTP 服务器保持在离线状态。
要确保 chronyd
可以与您的 NTP 服务器同步(其有单独的受管接口),请禁用分配程序脚本。
先决条件
- 您在系统上安装了 NetworkManager 并启用了它。
- 根访问权限
流程
要禁用
chrony
分配程序脚本,请创建一个到/dev/null
的符号链接:# ln -s /dev/null /etc/NetworkManager/dispatcher.d/20-chrony-onoffline
注意在此更改后,NetworkManager 无法执行分配程序脚本,NTP 服务器始终保持在线状态。
13.2.5. 在隔离的网络中为系统设定 chrony
对于从未连接到互联网的网络,可以将一台计算机选为主计时服务器。其他计算机要么是服务器的直接客户端,要么是客户端的客户端。在服务器上,必须使用系统时钟的平均偏移率手动设置 drift 文件。如果服务器重启了,它将从周围的系统获取时间,并计算一个平均值来设置系统时钟。之后它会恢复基于 drift 文件的调整。当使用 settime 命令时会自动更新 drift
文件。
以下流程描述了如何为隔离网络中的系统设置 chrony。
流程
在被选择为服务器的系统上,以
root
用户身份运行一个文本编辑器,编辑/etc/chrony.conf
,如下所示:driftfile /var/lib/chrony/drift commandkey 1 keyfile /etc/chrony.keys initstepslew 10 client1 client3 client6 local stratum 8 manual allow 192.0.2.0/24
其中
192.0.2.0/24
是允许连接客户端的网络或子网地址。详情请查看chrony.conf(7)
手册页在被选择为服务器客户端的系统上,以
root
用户身份运行一个文本编辑器,编辑/etc/chrony.conf
,如下所示:server ntp1.example.net driftfile /var/lib/chrony/drift logdir /var/log/chrony log measurements statistics tracking keyfile /etc/chrony.keys commandkey 24 local stratum 10 initstepslew 20 ntp1.example.net allow 192.0.2.123
其中
192.0.2.123
是服务器的地址,ntp1.example.net
是服务器的主机名。具有此配置的客户端重启后,其将与服务器重新同步。
在不是服务器直接客户端的客户端系统上,/etc/chrony.conf
文件应该是一样的,除了应该省略 local
和 allow
指令外。
在隔离的网络中,您还可以使用 local
指令来启用本地参考模式。该模式可允许 chronyd
作为 NTP
服务器实时显示同步,即使它从未同步或者最后一次更新时钟早前发生。
要允许网络中的多个服务器使用相同的本地配置并相互同步,而不让客户端轮询多个服务器,请使用 local
指令的 orphan
选项启用孤立模式。每一个服务器都需要配置为使用 local
轮询所有其他服务器。这样可确保只有最小参考 ID 的服务器具有本地参考活跃状态,其他服务器与之同步。当服务器出现故障时,另一台服务器将接管。
13.2.6. 配置远程监控访问
chronyc 可以通过两种方式访问 chronyd
:
- 互联网协议、IPv4 或者 IPv6。
-
UNIX 域套接字,由
root
用户或chrony
用户从本地进行访问。
默认情况下,chronyc 连接到 Unix 域套接字。默认路径为 /var/run/chrony/chronyd.sock
。如果这个连接失败,比如,当 chronyc 在非 root 用户下运行时会发生,chronyc 会尝试连接到 127.0.0.1,然后 ::1。
网络中只允许以下监控命令,它们不会影响 chronyd
的行为:
- activity
- manual list
- rtcdata
- smoothing
- sources
- sourcestats
- tracking
- waitsync
chronyd
接受这些命令的主机集合可以使用 chronyd
配置文件中的 cmdallow
指令,或者在 chronyc 中使用 cmdallow
命令配置。默认情况下,仅接受来自 localhost(127.0.0.1 或 ::1)的命令。
所有其他命令只能通过 Unix 域套接字进行。当通过网络发送时,chronyd
会返回 Notauthorized
错误,即使它来自 localhost。
以下流程描述了如何使用 chronyc 远程访问 chronyd。
流程
在
/etc/chrony.conf
文件中添加以下内容来允许 IPv4 和 IPv6 地址的访问:bindcmdaddress 0.0.0.0
或者
bindcmdaddress ::
使用
cmdallow
指令允许来自远程 IP 地址、网络或者子网的命令。在
/etc/chrony.conf
文件中添加以下内容:cmdallow 192.168.1.0/24
在防火墙中打开端口 323 以从远程系统连接:
# firewall-cmd --zone=public --add-port=323/udp
另外,您可以使用
--permanent
选项永久打开端口 323:# firewall-cmd --permanent --zone=public --add-port=323/udp
如果您永久打开了端口 323,请重新载入防火墙配置:
# firewall-cmd --reload
其他资源
-
chrony.conf(5)
手册页
13.2.7. 使用 RHEL 系统角色管理时间同步
您可以使用 timesync
角色在多个目标机器上管理时间同步。timesync
角色安装并配置 NTP 或 PTP 实现,作为 NTP 或 PTP 客户端进行操作来同步系统时钟。
timesync 角色
替换了受管主机上给定或检测到的供应商服务的配置。之前的设置即使没有在角色变量中指定,也会丢失。如果没有定义 timesync_ntp_provider
变量,唯一保留的设置就是供应商选择。
以下示例演示了如何在只有一个服务器池的情况下应用 timesync
角色。
例 13.1. 为单一服务器池应用 timesync 角色的 playbook 示例
--- - hosts: timesync-test vars: timesync_ntp_servers: - hostname: 2.rhel.pool.ntp.org pool: yes iburst: yes roles: - rhel-system-roles.timesync
有关 timesync
角色变量的详细参考,请安装 rhel-system-roles
软件包,并参阅 /usr/share/doc/rhel-system-roles/timesync
目录中的 README.md
或 README.html
文件。
13.2.8. 其他资源
-
chronyc(1)
手册页 -
chronyd(8)
手册页 - 常见问题解答