跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 管理指南 / 服务 / 使用 NTP 同步时间
适用范围 SUSE Linux Enterprise Server 15 SP6

38 使用 NTP 同步时间

NTP(网络时间协议)机制是用于同步网络上的系统时间的协议。首先,计算机从作为可靠时间源的服务器获得时间。然后将此计算机用作网络中其他计算机的时间源。这样做有双重目的,既可维护绝对时间,又可保持网络中所有计算机系统时间的同步。

维护确切的系统时间在许多情况下都非常重要。内置硬件时钟往往不能满足数据库或群集这样的应用程序的要求。手动更正系统时间可能会导致许多严重问题,例如向后调整时间将使关键应用程序出现故障。在网络中,通常需要同步所有计算机上的系统时间,但是手动调整时间是一种不好的方法。NTP 提供了解决这些问题的机制。NTP 服务通过网络中的可靠时间服务器持续调整系统时间。它还支持对本地参考时钟(如无线电控制的时钟)进行管理。

SUSE Linux Enterprise Server 15 起,采用 chrony 作为 NTP 的默认实施。chrony 包含两个部分:chronyd 守护程序可在系统引导时启动,chronyc 命令行界面程序用于监控 chronyd 的性能,以及在运行时更改操作参数。

SUSE Linux Enterprise Server 15.2 开始,如果不是配置为以守护程序的形式运行,适用于 NTP 客户端配置的 YaST 模块将配置 systemd-timer 而不是 cron 守护程序来执行 chrony

38.1 使用 YaST 配置 NTP 客户端

chrony 软件包中附带的 NTP 守护程序 (chronyd) 预先设置为使用本地计算机硬件时钟作为时间参考。硬件时钟的精确度极大程度上取决于它的时间源。例如,原子时钟或 GPS 接收器是精确的时间源,而通用 RTC 芯片则不是可靠的时间源。YaST 简化了 NTP 客户端的配置。

在 YaST NTP 客户端配置(网络服务 › NTP 配置)窗口中,您可以指定启动 NTP 守护程序的时间、配置源的类型,以及添加自定义的时间服务器。

NTP 配置窗口
图 38.1︰ NTP 配置窗口

38.1.1 NTP 守护程序启动

您可以从下面三个选项中选择启动 NTP 守护程序的时间:

仅手动

选择仅手动可手动启动 chrony 守护程序。

不用守护进程同步

选择不用守护进程同步可定期设置系统时间,而不用永久运行 chrony。您可以设置同步间隔(以分钟计)

立即和在引导时

选择立即和在引导时可在系统引导时自动启动 chronyd。建议使用此设置。

38.1.2 配置源的类型

配置源下拉框中,选择动态静态。如果服务器只使用固定的一组(公共)NTP 服务器,请设置静态;如果您的内部网络通过 DHCP 提供 NTP 服务器,则使用动态更合适。

38.1.3 配置时间服务器

供客户端查询的时间服务器列在 NTP 配置窗口的下半部分。使用添加编辑删除可按需修改此列表。

单击添加可添加新的时间服务器:

添加时间服务器
图 38.2︰ 添加时间服务器
  1. 地址字段中,键入要与计算机时间同步的时间服务器或时间服务器池的 URL。填写好 URL 后,单击测试以校验该 URL 是否指向有效的时间源。

  2. 激活快速初始同步,以便在 chronyd 守护程序启动时通过发送更多请求来加速时间同步。

  3. 激活离线启动,以使会自动启动 chronyd 守护程序且引导时可能未连接到互联网的系统加快引导速度。例如,对于由 NetworkManager 管理网络连接的笔记本电脑,此选项非常实用。

  4. 单击确定进行确认。

38.2 手动配置网络中的 NTP

chrony/etc/chrony.conf 文件读取其配置。要让计算机时钟保持同步,您需要告诉 chrony 使用什么时间服务器。您可以使用特定的服务器名称或 IP 地址,例如:

0.suse.pool.ntp.org
1.suse.pool.ntp.org
2.suse.pool.ntp.org
3.suse.pool.ntp.org

还可以指定名称。池名称会解析为若干个 IP 地址:

pool pool.ntp.org
提示
提示:同一网络中的多台计算机

要同步同一网络中多台计算机的时间,建议不要通过一台外部服务器来同步所有这些计算机。比较好的做法是将其中一台计算机作为时间服务器(它与外部时间服务器同步),其他计算机作为它的客户端。将 local 指令添加至服务器的 /etc/chrony.conf,以将其与权威时间服务器区分开:

local stratum 10

要启动 chrony,请运行:

systemctl start chronyd.service

初始化 chronyd 后,系统需要花费一些时间来稳定时间,以及创建用于纠正本地计算机时钟的偏移文件。利用偏移文件,当计算机启动时,可以计算出硬件时钟的系统误差。可以立即使用更正功能,使系统时间保持较高的稳定性。

要启用 chrony 以便该服务在引导时自动启动,请运行:

systemctl enable chronyd.service
警告
警告:冲突的 yast-timesync.service 服务

除了 chronyd.service 服务外,SLES 中还包含 yast-timesync.service。计时器每 5 分钟会触发一次 yast-timesync.service,该服务即会运行 chronyd(使用 -q 选项)来设置系统时间,之后会退出。由于同一时间只能运行 chronyd 的一个实例,因此请勿同时启用或启动两个 chronyd 相关的服务。

38.3 在运行时使用 chronyc 配置 chronyd

在运行时,您可以使用 chronyc 来更改 chronyd 的行为。它会生成有关 chronyd 的操作的状态报告。

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

# 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
注意
注意:临时更改

使用 chronyc 进行的更改不是永久性的。当 chronyd 下次重启动时,它们将会丢失。要进行永久更改,请修改 /etc/chrony.conf

有关 chronyc 命令的完整列表,请参见其手册页 (man 1 chronyc)。

38.4 运行时的动态时间同步

尽管 chronyd 通常在引导时没有网络连接的系统上启动,但该工具无法解析配置文件中指定的时间服务器的 DNS 名称。

chronyd 会按递增的时间间隔不断尝试解析由 serverpoolpeer 指令指定的时间服务器名称,直到成功为止。

如果启动 chronyd 时将无法访问时间服务器,您可以指定 offline 选项:

server server_address offline

如此,chronyd 将不会尝试轮询服务器,除非使用以下命令启用它:

# chronyc online server_address

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

38.5 设置本地参考时钟

软件包 chrony 依赖于其他程序(例如 gpsd)来通过 SHM 或 SOCK 驱动程序访问计时数据。在 /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

38.6 与外部时间参考 (ETR) 的时钟同步

支持与外部时间参考 (ETR) 时钟同步。外部时间参照每 2**20(2 的 20 次幂)微秒发出一次振荡器信号和同步信号,以将连接的所有服务器的 TOD 时钟保持同步。

两个 ETR 计算机可以连接到一台计算机。如果时钟偏差超过同步检查容差,将会对所有 CPU 执行一次计算机检查,这表示时钟未同步。如果发生这种情况,在该时钟再次同步前,所有与支持 XRC 的设备进行的 DASD I/O 都将停止。

可通过两个 sysfs 属性激活 ETR 支持;请以 root 身份运行以下命令:

echo 1 > /sys/devices/system/etr/etr0/online
echo 1 > /sys/devices/system/etr/etr1/online