故障现象
某运营商TECS OpenStack资源池,在当前告警中显示“时钟同步失败”,以10分钟整数倍为间隔上报“时间同步失败”告警,持续时间30秒-1分钟不等。
查看告警详情为同一台控制节点虚拟机,如图1所示。

故障分析
分析产生该告警的原因:
时间同步失败告警可能是由于外部时钟异常导致,需要检查。
相关告警上报周期性比较强,可能是由某些定时任务触发。
具体分析过程如下:
使用chronyc sources -v命令,检查现场时钟源,未发现异常,如下图所示。

寻找一台正常的控制节点虚机,使用chronyc sources -v命令,检查对比,未发现异常,如下图所示。

执行ping命令,检测时钟源,未发现丢包。
外部时钟正常,时钟同步正常,结合告警出现周期性比较强、告警持续时间较短的特点,分析可能是因为定时任务触发了控制节点虚机的时间修改。
初步推测是宿主机开启了qga服务,控制节点虚机会每10分钟向宿主机同步一次时间。
执行virsh qemu-agent-command --pretty controllervm '{"execute":"guest-get -reverse-command-status"}'|grep minute -A 1 |grep enabled命令,查看现场三个控制节点虚机输出结果,如下图所示。

由上图可见,只有异常节点输出结果是“enabled”: true,说明该节点开启了qga。
执行virsh dumpxml 1|grep -A5 "channel type"命令,发现同步周期为10分钟,与告警周期一致。因此判断该问题是由于虚机除了与外部时钟源同步外,还定时向宿主机同步时间,导致告警上报,如下图所示。

故障处理
临时解决方案:通过在宿主机执行virsh qemu-agent-command --pretty controllervm '{"execute":"guest-set-reverse-command-status", "arguments": {"command": "host-get-time", "enabled":false}}' 命令,临时关闭qga服务。但是在重启虚机中qga服务会恢复。
正式解决方案:执行virsh dumpxml controllervm > controllervm.xml命令,修改xml文件中qga的配置,将interval的值改为never,或者改成和其他节点一样,关闭虚机。执行virsh create controllervm.xml命令,重新创建虚机。
相关操作命令:
a. 判断是否需要qga服务,如果不需要,可以执行如下命令,在不关闭虚机的前提下,在虚机中关闭qga服务。
systemctl stop qga.service,systemctl disalbe qga.service
b. 执行如下命令,确认节点是否有配置qga服务。
virsh dumpxml domain |grep qemu.guest_agent
总结:时钟作为业务运行和命令的时间戳,在运维中稳定至关重要,该类问题需要第一时间重点分析处理,避免时钟跳变导致集群和业务异常。
全部0条评论
快来发表一下你的评论吧 !