NTP 配置中的时间漂移​​和错误时区

NTP 配置中的时间漂移​​和错误时区

我们有 2 个 VLAN,每个 VLAN 都有一个服务器,为其相应的 VLAN 提供 DHCP、DNS 和 NTP。这 3 个服务器从本地 NTP 服务器获取时间。以下是每个 VLAN 上 NTP 客户端和服务器的配置以及每个设置的问题:

VLAN 1:

NTP服务器(科学Linux 7.3)

restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
logfile /var/log/ntp.log
driftfile /var/lib/ntp/drift
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
restrict 127.0.0.1
restrict xx.xx.xx.xx mask XX.XX.XX.XX nomodify notrap

NTP客户端(科学Linux 7.3)

driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
server yy.yy.yy.yy   # added by /sbin/dhclient-script

尽管时区正确,该服务器始终向前漂移 3 小时。

VLAN 2:

NTP服务器(科学Linux 6.4)

restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
logfile /var/log/ntp.log
server 127.1.1.0 # local clock
fudge  127.127.1.0
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict xx.xx.xx.xx mask XX.XX.XX.XX nomodify notrap

NTP客户端(科学Linux 6.4)

driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
server yy.yy.yy.yy   # added by /sbin/dhclient-script

在这里我无法更改时区。它应该是,但尽管有链接值,EET但它总是如此。EEST/etc/localtime

我已经确定:

  1. 没有防火墙规则 ( iptables -F)
  2. ntpd守护进程正在运行并启用 ( chckonfig on)
  3. CentOS 7.x 使用另一个名为chronyd“阻止ntpd启动”的时间服务。所以我禁用了它(丢失了这个源:()。

设置这些服务后,我们将它们与本地 NTP 同步一次。通过我们在每台服务器上的 DHCP 配置,option ntp-servers xx.xx.xx.xx;NTP 信息通过 DHCP 进行分发。我尝试将本地 NTP 服务器的地址添加到服务器的地址/etc/ntp.conf,但问题仍然存在。

请注意,所有服务器都是通过 VMWare ESXi 虚拟化的。

答案1

如果您/etc/localtime指向/usr/share/zoneinfo/EET,该时区定义包括欧洲夏令时间 (= 欧洲 DST),并且在 3 月最后一个星期日到 10 月最后一个星期日之间,该时区将被列为 EEST,而不是 EET。截至撰写本文时,转换日就在昨天......

你应该阅读Linux VM 的 VMware 计时最佳实践。简而言之:

  • 确保 VMware 主机使用正确的时间和时区。
  • 如果你在访客上使用 NTP:
    • 确保 VMware Tools 时间同步已禁用
    • 添加tinker panic 0第一的/etc/ntp.conf 行
    • server 127.127.1.0如果有像这样的本地时钟定义ntp.conf注释掉它
    • 将 NTP 服务器的主机名或 IP 地址也放入该/etc/ntp/step-tickers文件中,以便在网络接口激活且数据库等时间敏感的内容尚未启动时,系统在启动时将时钟跳到正确的时间。

我遇到过的一些陷阱:

  • /etc/adjtime指定预期使用的硬件时钟:UTC 或 LOCAL。仅更改 in 的变量/etc/sysconfig/clock不一定能达到您想要的效果。为了安全起见,请确保两个地方都一致。
  • 确保您的 NTP 服务器正在服务正确的世界标准时间时间。
  • 当系统时间与准确的小时数相差时,首先用于date -u验证系统的 UTC 时间概念是否正确。 NTP 只处理 UTC;任何与当地时间的转换错误都是时区设置的错误。

答案2

因此,经过与这些服务器的斗争,问题已经解决。详细信息如下:

  1. 对于CentOS 7.X服务器,我在客户端维护时禁用ntpd并使用。从 CentOS 7.X 开始,这似乎将成为受支持的 NTP 守护进程。配置仅需要并且在chronydntpdchronydchronydserver xx.xx.xx.xx prefer iburstallow yy.yy.yy.yy/ZZ/etc/chrony.conf
  2. 对于 CentOS 6.4 服务器,我必须安装新版本tzdata 这里然后链接/etc/localtime到相应的时区,就我而言Asia/Amman

我遇到的一些陷阱:

  • no server suitable for synchronization foundCentOS 6.4 客户端上的噩梦错误通过停止ntpd、运行ntpdate然后启动得到解决ntpd
  • 由于某种原因我不记得了,在 CentOS 6.4 中我不得不更改restrict 127.0.0.1restrict localhost

相关内容