巨大的时间差异上的 Chrony 时间同步

巨大的时间差异上的 Chrony 时间同步

你好,目前我有一个本地 ntp 服务器(chrony)和一个 ntp 客户端(chrony),它们都在运行,但是当我尝试将 ntp 服务器时间更改为比当前时间减去 6 年时,ntp 客户端无法与其同步,它只会在 syslog 上显示:

1 月 9 日 17:29:11 localhost chronyd[9192]: 系统时钟错误 6780812.328260 秒,已开始调整

ntp 客户端 (chrony) /etc/chrony.conf 采用默认配置,但服务器指向我的本地 NTP 服务器 (chrony)。以下是我的配置

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server local.ntp.server iburst

# Ignore stratum in source selection.
stratumweight 0

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Enable kernel RTC synchronization.
rtcsync

# In first three updates step the system clock instead of slew
# if the adjustment is larger than 10 seconds.
makestep 10 3

# Allow NTP client access from local network.
#allow 192.168/16

# Listen for commands only on localhost.
bindcmdaddress 127.0.0.1
bindcmdaddress ::1

# Serve time even if not synchronized to any NTP server.
#local stratum 10

keyfile /etc/chrony.keys

# Specify the key used as password for chronyc.
commandkey 1

# Generate command key if missing.
generatecommandkey

# Disable logging of client accesses.
noclientlog

# Send a message to syslog if a clock adjustment is larger than 0.5 seconds.
logchange 0.5

logdir /var/log/chrony
#log measurements statistics tracking

我不知道它不会同步,我读到过同步需要更长的时间,但我让机器闲置了 1 天,ntp 客户端仍然没有与 ntp 服务器相同的时间(未同步)。有什么想法吗?我尝试不重新启动 chronyd 服务,只是让它自动同步时间

请注意,我的 /etc/hosts 上定义了“local.ntp.server”。此外,NTP 服务器和 NTP 客户端未使用 ntpd 服务,而是使用 chronyd。这种设置是孤立的

答案1

你的问题似乎是你试图完成一个六年通过扭曲时钟来改变时间,然后放弃一天

如果偏差算法使时钟漂移多达百分之一(这是相当大的),则需要六百年让时钟偏差这么多。即使时钟完全静止,需要经过六年才能将其倒退六年。在不到六年的时间里实现六年时间倒退的唯一方法是运行时钟向后,我认为没有什么能对此做出很好的反应。在一天内完成这件事意味着时钟以略高于实际速度的两千倍的速度倒转!

我的感觉是,运行撒谎的 NTP 服务器是一个非常糟糕的主意,但如果你坚持这样做,并且你突然将服务器的时间偏差很大,那么你需要强制更改客户端时钟,否则它们将无法同步。最简单的方法是确保客户端在启动时从服务器强制重置时钟(使用ntpd,这是在启动时用 完成的ntpdate;我不知道 chrony 是什么),然后重新启动客户端。

答案2

如果你的时间相差甚远(几天甚至几个月),时间同步将不起作用(“这将需要很长时间“)因为 NTP 客户端喜欢Chrony 通过减慢或加快来逐渐调整时钟

将此行附加到您的 Chrony 配置(例如,/etc/chrony.conf/etc/chrony/chrony.conf):

makestep 1 -1

然后重新启动 Chrony。

# systemctl restart chronyd
# or
# /etc/init.d/chrony restart

解释:

makestep 指令可用于允许 chronyd 步进时钟。例如,如果 chrony.conf 有

迈出一步 1 3

如果时钟偏移量大于一秒,则时钟将在前三次更新中逐步调整。通常,建议仅在前几次更新中允许逐步调整,但在某些情况下(例如,没有 RTC 的计算机或虚拟机可能会以错误的时间挂起并恢复),可能需要在任何时钟更新中允许逐步调整。上面的示例将更改为

使步骤 1 -1

https://chrony.tuxfamily.org/faq.html#_is_code_chronyd_code_allowed_to_step_the_system_clock

答案3

如果时差很大chrony很大不接受你的来源。我的时钟是几年前的,并且chronyc tracking正在报告:

> chronyc tracking
Ref time (UTC) : Thu Jan 01 00:00:00 1970

对我有用的是添加maxdistance 1000000000然后/etc/chrony.confchronyd重新启动后)执行chrnoyc -a makestep 1000 -1

相关内容