为什么ntpd无法更新服务器上的时间?


20

我的服务器上正在运行ntpd。所有这些都是默认设置,但我注释掉了它作为其他计算机的服务器的能力:

# restrict -4 default kod notrap nomodify nopeer noquery                                                                    
# restrict -6 default kod notrap nomodify nopeer noquery   
restrict default ignore

如果我跑ntpdate -q ntp.ubuntu.com,我告诉我的机器的时钟是关闭的7秒。

这是怎么回事?如何诊断正在发生的事情,是否可以打开日志?

更多信息#1

# ntpq -np
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 91.189.94.4     193.79.237.14    2 u   30   64    7  108.518   -0.136   0.361

更多信息#2

这是我问问题时的样子:

# ntpdate -q ntp.ubuntu.com
server 91.189.94.4, stratum 2, offset 7.191308, delay 0.13310
10 Jan 20:38:09 ntpdate[31055]: step time server 91.189.94.4 offset 7.191308 sec

这是现在的样子,在重新启动ntpd几次之后(我假设这是解决问题的方法):

# ntpdate -q ntp.ubuntu.com
server 91.189.94.4, stratum 2, offset 0.000112, delay 0.13164
10 Jan 20:47:03 ntpdate[31419]: adjust time server 91.189.94.4 offset 0.000112 sec

更多信息#3

我卸载了ntp并安装了openntpd和ran /usr/sbin/ntpd -d,并且看到这样的输出:

reply from 64.73.32.134: offset 6.715003 delay 0.041152, next query 30s
reply from 208.53.158.34: offset 6.700224 delay 0.036263, next query 31s
adjusting local clock by 6.734120s
reply from 72.18.205.156: offset 6.708575 delay 0.035885, next query 30s
reply from 64.73.32.134: offset 6.701463 delay 0.044199, next query 33s

在我看来,这很清楚地表明我无法在服务器上设置时间(尽管使用常规ntp,它有时确实会更新...)。

更多信息#4

我的VPS提供商说:

最新的内核不应将您的系统锁定在dom0的时钟上,为了安全起见,您可以在sysctl.conf中设置xen.independent_wallclock = 1。

我想这仍然没有解决VPS需要可用CPU才能进行正确时序计算的问题。


这是您的整个配置文件吗?如果运行ntpq -np,输出是什么?
David Mackintosh

其余的配置在哪里?没有上游服务器供您的主机获取时间。
亚伦·科普利

6
得到它了。看起来ntpd正常工作。NTPd将“转换”时钟,使其逐渐恢复同步。时间的突然变化可能会对某些正在运行的进程造成严重问题,因此NTP可以通过加快或减慢秒的长度来逐步进行调整来工作。
亚伦·科普利

1
是的,内核将在启动时以硬件时钟启动,因为在启动时,它仅是参考。正如您所说,如果已经运行了很多个月,那就不是。您可以告诉NTP同步到您的硬件时钟。我不确定Ubuntu,但是在/ etc / sysconfig / ntpd中基于Red Hat的系统上。您可以在此处查看或参考硬件的文档。
亚伦·科普利

1
我也不认为您理解ntpdate是一个独立的应用程序。它与ntpd没有任何关系,因此不应用于对其进行故障排除。建议使用-p选项显示ntpq来显示对等关系。如果ntpd看到您的对等设备,则应该使系统恢复同步。看起来现在一切都很好。我只是希望提供一些额外的见解。希望这对将来有所帮助!
亚伦·科普利

Answers:


10

您可以通过将其添加到ntp.conf中来启用登录ntpd:

logfile /var/log/ntpd.log

资料来源:ntp手册

如果关闭ntpd,可以通过命令行更新时钟吗?如果您运行ntpdate命令并收到如下错误:

# ntpdate ntp.ubuntu.com
10 Jan 23:47:57 ntpdate[26284]: Can't adjust the time of day: Operation not permitted

这意味着您可能正在使用VPS,在这种情况下,您将无法修改系统时钟-这只能在主机上完成。


