我正在研究一些设备,希望它们在网络连接中断时进行自我同步(即使用 chrony 的漂移率计算来补偿系统时钟漂移),然后在远程连接可用时正常同步。
不幸的是,chronyd 无法绑定到 NTP 监听端口,并主动尝试将数据包发送到 NTP 伪服务器地址,我无法确定这是否是预期的行为。
chrony.conf
建议的自同步标准设置为:
server 127.127.1.0 # Self-synchronise
allow 127.0.0.0/8 # NTP server for the local system, not just a client
local stratum 10 # Serve low quality time even when the remote link is down
但是,当我chrony sources
使用该配置运行时,它声称尚未与伪时间服务器同步localhost
:
chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? 127.127.1.0 0 7 0 - +0ns[ +0ns] +/- 0ns
尽管chrony tracking
似乎表明它正在按预期工作:
$ chronyc tracking
Reference ID : 7F7F0101 ()
Stratum : 10
Ref time (UTC) : Mon Jun 04 08:27:11 2018
System time : 0.000000007 seconds fast of NTP time
Last offset : +3.297439098 seconds
RMS offset : 3.297439098 seconds
Frequency : 466.833 ppm slow
Residual freq : +0.000 ppm
Skew : 0.000 ppm
Root delay : 0.000000000 seconds
Root dispersion : 0.000000000 seconds
Update interval : 0.0 seconds
Leap status : Normal
无论我如何调整allow
配置文件中的设置,我不能显示chronyd
为实际上正在监听机器的任何接口上的 UDP 端口,而如果我成功将其设置为时间服务器,123
我希望看到这一点。netstat -ulnp
更奇怪的是,如果我chronyd
在下运行strace -f
,我会看到它试图真正地向发送消息127.127.1.0
,即使它应该知道那是用于本地时间同步的伪地址。
就目前情况而言,我几乎没有信心chrony
在远程连接中断时真正补偿时钟漂移,因为很难引发这样一种情况,即它实际上做需要自动校正时钟漂移。
所以我的实际问题是:有人知道如何判断 chrony 是否正确设置为离线时自同步吗?或者我是否只需要按照当前配置进行部署,然后等待并观察当设备与其后端管理服务器断开连接时我们是否遇到时钟漂移的问题?
答案1
您可能需要考虑以下信息
https://chrony.tuxfamily.org/doc/3.3/chrony.conf.html
根据其所述隔离网络。
有多种选项可帮助配置伪时间。特别是以下这段话可能对您来说很有趣:
如果没有合适的计算机可以指定为主服务器,或者需要即使在主服务器发生故障时也能保持客户端同步,则 local 指令的 orphan 选项会启用一种特殊模式,其中会自动从多台计算机中选择主服务器。它们都需要使用相同的本地配置并相互轮询。具有最小参考 ID(基于其 IP 地址)的服务器将担任主服务器的角色,其他服务器将与其同步。当主服务器发生故障时,具有第二小参考 ID 的服务器将接管,依此类推。
但据我从文档中理解,需要多台服务器。
关于你的服务器出现同步也许这种情况可能适用于你: https://chrony.tuxfamily.org/faq.html#_computer_is_not_synchronising
检查
Reach
chronycsources
命令打印的值。如果为零,则表示 chronyd 没有从您尝试使用的 NTP 服务器获得任何有效响应。
本手册还解释了该local
指令
本地[选项]…
本地指令启用本地参考模式,这允许 chronyd 作为 NTP 服务器运行,以显示与实时同步(从轮询它的客户端的角度来看),即使它从未同步过或时钟的最后一次更新发生在很久以前。
因此,尽管事实并非如此,但它可能会给出一个同步时间
答案2
我设法找到了问题所在:port 0
我一开始使用的现有配置文件中有一行多余的代码,因此该allow
行无法正确设置本地时间服务器。删除该行后,一切便开始按我预期的方式运行。
这意味着我最初的问题的答案是“做你所做的事情”:
- 检查是否
sudo netstat -ulnp
正在chronyd
监听 NTP 端口 (UDP 123) - 检查是否
sudo chronyc sources
显示127.127.1.0
为可用源
事实上,这些检查对我来说失败了,这准确反映了设置port 0
不正确。