Red Hat Training

A Red Hat training course is available for RHEL 8

第 30 章 使用 Chrony 套件配置 NTP

因为许多原因,系统准确计时非常重要。例如在网络中,需要准确的数据包和日志的时间戳。在 Linux 系统中, NTP 协议由在用户空间运行的守护进程实现。

用户空间守护进程更新内核中运行的系统时钟。系统时钟可以通过使用不同的时钟源来维护系统的时间。通常, 使用 时间戳计数器TSC)。TSC 是一个 CPU 寄存器,它计算从上次重置的循环数。它非常快,分辨率很高,且不会被中断。

在 Red Hat Enterprise Linux 8 中, NTP 协议由 chronyd 守护进程实现,它可从 chrony 软件包中的软件仓库中获得。

以下小节介绍了如何使用 chrony 套件配置 NTP。

30.1. chrony 套件介绍

chronyNetwork Time Protocol (NTP) 的一个实现。您可以使用 chrony:

  • 将系统时钟与 NTP 服务器同步
  • 将系统时钟与参考时钟同步,如 GPS 接收器
  • 将系统时钟与手动时间输入同步
  • 作为 NTPv4(RFC 5905) 服务器或 peer 为网络中的其他计算机提供时间服务

在多数条件下,chrony 都会表现良好,包括时断时续的网络连接、有大量网络数据的网络、温度不稳定(普通计算机时钟对温度敏感)以及不持续运行或在虚拟机上运行的系统。

通过互联网镜像同步的两天机器之间的准确性通常在几毫秒之内,而对于 LAN 中的机器则为几十微秒。硬件时间戳或硬件参考时钟可能会提高与子微秒级别同步的两台机器之间的准确性。

chrony 包括 chronyd,一个在用户空间中运行的守护进程,和 chronyc (可用来监控 chronyd 性能并在运行时更改各种操作参数的命令行程序)。

chrony 守护进程 chronyd 可由命令行工具 chronyc 监控和控制。这个工具提供了一个命令提示,允许输入大量命令来查询 chronyd 的当前状态并更改其配置。默认情况下, chronyd 只接受来自本地 chronyc 实例的命令,但它也可以配置为接受来自远程主机的监控命令。应该限制远程访问。

30.2. 使用 chronyc 来控制 chronyd

这部分论述了如何使用 chronyc 命令行实用程序控制 chronyd

流程

  1. 要使用互动模式的命令行实用程序 chronyc 来更改 chronyd 的本地实例,以 root 身份输入以下命令:

    # chronyc

    如果要使用某些受限命令,chronyc 必须以 root 身份运行。

    chronyc 命令提示符如下所示:

    chronyc>
  2. 要列出所有命令,请输入 help
  3. 或者,如果与以下命令一同调用,工具也可以在非互动命令模式下调用:

    chronyc command
注意

使用 chronyc 所做的更改不具有持久性,它们会在 chronyd 重启后丢失。要进行永久更改,请修改 /etc/chrony.conf

30.3. 迁移到 chrony

在 Red Hat Enterprise Linux 7 中,用户可以选择 ntpchrony 来保证准确计时。有关 ntpchrony ntpdchronyd 之间的区别,请参阅 ntpd 和 chronyd 之间的差别

在 Red Hat Enterprise Linux 8 中不再支持 ntp。默认启用chrony。因此,您可能需要从 ntp 迁移到 chrony

在大多数情况下,从 ntp 迁移到 chrony 是非常直接的。程序、配置文件和服务的相应名称为:

表 30.1. 从 ntp 迁移到 chrony 时的程序、配置文件和服务对应的名称

ntp 名称chrony 名称

/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

ntpdatesntp 工具程序(包含在 ntp 发行本中)可使用 -q 选项或 -t 选项替换为 chronyd。可在命令行中指定配置以避免读取 /etc/chrony.conf。例如, chronyd 可以以以下方式启动,而不是运行 ntpdate ntp.example.com:

# chronyd -q 'server ntp.example.com iburst'
2018-05-18T12:37:43Z chronyd version 3.3 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +SECHASH +IPV6 +DEBUG)
2018-05-18T12:37:43Z Initial frequency -2.630 ppm
2018-05-18T12:37:48Z System clock wrong by 0.003159 seconds (step)
2018-05-18T12:37:48Z chronyd exiting

ntpstat 工具程序之前包含在 ntp 软件包中,且只支持 ntpd,它现在支持 ntpdchronyd。它可在 ntpstat 软件包中找到。

30.3.1. 迁移脚本

名为 ntp2chrony.py 的 Python 脚本包括在 chrony 软件包(/usr/share/doc/chrony)文档中。这个脚本会自动将现有的 ntp 配置转换为 chrony。它支持 ntp.conf 文件中最常用的指令和选项。所有在转换中忽略的行都会作为注释包含在生成的 chrony.conf 文件中以供审核。在 ntp 密钥文件中指定但没有在 ntp.conf 中标记为可信密钥的密钥会作为注释出现在生成的 chrony.keys 文件中。

默认情况下,该脚本不会覆盖任何文件。如果 /etc/chrony.conf/etc/chrony.keys 已存在,可以使用 -b 选项重命名该文件作为备份。这个脚本支持其他选项。--help 选项输出所有支持选项。

例如,在 ntp 软件包中提供了默认 ntp.conf 的脚本调用示例:

# python3 /usr/share/doc/chrony/ntp2chrony.py -b -v
Reading /etc/ntp.conf
Reading /etc/ntp/crypto/pw
Reading /etc/ntp/keys
Writing /etc/chrony.conf
Writing /etc/chrony.keys

本例中唯一忽略的指令是 disable monitor,它在 noclientlog 指令中有一个等同的 chrony,但它包含在默认 ntp.conf 中,只用于缓解一个安全工具。

生成的 chrony.conf 文件通常包含大量与 ntp.conf 中限制行对应的 allow 指令。如果您不想将 chronyd 作为 NTP 服务器运行,请从 chrony.conf 中删除所有 allow 指令。