我的服务器上正在运行 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 并运行/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 才能进行正确时间计算的问题。
答案1
您可以通过将以下内容添加到 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 上,在这种情况下您无法修改系统时钟 - 这只能在主机上完成。
答案2
好吧,大家,自从问了这个问题之后,我已经用默认供应商(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 设置为每天更新一次服务器时间(甚至频率更低),也可以轻松管理这种轻微的误差。
答案3
您的一条评论说您正在虚拟主机上运行。在这种情况下,您可能不会取得太大的成功,因为您的虚拟主机的时间感将取决于它正在运行的实际主机以及虚拟主机的整体繁忙程度。
根据所使用的虚拟化技术,vhost 可能无法在给定的时间段内获得稳定的中断份额。这将使时钟运行得比实际更快或更慢。由于 ntp 试图在假设您的时钟比世界其他地方更快或更慢的固定速率的情况下测量变化,因此这种加速和减速将使 ntp 不适应,最终可能会放弃,结果ntp -np
显示 ntp 认为不合适的时间服务器。
如果是这种情况,最好的办法可能是rdate -s $server
每隔一段时间(例如每六个小时)用蛮力拉一下时钟,这样它就不会过度不同步。但精细的准确性可能遥不可及。
答案4
- 如果 ntpd 无法连接远程服务器,您将看不到该服务器的偏移量。
- 如果 ntpq 被 ntpd 阻止,您将看到来自 ntpq 的清晰错误消息。
- 如果其他服务也设置了时间(例如 vmware tools),您将看到服务器的跳跃偏移(每 70 秒运行 ntpq -p)。
ntpq输出reach 7
表明,您让 ntpd 仅运行了大约 4 分钟。7 是二进制的 111,这意味着已经联系了服务器 3 次。ntp 每 64 秒联系一次(值),自上次联系以来poll
已经等待了 30 秒(值)。when
这offset -0.136
表明系统已经同步。只有 ntpd 尚未将服务器标记为源。再等一段时间,就会出现一个小星星。
因此,实际上您的 ntpd 正在同步。但 ntpd 通常不会一次性同步(如 ntpdate),而是尝试缓慢调整时间,并在几个周期内确保时间稳定。
附言:我知道这个问题很老了。但这个问题是永恒的。我认为所有其他答案都只是误导。VMWare 甚至推荐使用 ntpd 来保持时间同步。