跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / 使用 NTP/NTS 同步时间

使用 NTP/NTS 同步时间

出版日期:2025-03-20
内容

本文介绍什么是时间同步,以及如何配置时间同步。

原因

通过网络与其他团队成员共享任务和资源时,保持系统时间同步至关重要。

工作量

阅读本文并在计算机上执行时间同步基本配置最多需要 60 分钟。

要求
  • 需要具备 Linux 系统管理方面的基本知识。特定任务需要 root 特权。

  • 与内部网络或互联网建立了有效网络连接,以便能够访问源时间服务器。

1 简介

在计算机上保持系统时间准确且同步对于团队协作至关重要。应用程序规划和日程安排依赖于准确且同步的时间来正确跟踪时间,并及时通知用户有关约会的安排。对于群集应用程序,各个主机通常依赖于同步的系统时间来实现相互通讯。

内置硬件时钟并不是可靠的时间源。手动校正系统时间可能会因突然的时间跳跃而导致关键应用程序出现故障。因此,需要通过网络对照外部可靠时间源来同步系统时间。

1.1 什么是 NTP?

网络时间协议 (NTP) 旨在通过网络同步系统时间。它的目标是维护绝对时间,并使用绝对时间来同步网络中所有计算机的系统时间。

1.2 什么是 NTS?

网络时间安全 (NTS) 是 NTP 的安全扩展。NTS 提供了对 NTP 消息进行身份验证和加密的机制,从而确保接收到的时间数据安全且真实。NTS 设计为向后兼容现有的 NTP 基础架构。这样,您便可以进行逐步部署,而无需更改不支持 NTS 的现有 NTP 服务器。

1.3 NTP 的工作原理是怎样的?

正确配置 NTP 服务后,它会不断地向可靠时间服务器查询时间并调整系统时间。通常,连接到互联网的家用计算机和其他设备配置为向互联网上的公共时间服务器发出查询。

向公共时间服务器发出查询的各个设备
图 1︰ 向公共时间服务器发出查询的各个设备

相反,位于企业子网内的台式计算机和服务器则是配置为向本地网络内的专用时间服务器发出查询。时间服务器本身将其时间与公共时间服务器同步。

向内部时间服务器发出查询的多个主机
图 2︰ 向内部时间服务器发出查询的多个主机

1.3.1 实现

chronySUSE Linux Micro 中 NTP 的默认实现。chrony 由两个部分组成:

  • chronyd 是可以在引导时启动的 systemd 服务。

  • chronyc 是一个命令行界面程序,用于监控 chronyd 的性能,并在运行时更改特定的操作参数。

1.4 优势

使用 NTP 维护准确的时间可获得以下好处:

  • 用户可以依赖于自己的时钟来遵循安排的日程。

  • 应用程序可以准确地触发已安排好的桌面或系统操作。

  • 群集节点可以将其数据保持同步和最新状态。

  • 在互联网访问受限的网络中,使用内部时间服务器有助于保持系统时间同步。

  • 该协议通过 NTS 将安全措施集成到 NTP 中,增强了 NTP 的稳健性,并解决了与不安全的时间同步相关的漏洞。

2 通过调整 /etc/chrony.conf 来配置 NTP

chronyd 在启动时,将从 /etc/chrony.conf 文件读取其配置。以下部分列出了可能影响 chronyd 行为的重要参数。

2.1 指定时间源

要让计算机时钟保持同步,您需要告知 chronyd 使用哪些时间源。为此,请使用 serverpoolpeer 指令。可以多次使用其中的每个指令。

server 指令告知 chronyd 按照名称或 IP 地址使用特定的主机作为时间服务器。

server 0.europe.pool.ntp.org offline1
server 1.europe.pool.ntp.org offline prefer2
server 192.168.2.254

1

offline 选项阻止 chronyd 向时间服务器发出查询。如果启动 chronyd 时无法访问该服务器,则此选项非常有用。当时间服务器可访问时,您需要使用 chronyc 将其联机。有关更多详细信息,请参见第 3 节 “管理 chronyd 在运行时的行为”

2

prefer 选项告知 chronyd 优先使用该时间源,而不是不包含此类选项的其他时间源。

