我正在chronyc sources
每秒调用一次来监控 chrony 客户端。
此命令报告几个值,包括
轮询 - 显示轮询源的速率,以秒为单位的间隔的以 2 为底的对数。因此,值 6 表示每 64 秒进行一次测量。chronyd 会根据当前情况自动改变轮询速率。
可达性 - 以八进制数形式显示源可达性寄存器。该寄存器有 8 位,每次从源接收或丢失数据包时都会更新。值为 377 表示最近八次传输均收到了有效回复。
LastRx - 此列显示上次从源接收到样本的时间。通常以秒为单位。字母 m、h、d 或 y 表示分钟、小时、天或年。
我使用 chrony 配置将轮询率设置为 4 秒。大多数时候,我观察到 lastRx 列(上次从源接收到样本的时间)从 0 上升到 3,然后随着下一个样本按预期收到而再次下降到 0。例如,这是我根据输出构建的表格的一部分
Timestamp IP address Poll Reach LastRx
==========================================================================
'2023-02-02 10:02:58' '10.0.0.102' 2 377 0
'2023-02-02 10:02:59' '10.0.0.102' 2 377 1
'2023-02-02 10:03:00' '10.0.0.102' 2 377 2
'2023-02-02 10:03:02' '10.0.0.102' 2 377 4
'2023-02-02 10:03:03' '10.0.0.102' 2 377 0
'2023-02-02 10:03:04' '10.0.0.102' 2 377 1
...
但是,有时 LastRx 会开始攀升,并远远超过 4。如果与时间服务器的连接丢失,我预计会发生这种情况。令我困惑的是,在这些期间,到达率值仍然是 377,表明所有数据包都已接收,并且轮询速率仍报告为 4 秒(2^2)。
Timestamp IP address Poll Reach LastRx
==========================================================================
'2023-02-02 09:59:17' '10.0.0.102' 2 377 109
'2023-02-02 09:59:18' '10.0.0.102' 2 377 110
'2023-02-02 09:59:19' '10.0.0.102' 2 377 111
'2023-02-02 09:59:21' '10.0.0.102' 2 377 112
'2023-02-02 09:59:22' '10.0.0.102' 2 377 113
'2023-02-02 09:59:23' '10.0.0.102' 2 377 114
自从 chrony 上次收到数据包以来已经过去了 114 秒,为什么每 4 秒轮询一次新数据包,并且仍然报告已收到每个数据包?发生了什么?
编辑:
以下是我正在使用的配置。
#服务器 10.0.0.102
makestep 1.0 3
driftfile /var/lib/chrony/drift
rtcsync
allow 10.0.0
local stratum 8
manual
logdir /var/log/chrony
#客户端 10.0.0.101
server 10.0.0.102 iburst maxpoll 2 minpoll 1 prefer
maxdistance 1000000000
makestep 1.0 3
driftfile /var/lib/chrony/drift
logdir /var/log/chrony
答案1
对于基本的 Chrony 设置来说,这些配置似乎合理。但是,值得注意的是,您使用的特定值最大轮询,民意调查, 和最大距离设置会影响时间同步的准确性和稳定性,因此您可能需要根据具体要求和网络条件调整这些值。
在您描述的情况下,服务器可能正在发送数据包,但它们在传输过程中丢失或延迟,这可以解释为什么最后收到的数据包时间比轮询间隔晚得多。
Chrony 报告每个数据包都已收到,因为它基于服务器发送的所有数据包都被客户端收到的假设。然而,实际上,由于网络问题或其他因素,数据包可能会丢失或延迟。
要进一步调查该问题,您可以检查chronyc 跟踪命令查看系统时钟是否根据服务器的响应进行调整,并检查客户端和服务器之间的网络连接。