九零不老心
发布于 2020-06-23 / 5 阅读 / 0 评论 / 0 点赞

ntp时钟异常导致生产服务异常的案例

  1. 故障描述:
    云上服务器提供pc、app、小程序的前端web,后端接口的服务,几乎所有接口都无返回值,线上服务中断。
    zabbix监控告警部分服务器服务端口服务异常。
  2. 经手动测试网络连通性——正常,登录dubbo-admin,以及手动查看服务进程及端口及服务端口连通性,都正常,唯独返回结果异常。也就是java服务的内部逻辑异常,无法正常服务。查询单个服务比如java、php等的日志,发现日志时间戳异常,且服务已有异常日志,且当前系统时间,有严重的滞后。
    可见系统时间异常,导致zookeeper集群、dubbo服务、zabbix_agent传送的监测数据,等对时间有一致验证的服务都发生了故障。
  3. 后腾讯云客服通知,腾讯云时钟服务器异常。
  4. 总结:
    现有生产环境的时钟同步存在缺陷——使用ntpupdate强制同步命令,而不是采用ntpd时钟校准服务
    时钟同步,对于很多集群服务是必然要求的,但应该注意一个细节:ntpd在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对。而ntpdate不会考虑其他程序是否会阵痛,直接调整时间。一个是校准时间,一个是调整时间。
  5. 启用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 数值的绝对值越小,主机的时间就越精确。

  6. 额外补充,但这并不意味着,配置了ntpd服务,时钟同步就完全不会出现问题了。
    本地服务器时间如果与ntpd server端服务器时间的差值较大,ntp默认的安全机制,是不会校准本地服务器时间与ntp server端一致;
    而导致本地服务器与ntp server出现较大差值的情况,也是存在的,比如:
    1.有人手动修改了本地服务器时间,造成与ntpserver端较大差值,ntpd时间校准则不会校准本地服务器时间
    2.硬件故障
    3.网络延时或者网络故障等
    而修复上面三个问题的解决方法是手动调整本地服务器时间与ntp server端时间特别相近(小于最大差值),或者执行一次ntpdupdate命令(注意此时该机器上的业务应该停止服务,待时间正常后,再恢复业务应用)
  7. 可以说ntpdate强制同步和ntpd时间校准服务都需要在合适的场景中使用,另外还可以配置ntp server为群组,增加所有节点的操作系统时钟监控,来提升整个时间校准服务的安全稳定性。