NTPD 意外死亡的可能原因及解决方案

NTPD 意外死亡的可能原因及解决方案

在使用 s3 进行物理文档存储的 Web 应用程序中,我们遇到了 NTP 持续死机的问题。这种情况似乎每天发生一两次。发生这种情况时提供的信息很少,除了 PID 文件存在,但当我检查状态时服务已停止。

有人能提出 NTPD 死机的可能原因吗?我假设可能是时钟漂移导致它死机,但我也不确定是什么原因造成的。内存和可用磁盘空间绰绰有余。

上次服务终止时的输出如下:

Sep  6 06:15:25 vm02 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="988" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Sep  6 06:17:06 vm02 ntpd[10803]: 0.0.0.0 0618 08 no_sys_peer
Sep  6 08:01:10 vm02 ntpd[10803]: 0.0.0.0 0617 07 panic_stop -28101 s; set clock manually within 1000 s.

答案1

我想说没有一种一分钟的方法可以找到确切的原因。

我们之前在 ESXi 环境中遇到过类似的问题。简而言之,我们发现 ESXi 主机的时钟漂移很大,并且客户虚拟机会从 ESXi 主机和上游 NTP 服务器同步时间。这导致虚拟机上的 NTPd 出现混乱,因此经常死机。

我们还发现,在一些罕见的情况下,随机数据包丢失也会导致 NTPd 退出,因为您的服务器和上游 NTPd 服务器之间的往返时间用于计算漂移时间。

以上两种情况下,如果 NTPd 发现大量的时间漂移​​,比如超过 1000 秒,它会默认退出。-g 选项会有点帮助。

   -g      Normally,  ntpd  exits  with  a  message to the system log if the offset exceeds the panic threshold,
           which is 1000 s by default. This option allows the time to be set to any value  without  restriction;
           however,  this  can  happen only once. If the threshold is exceeded after that, ntpd will exit with a
           message to the system log. This option can be used with the -q and -x options. See the tinker command
           for other options.

你可以查看系统日志,其中应该有一些单词可能会给你一些提示。你也可以监视“ntpq -p”输出大致了解偏移如何发展。

答案2

日志消息明确指出时钟漂移是退出的原因。可能的解决方案:

  • 使用 -g 标志启动 ntpd ;但是,这不能解决根本原因,即时钟偏差。
  • 在启动 ntpd 之前运行 ntpdate;可能有同样的警告。
  • 添加更多时间源;NTP 需要 4-6 个源才能保持良好的准确性。一个简单的方法是在配置中包含对 [0-3].YOURREGION.pool.ntp.org 的重复引用,例如

    server 0.au.pool.ntp.org iburst
    server 1.au.pool.ntp.org iburst
    server 2.au.pool.ntp.org iburst
    server 3.au.pool.ntp.org iburst
    
    server 0.au.pool.ntp.org iburst
    server 1.au.pool.ntp.org iburst
    server 2.au.pool.ntp.org iburst
    server 3.au.pool.ntp.org iburst
    

答案3

您可以尝试的另一个选项是 chrony。在我们的测试中,它比 ntpd 更稳定,并且能更好地处理虚拟环境中遇到的时间偏差。

http://chrony.tuxfamily.org/

相关内容