背景:集群里17是ntp的服务端,18、19、20、21、22是ntp的客户端。详见《Centos7.5下HDP集群搭建(一)》里有说明。
问题:19、20、21、22这4台设备的时间都是从17同步来的,只有18不是从17同步、而是本地时间。
19-22设备提示如下:
[root@dsj3 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*dsj1 202.112.29.82 3 u 585 1024 377 1.259 1.392 3.329
LOCAL(0) .LOCL. 10 l 23h 64 0 0.000 0.000 0.000
注意星号位置,代表所同步的ntp服务端IP
18设备提示如下:
[root@dsj2 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
dsj1 202.112.29.82 3 u 585 1024 377 1.259 1.392 3.329
*LOCAL(0) .LOCL. 10 l 23h 64 0 0.000 0.000 0.000
定位过程:
1.查询日志:/var/log/messages 查看是否有ntp失败或者fail提示。结果没有
2.查询ntp状态:service ntpd status,如下提示,依然没有fail项:
[root@dsj2 etc]# service ntpd status
Redirecting to /bin/systemctl status ntpd.service
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2018-08-02 17:37:53 CST; 15s ago
Process: 6766 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 6767 (ntpd)
CGroup: /system.slice/ntpd.service
└─6767 /usr/sbin/ntpd -u ntp:ntp -g
Aug 02 17:37:53 dsj2.zkhy.com ntpd[6767]: Listen and drop on 1 v6wildcard :: UDP 123
Aug 02 17:37:53 dsj2.zkhy.com ntpd[6767]: Listen normally on 2 lo 127.0.0.1 UDP 123
Aug 02 17:37:53 dsj2.zkhy.com ntpd[6767]: Listen normally on 3 eth0 172.16.172.18 UDP 123
Aug 02 17:37:53 dsj2.zkhy.com ntpd[6767]: Listen normally on 4 lo ::1 UDP 123
Aug 02 17:37:53 dsj2.zkhy.com ntpd[6767]: Listen normally on 5 eth0 fe80::de59:313d:25d6:2f40 UDP 123
Aug 02 17:37:53 dsj2.zkhy.com ntpd[6767]: Listening on routing socket on fd #22 for interface updates
Aug 02 17:37:53 dsj2.zkhy.com ntpd[6767]: 0.0.0.0 c016 06 restart
Aug 02 17:37:53 dsj2.zkhy.com ntpd[6767]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM
Aug 02 17:37:53 dsj2.zkhy.com ntpd[6767]: 0.0.0.0 c011 01 freq_not_set
Aug 02 17:37:55 dsj2.zkhy.com ntpd[6767]: 0.0.0.0 c514 04 freq_mode
3.查询 timedatectl:显示同步功能都是开启的
[root@dsj2~]# timedatectl
Local time: Thu 2018-08-02 18:06:34 CST
Universal time: Thu 2018-08-02 10:06:34 UTC
RTC time: Thu 2018-08-02 10:06:36
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
[root@dsj1 ~]#
4.尝试与17的网络数据通信 ntpdate -u 172.16.172.17
5.查询ntpstat:显示是同步的本地服务。与其他正常设备对比发现不理解stratum后面数字的含义。
[root@dsj2 log]# ntpstat
synchronised to local server at stratum 11
time correct to within 127 ms
polling server every 64 s
正常设备:
[root@dsj2 log]# ntpstat
synchronised to NTP server (172.16.172.17) at stratum 4
time correct to within 127 ms
polling server every 64 s
5.查询stratum的含义:
层的概念
这些问题主要涉及到NTP的层(stratum)的概念,顶层是1,值为0时表示层数不明,层的值是累加的,比如NTP授时方向是A-〉B-〉C,假设A的stratum值是3,那么B从A获取到时间,B的stratum置为4,C从B获取到时间,C的值被置为5。一般只有整个NTP系统最顶层的服务器stratum才设为1。
NTP同步的方向是从stratum值较小的节点向较大的节点传播,如果某个NTP客户端接收到stratum比自己还要大,那么NTP客户端认为自己的时间比接受到的时间更为精确,不会进行时间的更新。
stratum根据上层server的层次而设定(+1)。
对于提供network time service provider的主机来说,stratum的设定要尽可能准确。
而作为局域网的time service provider,通常将stratum设置为10 (Stratum 10 is conventional for unsynchronized local clocks; it is high enough that nobody is likely to mistake it for a desirable clock to synchronize with.),如下:
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
#stratum设置为其它值也是可以的,其范围为0~15
6.猜想是否是17到straum的时间较长超过11,所以本地的优先级反而高于17,所以将本地 statum尝试修改为最大值15。
重启服务后,发现问题貌似解决了。
这是今天这个问题的定位过程,后续若有问题,会再次更新。