-
故障描述:
云上服务器提供pc、app、小程序的前端web,后端接口的服务,几乎所有接口都无返回值,线上服务中断。
zabbix监控告警部分服务器服务端口服务异常。 -
经手动测试网络连通性——正常,登录dubbo-admin,以及手动查看服务进程及端口及服务端口连通性,都正常,唯独返回结果异常。也就是java服务的内部逻辑异常,无法正常服务。查询单个服务比如java、php等的日志,发现日志时间戳异常,且服务已有异常日志,且当前系统时间,有严重的滞后。
可见系统时间异常,导致zookeeper集群、dubbo服务、zabbix_agent传送的监测数据,等对时间有一致验证的服务都发生了故障。 - 后腾讯云客服通知,腾讯云时钟服务器异常。
-
总结:
现有生产环境的时钟同步存在缺陷——使用ntpupdate强制同步命令,而不是采用ntpd时钟校准服务
时钟同步,对于很多集群服务是必然要求的,但应该注意一个细节:ntpd在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对。而ntpdate不会考虑其他程序是否会阵痛,直接调整时间。一个是校准时间,一个是调整时间。 -
启用ntpd时钟校准服务,禁用crontab的ntpupdate时钟调整命令
# 禁用conrtab中的ntpupdate命令
crontab -l
# ntpd服务配置
yum install -y ntp
# 修改配置文件
vi /etc/ntp.conf
# 修改时钟服务器地址
server time1.tencentyun.com iburst
server time2.tencentyun.com iburst
server time3.tencentyun.com iburst
server time4.tencentyun.com iburst
server time5.tencentyun.com iburst
# 启动ntpd服务
service ntpd start
# 执行以下命令,查看 NTP 服务端口 UDP 123 端口是否被正常监听
ss -nupl
# 查看ntpd服务状态
service ntpd status
# 执行以下命令,获取更详细的 NTP 服务信息
ntpq -p
# 参数介绍
* : 表示目前使用的 NTP 服务器。
remote:响应这个请求的 NTP 服务器的名称。
refid:NTP 服务器使用的上一级 NTP 服务器。
st:remote 远程服务器的级别。服务器从高到低级别设定为1 - 16,为了减缓负荷和网络堵塞,原则上建议避免直接连接到级别为1的服务器。
when:上一次成功请求之后到现在的秒数。
poll:本地机和远程服务器多少时间进行一次同步(单位为秒)。初始运行 NTP 时,poll 值会比较小,和服务器同步的频率增加,建议尽快调整到正确的时间范围。调整之后,poll 值会逐渐增大,同步的频率也将会相应减小。
reach:八进制值,用来测试能否和服务器连接。每成功连接一次,reach 的值将会增加。
delay:从本地机发送同步要求到 NTP 服务器的 round trip time。
offset:主机通过 NTP 时钟同步与所同步时间源的时间偏移量,单位为毫秒(ms)。offset 越接近于0,主机和 NTP 服务器的时间越接近。
jitter:用来做统计的值。统计在特定连续的连接数里 offset 的分布情况。即 jitter 数值的绝对值越小,主机的时间就越精确。
-
额外补充,但这并不意味着,配置了ntpd服务,时钟同步就完全不会出现问题了。
本地服务器时间如果与ntpd server端服务器时间的差值较大,ntp默认的安全机制,是不会校准本地服务器时间与ntp server端一致;
而导致本地服务器与ntp server出现较大差值的情况,也是存在的,比如:
1.有人手动修改了本地服务器时间,造成与ntpserver端较大差值,ntpd时间校准则不会校准本地服务器时间
2.硬件故障
3.网络延时或者网络故障等
而修复上面三个问题的解决方法是手动调整本地服务器时间与ntp server端时间特别相近(小于最大差值),或者执行一次ntpdupdate命令(注意此时该机器上的业务应该停止服务,待时间正常后,再恢复业务应用) - 可以说ntpdate强制同步和ntpd时间校准服务都需要在合适的场景中使用,另外还可以配置ntp server为群组,增加所有节点的操作系统时钟监控,来提升整个时间校准服务的安全稳定性。