ntpdate server时出错原因及解决
错误1.Server dropped: Strata too high
在ntp客户端运行ntpdate serverIP,出现no server suitable for synchronization found的错误,如下所示
zhj@test:~$ sudo ntpdate weblbserver-1 28 Dec 15:22:33 ntpdate[4444]: no server suitable for synchronization found zhj@test:~$
在ntp客户端用ntpdate –d serverIP查看,参数是-d是指debug模式,它会将ntpdate同步时的一些信息打印出来,而且即使从ntp server那里获取到了国际
原子时,也不会写入客户端的osclock。可以看到,错误信息中有“stratum 16”。stratum是ntp服务器层级,正常情况下stratum的值为“0~15”。而
stratum=16是因为NTP server还没有和它的上层NTP server同步上。
zhj@appserver-1:~$ sudo ntpdate -d weblbserver-1 28 Dec 15:22:06 ntpdate[4434]: ntpdate 4.2.6p5@1.2349-o Wed Oct 9 19:08:07 UTC 2013 (1) Looking for host weblbserver-1 and service ntp host found : 192.168.0.7 transmit(192.168.0.7) receive(192.168.0.7) transmit(192.168.0.7) receive(192.168.0.7) transmit(192.168.0.7) receive(192.168.0.7) transmit(192.168.0.7) receive(192.168.0.7) 192.168.0.7: Server dropped: strata too high server 192.168.0.7, port 123 stratum 16, precision -18, leap 11, trust 000 refid [192.168.0.7], delay 0.02667, dispersion 0.00003 transmitted 4, in filter 4 reference time: 00000000.00000000 Mon, Jan 1 1900 0:00:00.000 originate timestamp: d84a9ea5.06da4607 Sun, Dec 28 2014 15:22:13.026 transmit timestamp: d84a9ea5.07d57eae Sun, Dec 28 2014 15:22:13.030 filter delay: 0.02667 0.02675 0.02678 0.02696 0.00000 0.00000 0.00000 0.00000 filter offset: -0.00457 -0.00453 -0.00467 -0.00468 0.000000 0.000000 0.000000 0.000000 delay 0.02667, dispersion 0.00003 offset -0.004574 28 Dec 15:22:13 ntpdate[4434]: no server suitable for synchronization found zhj@appserver-1:~$
那我们怎样知道weblbserver-1这个NTP server是否与它的上层NTP server是否同步上了呢?用ntpq -p命令(注:ntpq即ntp query,参数-p是print),
如下在weblbserver执行ntpq -p
zhj@weblbserver-1:~$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== dns1.synet.edu. 202.118.1.46 2 u 915 1024 1 43.464 -134.79 0.004 golem.canonical 192.93.2.20 2 u 914 1024 1 433.083 -198.90 0.004 zhj@weblbserver-1:~$
这里简单说一下when,poll,reach几个参数,
when —— 上次同步时间到现在的距离,单位是秒。当然,如果ntp服务是刚启动,还没同步过,那这个参数就是ntp服务启动后到现在的距离
poll —— 同步周期,单位为秒
reach —— 它是八进制数,正常情况下值为[0, 1, 3, 7, 17, 37, 77, 177, 377],对应的二进制为[0, 1, 11, 111, 1111, 11111, 111111, 1111111, 11111111],
ntp服务启动后,reach就以poll值为周期与ntp server通信,为了方便理解,我们可以简单的认为每次ping一下上层ntp server,如果成功,那
reach就向左移一位,右边补1,如果失败,则右边补0,所以如果reach不是上面给出的枚举值,那就是在通信过程中出错了。当reach 达到17时
(对应1111,即最近的四次通信都成功了),那才开始同步时间,这时,remote项对应的域名或IP列表有,其中一个前面会有*号,表示该IP就是
NTP server。而在开始同步时间之前,当客户端访问weblbserver-1这个NTP server时,都会出现stratum 16,no server suitable for
nchronization found这样的错误。也就是说如果你在NTP server主机上重启了ntp服务,那要等4*poll秒(在前四次通信都是成功的前提下),
该NTP server才与上层NTP server开始同步时间,而且只有当开始同步时,该NTP server才能为其它客户端提供NTP服务。因此,你在/etc/ntp.conf
中设置的同步周期minpoll maxpoll不能太大,因为每次ntp服务重启后,要等4倍长的时间才能开始同步。
错误2.Server dropped: no data
从客户端执行netdate –d时有错误信息如下:
transmit(192.168.30.22) transmit(192.168.30.22) transmit(192.168.30.22) transmit(192.168.30.22) transmit(192.168.30.22) 192.168.30.22: Server dropped: no data server 192.168.30.22, port 123 ..... 28 Jul 17:42:24 ntpdate[14148]: no server suitable for synchronization found
出现这个问题的原因可能有2:
1. 检查ntp的版本,如果你使用的是ntp4.2(包括4.2)之后的版本,在restrict的定义中使用了notrust的话,会导致以上错误。
使用以下命令检查ntp的版本:
下面是来自ntp官方网站的说明:
The behavior of notrust changed between versions 4.1 and 4.2.
In 4.1 (and earlier) notrust meant "Don't trust this host/subnet for time".
In 4.2 (and later) notrust means "Ignore all NTP packets that are not cryptographically authenticated." This forces remote time servers to
authenticate themselves to your (client) ntpd
解决办法:把notrust去掉。
2. 检查ntp server的防火墙。可能是server的防火墙屏蔽了upd 123端口。
可以用命令 来关掉iptables服务后再尝试从ntp客户端的同步,如果成功,证明是防火墙的问题,需要更改iptables的设置。