NTP/Chrony 无法在 CentOS 7.9(在 VMware ESXi 上运行的 VM)上保持时间同步

NTP/Chrony 无法在 CentOS 7.9(在 VMware ESXi 上运行的 VM)上保持时间同步

我在数据中心 (VMware ESXi) 中有 3 台服务器运行 CentOS 7.9.2009。这些服务器报告时间未同步。我在内部 VMware ESXi 服务器上运行了一个类似的测试环境,服务器同步了时间。Ok。生产环境最初以完全相同的方式设置 - 但显然会随着时间的推移使用软件包更新进行更新。因此它们“应该”是相同的 - 但我不再能保证这一点。ESXi 服务器都是版本 6。

服务器最初是使用“ntpd”配置的 - 但在过去几天解决这个问题时,我发现“Chrony”似乎是 CentOS 7 上的更好选择。因此,我重新配置了服务器以使用 Chrony - 但问题仍然存在。

编辑:用于更改为 Chrony 的步骤

  • yum 安装 chrony
  • systemctl 停止 ntpd
  • systemctl 禁用 ntpd
  • systemctl 启动 chronyd
  • systemctl 启用 chronyd

因此当我使用时,timedatectl我得到这个输出:

      Local time: Mon 2021-08-02 09:14:43 CEST
  Universal time: Mon 2021-08-02 07:14:43 UTC
        RTC time: Mon 2021-08-02 07:16:34
       Time zone: Europe/Copenhagen (CEST, +0200)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2021-03-28 01:59:59 CET
                  Sun 2021-03-28 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2021-10-31 02:59:59 CEST
                  Sun 2021-10-31 02:00:00 CET

如果我重新启动 Chrony,systemctl restart chronyd则几秒钟后timedatectl会报告:

      Local time: Mon 2021-08-02 09:26:06 CEST
  Universal time: Mon 2021-08-02 07:26:06 UTC
        RTC time: Mon 2021-08-02 07:26:08
       Time zone: Europe/Copenhagen (CEST, +0200)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2021-03-28 01:59:59 CET
                  Sun 2021-03-28 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2021-10-31 02:59:59 CEST
                  Sun 2021-10-31 02:00:00 CET

过了一段时间(几分钟)它就恢复了NTP synchronized: no

当我跑步时ntpstat我得到:

synchronised to NTP server (217.198.219.102) at stratum 2
   time correct to within 124123 ms
   polling server every 64 s

或者

unsynchronised
poll interval unknown

在最后一种情况下,一段时间后它将再次显示第一个输出。但是“在...毫秒内”似乎相当高???

由于我可以通过重新启动 Chrony 来同步它,因此我猜防火墙/网络没有问题。我使用默认的 Chrony 配置(就像我之前对 ntpd 所做的那样)。

VMwaretools 服务已安装并启动(open-vm-tools,http://github.com/vmware/open-vm-tools)。

我将非常感激任何关于进一步排除故障的建议 - 并最终修复它;-)

提前致谢!

/约翰

答案1

我认为我现在已经解决了。

基本上,chrony 认为时间变化太大。因此,我通过 Peter Rosenberg 的链接(以及它所链接的资源)找到了答案……

我把这个信息放在这里以防别人搜索到它。

该过程的第一步是获取来自 chronyd 服务的状态:

systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-08-02 22:23:39 CEST; 10h ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
  Process: 24758 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 24754 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 24756 (chronyd)
   CGroup: /system.slice/chronyd.service
           └─24756 /usr/sbin/chronyd

Aug 03 08:41:24 db1.aqua.dtu.dk chronyd[24756]: Selected source 162.159.200.1
Aug 03 08:41:24 db1.aqua.dtu.dk chronyd[24756]: System clock wrong by 5.118732 seconds, adjustment started
Aug 03 08:41:26 db1.aqua.dtu.dk chronyd[24756]: Can't synchronise: no majority
Aug 03 08:41:33 db1.aqua.dtu.dk chronyd[24756]: Selected source 162.159.200.123
Aug 03 08:41:33 db1.aqua.dtu.dk chronyd[24756]: System clock wrong by 1.761045 seconds, adjustment started
Aug 03 08:42:29 db1.aqua.dtu.dk chronyd[24756]: Can't synchronise: no majority
Aug 03 08:42:30 db1.aqua.dtu.dk chronyd[24756]: Selected source 192.36.143.130
Aug 03 08:42:30 db1.aqua.dtu.dk chronyd[24756]: System clock wrong by 4.500188 seconds, adjustment started
Aug 03 08:43:34 db1.aqua.dtu.dk chronyd[24756]: System clock wrong by 4.842190 seconds, adjustment started
Aug 03 08:44:39 db1.aqua.dtu.dk chronyd[24756]: Can't synchronise: no selectable sources

