这timesyncd.conf(5) 的手册页表示 NTP 的设置是用空格分隔的 NTP 服务器主机名或 IP 地址列表。
我们的网络中有两个内部 NTP 服务器,它们都位于同一子网 (10.10.10 0/24)。在 Ubuntu 18.04 服务器上,如果我将 NTP 设置为 NTP="10.10.10.100 10.10.10.101",timesyncd 将不会与这些时间服务器同步。如果我仅将 NTP 设置为其中一个 (NTP=10.10.10.100 或 NFS=10.10.10.101),时间就会按预期同步。
其他人是否也遇到了同样的情况?或者这是一个应该(或已经)提交的错误?
附录:我尝试使用多行“NTP=”来代替一行。而不是:
NTP="10.10.10.100 10.10.10.101"
我将其改为:
NTP=10.10.10.100
NTP=10.10.10.101
重新启动 systemd-timesyncd 后,状态现在显示与第一个时间服务器同步的时间。
$ systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
└─disable-with-time-daemon.conf
Active: active (running) since Fri 2018-06-22 14:41:36 MDT; 3s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 2774 (systemd-timesyn)
Status: "Synchronized to time server 10.10.10.100:123 (10.10.10.100)."
Tasks: 2 (limit: 2322)
CGroup: /system.slice/systemd-timesyncd.service
└─2774 /lib/systemd/systemd-timesyncd
Jun 22 14:41:36 bpsubuntu18.sling.com systemd[1]: Starting Network Time Synchronization...
Jun 22 14:41:36 bpsubuntu18.sling.com systemd[1]: Started Network Time Synchronization.
Jun 22 14:41:36 bpsubuntu18.sling.com systemd-timesyncd[2774]: Synchronized to time server 10.10.10.100:123 (10.10.10.100).
作为附加测试,我在两个好的时间服务器之前添加了一个虚假的时间服务器行:
NTP=10.10.10.99
NTP=10.10.10.100
NTP=10.10.10.101
再次重启服务后,使用 tcpdump 观察端口 123 流量,我发现在无法从虚假 NTP 服务器获取时间后,timesyncd 使用了下一个服务器。
那么手册页是否不正确?或者无法解析空格分隔的列表是否是一个错误?
我还想为第一次发帖时输入 NFS 而不是 NTP 而道歉。当时我正在做另一项任务,分心了……
答案1
这是 timesyncd 的设计。TL;DR 它一次只能使用一个。
细节:如果你仔细观察timesyncd 手册页您将在有关多个 NTP 服务器的部分中看到这一点:
...直到找到一个能响应的人...
如果你深入挖掘,你会发现以下问题timesyncd:一次只与一个 NTP 服务器对话和systemd-timesyncd 手册应该解释它使用 SNTP,而不是 NTP。
因此,它将从 NTP= 列表中取出第一个有效的,如果所有有效的都失败,则尝试 FallbackNTP= 中的列表。
如果您想要真正的跨服务器检查以实现更好的同步,您应该查看 NTPd (<18.04) / Chrony (>=18.04) 引用的 systemd 问题:
是的,systemd-timesyncd 实现的是 SNTP,而不是 NTP,因此多服务器支持不再是重点。如果您想要完整的 NTP 实现,请使用 ntpd 或 chrony。