ntpdate很乐意做它的事情-但我想知道我的服务器重新启动时,时钟是否重置为硬件时钟或其他类似的事情?
约翰·巴希尔

使用ntpdate设置时钟后,使用'hwclock --systohc'将“运行”时间同步到硬件时钟。它应该在重新启动时进行同步,但是如果您的计算机崩溃(或在执行正常关机时遇到其他问题),它将无法同步。
Dave Drager

好吧,这是一个虚拟主机,因此我无法访问硬件时钟(至少我希望没有!)
John Bachir

就像模拟BIOS一样,有一个模拟的硬件时钟。
基思·斯托克斯

我是几个VPS平台的管理员,但他们(openvz,Xen)都没有权限设置系统时钟。它们都必须在主机级别完成。与您的主机提交票证以指示时间已结束,它们应该正在运行ntp并已为您同步时间。
戴夫·德拉格

7

好的,自问这个问题以来,我已经用默认的供应商(Ubuntu 10.0.4)配置重新安装了ntp,并使其运行了几天。在撰写本文时,ntpdate -q ntp.ubuntu.com表明我的时间精确到0.000216秒以内。因此,我遇到的问题一定是我的自定义配置(我试图使外部主机无法查询我的服务器,而我已经在使用防火墙了,所以我不必太担心)。这是完整的Ubuntu 10.0.4 ntp.conf,其中删除了注释:

driftfile /var/lib/ntp/ntp.drift

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

server ntp.ubuntu.com

restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

restrict 127.0.0.1
restrict ::1

我欢迎就如何改进此配置提供反馈。

我还与VPS提供商签了一张票,要求他们就最好的事情提供详细的建议。我将它们指向该线程,以及一些其他文档,这些文档表明也许CPU分配会导致计时问题。他们说的是:

最新的内核不应将您的系统锁定在dom0的时钟上,为了安全起见,您可以在sysctl.conf中设置xen.independent_wallclock = 1。这将确保服务器实例不遵循主机服务器上的时钟。

和:

我认为您可能误解了此问题在虚拟化环境中影响NTP客户端的确切程度。根据我在Xen主机上的虚拟化系统(例如,我们在Rackspace Cloud上的设置)的经验,即使没有高负载的系统,也没有专用的系统时钟来处理中断而导致的不精确度仅为几分之一秒。即使将NTP设置为每天仅更新一次服务器时间(甚至比每天更频繁),它也可以通过NTP轻松管理。


4

您的评论之一说您正在虚拟主机上运行。在这种情况下,您可能不会取得太大的成功,因为您的虚拟主机的时间感将取决于它所运行的实际主机以及虚拟主机整体的繁忙程度。

根据所使用的虚拟化技术,虚拟主机在给定时间段内可能无法获得稳定的中断份额。这将使时钟运行得比实际情况更快或更慢。由于ntp会假设您的时钟比世界其他地区快或慢,因此它试图衡量变化,因此这种加速和慢速将使ntp适合,并且最终可能会放弃,结果那ntp -np节目的时间服务器的NTP已经认为不适合。

如果是这种情况,最好的选择可能是rdate -s $server每隔一段时间(例如每六个小时一次)就用蛮力来拉动时钟,以免时钟过度漂移。但是细粒度的精度可能无法达到。


我的托管服务提供商(机架空间云)告诉我NTP在其环境中运行良好。
约翰·巴希尔

请参阅我的提交/接受的答案,了解我的VPS提供商关于时钟的说法以及可以设置时间的信息。
John Bachir

自动rdate可以将时钟倒退,这可能会产生大量意想不到的后果。
rackandboneman

4