pool 指令可让您指定一个网络名称,该名称解析为随时间变化的多个 IP 地址。

pool pool.ntp.org iburst1 maxsources 32

1

iburst 选项表示 chronyd 以 4 到 8 的突发请求数启动,以便更快地完成首次时钟更新。

2

maxsources 选项告知 chronyd 使用池中的最多三个源。

peer 指令指定 NTP 对等主机而不是时间服务器。对等节点之间的系统时间同步使用对称体系结构,而不是 serverpool 选项调用的客户端/服务器模式。您可以多次使用 peer 来指定多个对等节点。

peer 192.168.1.116
peer ntp.example.com

2.2 chronyd 作为 NTP 服务器运行

默认情况下,chronyd 作为指定的 NTP 服务器的客户端运行。要使其同时作为 NTP 服务器运行,请将 allow 指令添加到 /etc/chrony.conf 文件中。该指令会打开 NTP 服务器端口(默认为 123)并响应客户端请求。

您可以指定 NTP 客户端的单个 IP,也可以指定子网以包含多个客户端。您可以多次使用 allow 指令:

allow 1.2.3.4
allow 3.4.5.0/24
提示
提示

如果您不指定 IP 地址或子网,则独立的 allow 指令会允许来自所有 IPv4 和 IPv6 地址的访问请求。

要限制上述 allow 指令的访问权限,请使用 deny 指令:

allow 1.2.3.4
deny 1.2.3.0/24
allow 1.2.0.0/16

在上面的示例中,无论三个指令的顺序如何,效果都是相同的。在此示例中,允许访问 1.2.0.0/16 子网,但拒绝访问 1.2.3.0/24 子网。但是,允许访问主机 1.2.3.4

2.3 配置本地参考时钟

chronyd 依赖使用其他程序(例如 gpsd)通过特定驱动程序来访问计时数据。在 /etc/chrony.conf 中使用 refclock 指令可指定要用作时间源的硬件参考时钟。它有两个必填参数:驱动程序名称和驱动程序特定的参数。这两个参数后面跟着零个或多个 refclock 选项。chronyd 包含以下驱动程序:

PPS

内核 pulse per second API 的驱动程序。例如:

refclock PPS /dev/pps0 lock NMEA refid GPS
SHM

NTP 共享内存驱动程序。例如:

refclock SHM 0 poll 3 refid GPS1
refclock SHM 1:perm=0644 refid GPS2
SOCK

Unix 域套接字驱动程序。例如:

refclock SOCK /var/run/chrony.ttyS0.sock
PHC

PTP 硬件时钟驱动程序。例如:

refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37
refclock PHC /dev/ptp1:nocrossts poll 3 pps
提示
提示

有关各个驱动程序的选项的详细信息,请参见 man 8 chrony.conf

2.4 激活脱机时间源

尽管 chronyd 在引导时没有网络连接的系统上可以正常启动,但它无法访问 /etc/chrony.conf 中指定的时间服务器。要防止 chronyd 尝试向不可访问的时间服务器发出查询,请在时间源指令的旁边使用 offline 选项,例如:

server ntp.example.org offline

这样,chronyd 将不会尝试轮询服务器,除非使用以下命令启用这种轮询:

# chronyc online ntp.example.org
提示
提示

如果设置了 auto_offline 选项而不是 offline 选项,在向时间服务器发送了两个请求,但未接收到任何响应时,chronyd 会假设时间服务器已脱机。如果使用此选项,在网络链接断开时,无需从 chronyc 运行 offline 命令。

3 管理 chronyd 在运行时的行为

3.1 什么是 chronyc

chronycchrony NTP 实现的客户端部分。您可以使用 chronyc 命令来更改 chronyd 服务在运行时的行为。它会生成有关 chronyd 的操作的状态报告。

注意
注意:临时更改

使用 chronyc 进行的更改不是永久性的。在 chronyd 下次重启动后,这些更改将会丢失。要进行永久性更改,请按照第 2 节 “通过调整 /etc/chrony.conf 来配置 NTP”中所述修改 /etc/chrony.conf