这显然表明有些地方出了问题。因此,下一步是:

chronyc sources -v
210 Number of sources = 4

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^~ time.cloudflare.com           3   6   377     1   -17.0s[ -17.0s] +/- 1318us
^~ Time100.Stupi.SE              1   6   377     2   -16.9s[ -16.9s] +/- 4458us
^~ time.cloudflare.com           3   6   377    53   -11.2s[ -11.2s] +/- 1306us
^~ n1.taur.dk                    1   6   377    60   -10.4s[ -10.4s] +/- 4964us

注意time too variable所有服务器....

并且chronyc tracking还显示时间根本没有对齐:

Reference ID    : C0248F82 (Time100.Stupi.SE)
Stratum         : 2
Ref time (UTC)  : Tue Aug 03 06:46:05 2021
System time     : 132.970306396 seconds slow of NTP time
Last offset     : -4.842189789 seconds
RMS offset      : 7.720179081 seconds
Frequency       : 63.104 ppm slow
Residual freq   : -81143.852 ppm
Skew            : 90.130 ppm
Root delay      : 0.008654756 seconds
Root dispersion : 19.424978256 seconds
Update interval : 58.2 seconds
Leap status     : Normal

在阅读了文章中提到的参考资料后,我尝试调整文件makestep中的内容/etc/chrony.conf以强制更新。我已经将 NTP 池服务器更改为“更靠近”应用程序服务器,因此配置文件现在如下所示:

server 0.dk.pool.ntp.org iburst
server 1.dk.pool.ntp.org iburst
server 2.dk.pool.ntp.org iburst
server 3.dk.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1 -1
rtcsync

现在它已经运行了一段时间并且似乎保持时间同步;-)

编辑:

正如 Paul Gear 指出的那样,我还没有解决这个问题......时间仍然在流逝。

使用时/usr/bin/vmware-toolbox-cmd timesync status我发现,在生产服务器上,与 ESXi 主机的时间同步已启用(!!!)。我不知道这是怎么发生的?我最初配置并上传到数据中心的虚拟机没有启用它。无论如何,显然,它不应该与主机同步时间。

使用以下命令可以很容易地禁用它:/usr/bin/vmware-toolbox-cmd timesync disable

现在我们有了更现实的数据chronyc sources -v

210 Number of sources = 4

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- sweetums.eng.tdc.net          2   7   377    36    +30us[  +30us] +/-   45ms
^* 77.68.139.83                  1   7   377    92   -191us[ -184us] +/- 4742us
^- 152.115.59.244                2   7   377    39    +99us[  +99us] +/-   31ms
^- pf.safe-con.dk                2   7   377    42   +359us[ +359us] +/-   29ms

chronyc tracking

Reference ID    : 4D448B53 (77.68.139.83)
Stratum         : 2
Ref time (UTC)  : Tue Aug 03 10:45:26 2021
System time     : 0.000008465 seconds slow of NTP time
Last offset     : +0.000006720 seconds
RMS offset      : 7.358564854 seconds
Frequency       : 57.633 ppm slow
Residual freq   : +0.001 ppm
Skew            : 0.340 ppm
Root delay      : 0.009058274 seconds
Root dispersion : 0.000351956 seconds
Update interval : 128.8 seconds
Leap status     : Normal

现在已经顺利运行了半个小时,所以我相信这就是解决方案。感谢您的意见!!!

答案2

考虑使用此处建议的最小客户端设置:https://www.golinuxcloud.com/configure-chrony-ntp-server-client-force-sync/ 当达到漂移的阈值时,它会放弃同步,这似乎发生在你身上。

相关内容