我过去使用ntpd而不是openntpd时发现的事情:

  1. 您需要允许ntpd正常启动并实际执行操作的本地主机访问权限

    restrict 127.0.0.1
    restrict ::1
    
  2. 尽管您可以将主机名用于服务器规则,但在与这些服务器进行通信时要留出备用空间,这意味着使用主机名restrict需要IP地址,因此无论如何我最终不得不使用IP。

  3. 您没有提到使用restrict来打开对服务器的备份访问。那是个问题。尝试如下所示的块:

    # ntp.xs4all.nl
    server          194.109.22.18
    restrict        194.109.22.18
    
  4. 您需要ntpd的多个对等方或服务器,因为它会尝试使用多数规则投票来处理不良行为者。因此,如果您输了1个,则最少要有4个,以便仍能拥有多数,最好是5个。

  5. 要锁定默认访问权限,我可以使用:

    restrict default notrust nomodify
    

    以便仍然能够查询,但是restrict default ignore当ntpd 4.2更改的含义时,我最终还是像您一样使用notrust

  6. 如果您不向其他人提供时间服务,那么您可能不需要常规ntpd的全部功能,而应该考虑openntpd使用。这是由OpenBSD团队编写的,它是使用权限分离和更简单的配置文件进行的最小化实现。据称它不能提供ntpd所能提供的高度精确的时间,但是对于常规服务器或工作站而言,它已经足够好了。


这是很棒的信息。我正在检查openntpd。问题:您是否同意其他声称无法在虚拟主机上设置时钟的人?
约翰·巴希尔

:也许你能回答这个问题serverfault.com/questions/223511/...
约翰·贝希尔

我不理解您在使用各种restrict规则时所说的话……这些规则是否也会影响我可以查询时间的服务器?我认为这仅影响到哪些节点可以询问我时间。
John Bachir

1
这是一个想法:想将您的答案更改为带有注释的完整的最小ntp.conf文件吗?:-)
John Bachir

不建议在虚拟主机上设置时钟,除非确保始终为您安排至少一个CPU,否则虚拟主机感知的时间与外界的时间不匹配。dom0应该保持时间。另一个问题的答案是好的。NTP是UDP,因此您需要允许来自查询时间的服务器的数据包。几年前我搬到OpenNTPD时,我的ntpd已过时。
Phil P

3
  • 如果ntpd无法连接到远程服务器,则不会看到该服务器的偏移量。
  • 如果ntpq被ntpd阻止,您将看到来自ntpq的明确错误消息。
  • 如果其他服务也可以设置时间(例如vmware工具),则会看到服务器的偏移量(每70秒运行ntpq -p)。

reach 7在输出则ntpq表示,是您让NTPD只运行了约4分钟。7是111二进制文件,这意味着服务器已到达3次。ntp每64秒(poll值)发出一次通知,并且when自上次联系以来已经等待了30秒(值)。

offset -0.136所指出的,该系统已同步。只有ntpd尚未将服务器标记为源。给它更多时间,就会出现一个小星星。

因此,实际上您的ntpd正在同步。但是ntpd通常不像ntpdate那样大幅度地同步,而是尝试缓慢地调整时间并确保经过几个周期才能使时间稳定。

PS:我知道,这个问题很老了。但是问题是永恒的。所有其他答案都只是误导恕我直言。VMWare甚至建议ntpd保持时间同步。


罗伯特,第一个很好的答案。欢迎来到该网站。
kubanczyk

1

我发现我的系统关闭了,并对为什么硬件时钟在干净关机时不与系统时钟同步感到困惑。似乎sysconfig中有一个NTP设置,需要进行编辑才能实现。

/etc/sysconfig/ntpd

# Set to 'yes' to sync hw clock after successful ntpdate
SYNC_HWCLOCK=no

我将其设置为yes。当然,首先要确认您具有可靠的NTP服务器,并且系统时钟可靠。

我知道就是这样-我的偏斜是47秒,而我的硬件时钟也偏了47秒。答对了!我的第一个线索是在日志中看到的Kerberos故障。如果时钟偏差太大,则Kerberos和许多NAS将无法正常工作。

祝你今天愉快!


1
Snap ..与RHEL / Centos有关。也许不是Ubuntu。
韦恩·斯威特


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.