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 守护程序的时间、配置源的类型,以及添加自定义的时间服务器。
38.1.1 NTP 守护程序启动 #
您可以从下面三个选项中选择启动 NTP 守护程序的时间:
选择可手动启动
chrony守护程序。选择可定期设置系统时间,而不用永久运行
chrony。您可以设置。选择可在引导系统时自动启动
chronyd。建议使用此设置。
38.1.2 配置源的类型 #
在下拉框中,选择或。如果服务器只使用固定的一组(公共)NTP 服务器,请设置;如果您的内部网络通过 DHCP 提供 NTP 服务器,则使用更合适。
38.1.3 配置时间服务器 #
供客户端查询的时间服务器列在 窗口的下半部分。使用、和可按需修改此列表。
单击可添加新的时间服务器:
在字段中,键入要与计算机时间同步的时间服务器或时间服务器池的 URL。填写好 URL 后,单击以校验该 URL 是否指向有效的时间源。
激活,以便在
chronyd守护程序启动时通过发送更多请求来加速时间同步。激活,以使自动启动
chronyd守护程序且引导时可能没有互联网连接的系统加快引导速度。例如,对于由 NetworkManager 管理网络连接的笔记本电脑,此选项非常实用。单击进行确认。
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。yast-timesync.service 由计时器每 5 分钟触发一次,该服务会运行 chronyd(使用 -q 选项)来设置系统时间,之后会退出。由于同一时间只能运行 chronyd 的一个实例,因此请勿同时启用或启动两个 chronyd 相关的服务。
38.3 在运行时使用 chronyc 配置 chronyd #
在运行时,您可以使用 chronyc 来更改 chronyd 的行为。它会生成有关 chronyd 的操作的状态报告。
您可以采用交互模式或非交互模式运行 chronyc。要以交互模式运行 chronyc,请在命令行上输入 chronyc。如此会显示提示符并等待您输入命令。例如,要检查有多少个 NTP 源联机或脱机,请运行:
#chronycchronyc> 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 的提示符,请输入 quit 或 exit。
如果您不需要使用交互提示符,请直接输入命令:
#chronycactivity
使用 chronyc 进行的更改不是永久性的。当 chronyd 下次重启动时,它们将会丢失。要进行永久更改,请修改 /etc/chrony.conf。
有关 chronyc 命令的完整列表,请参见它的手册页 (man
1 chronyc)。
38.4 运行时的动态时间同步 #
尽管 chronyd 通常在引导时没有网络连接的系统上启动,但该工具无法解析配置文件中指定的时间服务器的 DNS 名称。
chronyd 会按递增的时间间隔不断尝试解析由 server、pool 和 peer 指令指定的时间服务器名称,直到成功为止。
如果启动 chronyd 时将无法访问时间服务器,您可以指定 offline 选项:
server server_address offline
如此,chronyd 将不会尝试轮询服务器,除非使用以下命令启用它:
# chronyc online server_address
如果设置了 auto_offline 选项,在向时间服务器发送了两个请求,但未接收到任何响应时,chronyd 会假设时间服务器已脱机。此选项使 chronyc 在网络链路断开时,无需运行“脱机”命令。
38.5 设置本地参考时钟 #
软件包 chrony 依赖于其他程序(例如 gpsd)来通过 SHM 或 SOCK 驱动程序访问计时数据。在 /etc/chrony.conf 中使用 refclock 指令可指定要用作时间源的硬件参考时钟。它有两个必填参数:驱动程序名称和驱动程序特定的参数。这两个参数后面跟着零个或多个 refclock 选项。chronyd 包含以下驱动程序:
PPS:内核
pulse per secondAPI 的驱动程序。例如: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