3.2 chronyc 的工作原理是怎样的?

您可以在交互模式或非交互模式下运行 chronyc。要以交互方式运行 chronyc,请在命令行中输入 chronyc 并按 Enter。如此会显示提示符并等待您输入命令。例如,要检查有多少个 NTP 源联机或脱机,请运行 activity 命令:

# chronyc
chronyc> activity
200 OK
4 sources online
2 sources offline
1 sources doing burst (return to online)
1 sources doing burst (return to offline)
0 sources with unknown address

要退出 chronyc 的提示符,请输入 quitexit

如果您不需要使用交互提示符,请直接输入命令,例如:

# chronyc activity

4 chronyd systemd 服务

chrony 的主要组成部分是 chronyd systemd 服务,它在后台运行,可将系统时间与选定时间服务器保持同步。您可以使用以下 systemd 命令来操作 chronyd 服务:

systemctl status chronyd.service

列显有关 chronyd 服务当前状态的扩展信息。

systemctl is-enabled chronyd.service

检查是否启用了在系统引导时自动启动 chronyd 服务的设置。

systemctl enabled chronyd.service

启用在系统引导时自动启动 chronyd 服务的设置。

systemctl disable chronyd.service

禁用在系统引导时自动启动 chronyd 服务的设置。

systemctl is-active chronyd.service

检查 chronyd 服务是否已启动并正在运行。

systemctl start chronyd.service

启动 chronyd 服务。

systemctl stop chronyd.service

停止 chronyd 服务。

systemctl restart chronyd.service

重启动 chronyd 服务并重新加载 /etc/chronyd.conf

5 查错

如果出现错误,请检查以下事项。

  • 校验您的计算机是否已连接到网络并且已正确配置该网络:

    > sudo systemctl status network.service
    ● NetworkManager.service - Network Manager
         Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled)
         Active: active (running) since Sat 2021-08-07 20:09:44 CEST; 4 days ago
    [...]
  • 校验您作为时间源输入的时间服务器是否存在,并且可通过网络访问它们。例如:

    > ping pool.ntp.org
    PING pool.ntp.org (85.199.214.101) 56(84) bytes of data.
    64 bytes from 85.199.214.101 (85.199.214.101): icmp_seq=1 ttl=37 time=29.9 ms
    [...]
  • 如果您计算机上的 firewalld 服务处于活动状态,请校验是否允许 NTP 服务。

  • 校验 chronyd 服务是否正在运行:

    > sudo systemctl status chronyd.service
    ● chronyd.service - NTP client/server
         Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: disabled)
         Active: active (running) since Sat 2021-08-07 20:09:44 CEST; 4 days ago
     [...]
  • 如果虚拟化 Guest 上的系统时间与确切时间有偏差,请确保 VM 主机服务器系统时间与有效的时间服务器同步,并且 Guest 与主机使用相同的时间源进行同步。

  • 如果 NTP 服务在系统引导期间无法正常启动,则原因可能是网络交换机配置为使用 Spanning Tree Protocol,但端口未配置为 Edge Ports,而是配置为 Portfast。在这种情况下,最多可能需要等待一分钟才能建立网络连接。

  • 如果在使用 NetworkManager 的情况下,NTP 服务在系统引导期间无法启动,请编辑 /etc/sysconfig/network/config 文件并将 NM_ONLINE_TIMEOUT 值更改为 30。如果问题仍然存在,请将超时值增加 15,然后重试。

  • 如果无法访问 NTP 源,请使用以下命令识别这些源:

    > chronyc sources -v
    [...]
    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    ^* time.mydomain.com             3  10   377    81  -5354us[-8257us] +/-  191ms
    ^? ntp1.example.com              0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? 77.177.77.177                 0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? ntp3.example.com              0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? ntp4.example.net              0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? 2a02:3d8:1::1:1               0   6     0     -     +0ns[   +0ns] +/-    0ns
    ^? ntp2.example.org              0  10     0     -     +0ns[   +0ns] +/-    0ns

    在本例中,只有 time.mydomain.com 服务器在真正提供时间。有必要对无法访问的远程 NTP 时间源的网络连接进行一般性查错。

6 更多信息