一次网卡驱动BUG故障的排错历程

前言

在日常运维中,总会遇到一些棘手的故障或问题,尤其面临多系统融合的兼容性或一些融合节点可能存在未知bug等方面,排错难度都会增加。

本文将从一次小事件为入口进行延伸,将宿主机esxi基础系统的多融合节点故障的排错历程展开介绍,并结合排错过程介绍esxi基础系统稳定性所依赖的环境条件。

排错阶段一:故障初现,随机复现

一、故障初现

事件背景: 某职场一天下午现场反馈有几个人无线网络连接不上

事件原因: 无线连网认证的网络认证服务器到某台AD域控网络不通,用户无法获取ad状态拒绝连网

临时措施: 重启网络认证服务器的网络服务,恢复

问题现象:

网络认证服务器到部分目标ip不通(其中一台AD域控属于其中)

网络认证服务器到部分目标IP通(告警系统属于通的ip,未产生服务器告警)

esxi上部分虚拟机有类似问题,部分虚拟机正常

二、随机复现

疑问:为什么会出现这个问题,如何能够复现呢?

因为大部分核心业务系统都运行在esxi底层上,如何确认具体故障原因规避类似风险成为了重中之重。

1、抓包分析

与此同时,我们进行了该宿主机上的其他虚拟机详细检查,发现另一台虚拟机也存在部分ip不通的情况(本地服务无远程ip互通依赖,该虚拟机服务未受影响),根据该虚拟机进行了各链路节点抓包分析:

1、级联switch抓到了服务器发送的icmp reply包,但在上联核心switch未发现该reply

2、为了排除server发出的包构造异常,使用了tcpreplay工具(一种pcap包的重放工具,可以将用ethrealwireshark等工具捕获的网络数据包原样或经过任意修改后重放回去)在实验环境中进行了重写和重放,数据包正常发送接收证明了包构造正常(其实当时实验环境和故障环境有其他差异)

3、重启了交换机端口后,故障虚拟机恢复

当时结论:级联或上联switch有问题导致丢失数据包(该结论是误判)

2、复现尝试

虽有简单的结论,但需要复现故障才能确定具体问题环节!

Esix排查过程中发现了故障时间节点有一条异常日志可能有关联性

Ixgbenindrv_uplinkresetvmnic0 device reset started

查阅vmware相关论坛资料,发现了一条命令可以触发相同的日志出来(重要节点一)

VMkernel Sys Info Shellvsish -e set /net/pNics/vmnic0/reset 1

使用该命令在故障环境中成功的进行了复现,但在测试环境中无法复现

当时结论:vmnic0reset动作触发了故障,但满足故障发生的其他因素仍是未知

排错阶段二:环环相扣,错综复杂

疑问:到底是什么场景下,vmnicreset动作会触发这个故障呢?

为了测试满足故障触发的X因素有哪些,我们尝试枚举了至少十几种有可能关联的条件,排列组合了十多套测试场景,用于测试确认

枚举X因素: 物理机型号、网卡型号、esxi版本、NLB模式、端口组配置、VSwitch配置、交换机型号、交换机系统版本、虚拟机OS、虚拟机数量,虚拟机角色,网段、服务器跳线等

在进行了不下于50次的排列组合测试后,不同的X因素之间有矛盾又有重合,而且复现的规律和频率不固定,无法稳定复现,但最终确定并缩小了一定的条件范围

当时结论:基本确定以下为触发条件范围(非最终)

服务器:Dell R740xd

网卡:Intel(R) Ethernet Controller 10G X550

驱动:ixgben网卡驱动

交换机:35系列交换机

虚拟机linux

排错阶段三:稳定复现,找到关键

一、稳定复现

疑问:在这些条件范围中到底还有什么隐性因素可以决定故障能稳定复现呢?

在基本确定的触发条件范围中,有一项很特殊,为什么每次能复现故障的时候一定是linux虚拟机,而windows从未复现过。针对这一特殊性我们在排查过程中进行了重点关注,在多次组合测试后发现一个特征,出现问题的虚拟机在esxi底层显示虚拟机网络信息中SubType类型均为“6”重要节点二)

经过资料查询确认了subtype=6代表虚拟网卡类型为vlance ”[AMD] 79c970 [PCnet32]” ),出现vlance类型的原因是早期创建linux虚拟机向导中选择了其他linux系统esxi就会自动创建虚拟机网卡为vlance类型网卡

在实验环境中准备vlance类型网卡的虚拟机进行测试,最终“DELL机型+基于IP哈希+vlance”reset vmnic动作触发下可以稳定复现,并且复现的虚拟机到多个目标网络的测试是一半通一半不通,其中非基于IP哈希NLB模式无法复现

二、找到关键

疑问:稳定复现后,如何确定是哪一环节导致部分通部分不通呢?

与此同时,网络组在升级cisco厂家售后工单等级后,在资深售后的协助下,通过EPCEmbedded Packet Capture,一种嵌入式的抓包工具,有更强的灵活针对性,特别适用于网络排障和在线抓包的情况)多次抓包分析得到一个重要信息,当虚拟机出现问题的目标ip到达switch接收包vlan tag0,当虚拟机的正常目标ip到达时vlan tag则为正常的id号(重要节点三)

当时结论:出现故障时因接收到的是没有正确标注VLAN ID的数据包导致三层交换无法转发

排错阶段四:拨云见日,水落石出

一、拨云见日

1、确认故障因素:

疑问:是什么因素导致了vlan tag异常?

有了vlan tag丢失这个关键因素,我们对比了vmware官网中各个esxi版本的更新介绍,其中在6系列相关版本中均提到了有vlan tag相关的bug描述,并给出了临时处理方案,另在7.0版本中说明修复了该bug

在实验环境中复现故障后,根据vmware的临时方案如愿恢复了故障

针对该方案命令的一些参数进行分析研究,命令效果是在esxi的底层网络部分将vlan相关的功能重启了一下(类似我们重启了网卡或交换机端口等操作)

另外我们将实验环节中的esxi升级为7.0后,该故障也无法复现了

当时结论:验证了vlan tag丢失导致问题,但该bug暂无详细说明

2、确认故障环节:

疑问:问题好像找到原因了,但是到底哪个环节导致vlan tag丢失了呢?

从虚拟机到switch还要经过Esxi层多个网络环节:f拟机,端口组,vswitch,物理网卡

通过esxi底层的pktcap-uw抓包工具(高级版的抓包及分析工具,主要应用在ESXi 5.5以后的版本中)对esxi底层三段网络链路进行了同时抓包

测试场景结果虚拟机到端口组数据包正常,vlan tag正常端口到vswitch数据包正常,vlan tag正常vswitch到物理网卡数据包正常,vlan tag正常物理网卡到交换机数据包正常,vlan tag异常

当时结论:物理网卡导致了vlan tag丢失

二、水落石出

1、确认故障原因:

疑问:物理网卡为什么会导致vlan tag丢失?

根据DELL机器所搭配的万兆网卡X550的特性进行资料搜索,我们在lenovo的官方论坛中找到了一篇关于10G ixgben网卡在1.8.7驱动版本中修复了vlan tag相关bug的说明,我们的版本是:1.7.10(重要节点四)

于是我们将故障宿主机的网卡驱动升级到了高版本进行测试,故障场景无法再复现

为了进一步确认关联性,又进行了多次组合测试

测试场景结果将故障宿主机的绑定线路换到千兆网卡无法复现esxi6.*升级到8.0(此时网卡驱动自动升为1.13.10)无法复现将esxi8.0的网卡驱动降级为1.7.10故障复现将万兆X5501.7.10)网卡安装在HP服务器中故障复现

至此,在整个排错过程中不同环节的疑问都得到了合理的解释

疑问1 为什么同样的DELL宿主机型号和vmware配置和网络配置,有的复现,有的不能复现?

此类故障影响的是网卡为vlance类型的虚拟机

疑问2 为什么同一台宿主机linux出故障,windows不出故障

故障linux属于vlance类型网卡(当安装操作系统时选择版本其他引起),windows属于E1000网卡

疑问3 为什么将负载均衡模式调整为其他非基于ip哈希+trunk”模式,就不能复现

因为基于ip哈希+trunk”工作模式涉及网络层打vlan tag,触发ixgben1.7.10版本驱动bug问题,其他的搭配如:基于ip哈希+access,基于源虚拟端口,基于源mac等负载均衡模式均不涉及网络层vlan tag

疑问4 为什么虚拟机出现故障时到目标ip是一半通一半不通

基于ip哈希的算法会对源及目标ip进行哈希计算分配不同的物理链路,当reset其中一块网卡时,一半目标受影响

疑问5 为什么hp的宿主机不能复现

hp宿主机没有搭配x550的万兆网卡(ixgben1.7.10

疑问6 为什么将esxitagging设置为开启不作为根本解决方案

因为开启后,类似于开启混杂模式。将会暴露更多的安全风险

疑问7 为什么本次遇到的vlan tag丢失不属于esxi6.7的版本bug(官方有说7.0修复类似bug

因为采用esxi高版本搭配ixgben1.7.10依然可以复现

总结:

通过完整的排错下来,最终确定了引起该事件的根本原因,以下四个条件同时满足会触发该类故障

条件一: 使用驱动ixgben 1.7.10X550网卡

条件二: 采用基于IP哈希的负载均衡模式

条件三: 虚拟机虚拟网卡型号为“vlance”

条件四: ESXIvmnic发生reset动作

眼见不一定为实,在复杂的故障场景分析中,会有很多的干扰因素影响着我们的判断,通过不断的排列组合去在差异中找共性、在共性中找差异是一种剔除干扰信息的方法之一;抱着去伪存真精神找到问题背后的根源,才能提供更有效的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/548390.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式监控平台---Zabbix

一、Zabbix概述 作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。 利用一个优秀的监控软件,我们可以: 通过一个友好的界面进行浏览整个…

C/C++ C/C++ 入门(6)模板初阶

个人主页:仍有未知等待探索-CSDN博客 专题分栏:C 多多指教! 一、泛型编程 在之前,我们进行编程的时候,总是针对于某一个具体的问题。就比如说,如何实现一个int类型的swap函数呢?大家肯定会写。…

MySQL 表管理

目录 建库 语法: 库名命名规则: 相关命令: 建表 语法: 相关命令: 修改表 语法: 常用操作命令 复制表 数据类型 MySQL的10种常用数据类型: 数据的导入和导出 导入: 格…

iptables 学习

文章目录 iptables 学习iptables基本组件:常用iptables命令:iptables -L 输出及解释解释: iptables “奇淫巧技”端口转发(port forwarding)流量重定向到透明代理防止DDoS攻击防止SYN洪泛攻击黑名单使用状态模块跟踪连…

第14届java A组蓝桥杯做题记录

A题 特殊日期 package Java14省赛.Java研究生组;import java.time.Year; //特殊判断一下2月份,leaf 为true 1 import java.util.*;import 蓝桥杯.dfs_n皇后; public class 特殊日期 {static int sum(int d){int res 0;while(d > 0){res d % 10;d / 10;}return…

基于Springboot+Vue的Java项目-房产销售系统(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

FlexLua低代码便捷打造4G转RS485网关设备

在物联网时代,各种设备之间的互联互通变得越来越重要,而4G转RS485网关设备的出现为不同设备之间的通信提供了更便捷的方式,推动了物联网技术的发展。 4G转RS485网关的通信原理相对简单易懂。它通过4G网络接收数据,然后将数据转换成…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果 一、简单介绍 二、简单去除图片水印效果实现原理 三、简单去除图片水印效果案例…

Java入门基础知识第八课(数组)——冒泡排序、Arrays工具类

前面二白讲了关于数组的概念、语法以及简单的输入输出,实际上关于数组的知识还有很多,接下来咱们讲一下冒泡排序以及一些常用的Arrays工具类,需要记忆的知识很多,而且容易混淆。 一、冒泡排序 简介(原理)…

基于SpringBoot的“银行OA系统的设计与实现”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“银行OA系统的设计与实现”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 用户登录界面 管理员主界面 员工基本档…

知道做到 一篇总结学习方法的笔记

元数据 [!abstract] 知道做到:跃迁式学习 书名: 知道做到:跃迁式学习作者: 彼得•霍林斯简介: 学习是改善你的生活环境、成为你想成为的人的关键。科学的方法能加速学习进程,让你事半功倍。技能、信息和能力…

openkylin系统通过网线连接ubuntukylin系统上网攻略

openkylin系统通过网线连接ubuntukylin系统上网攻略 主机1:x64 amd ,系统:ubuntukylin 22.04 ,状态:通过wifi连接热点进行上网,并共享网络。 主机2:x64 intel ,系统:ope…

5.x 版本 CallKit SDK 无法弹起通话界面

5.x 版本 CallKit SDK 作为接听方在前台的情况下无法弹起通话界面,作为拨打方能正常弹起通话界面 分析(根因分析、需求分析) CallKit SDK 初始化依赖于 IMKit SDK 初始化,如果您使用 IMLib SDK 的方法初始化的话,会导…

告别百年激进笔记

系列文章目录 八次危机笔记 告别百年激进笔记 文章目录 系列文章目录前言导图第一部分 资本全球化的宏大叙事第一节 人类创造的两个异化物第二节 全球资本化与制度性致贫第三节 国家竞争的“微笑曲线”第四节 欧债危机实属政治危机第五节 日本研究中的另类思考第六节 从…

流程图的新语法-mermaid的快速使用--推荐

chatgpt或者现在的大数据采用的流程图给出的代码如下: graph TD;A[接收客户请求] --> B[问题分类];B --> C[技术支持];B --> D[维修服务];C --> E[远程解决];C --> F[现场支持];D --> G[维修完成];G --> H[服务反馈];style A fill:#f9f,strok…

【数据结构与算法】贪心算法及例题

目录 贪心算法例题一:找零问题例题二:走廊搬运物品最优方案问题输入样例例题三:贪心自助餐 贪心算法 贪心算法是一种在每一步选择中都采取当前状态下最优的选择,以期望最终达到全局最优解的算法。它的核心思想是每次都选择当前最…

即插即用模块详解SCConv:用于特征冗余的空间和通道重构卷积

目录 一、摘要 二、创新点说明 2.1 Methodology 2.2SRU for Spatial Redundancy​编辑 2.3CRU for Channel Redundancy 三、实验 3.1基于CIFAR的图像分类 3.2基于ImageNet的图像分类 3.3对象检测 四、代码详解 五、总结 论文:https://openaccess.thecvf.c…

kafka的概念以及Zookeeper集群 + Kafka集群 +elfk集群

目录 zookeeper同步过程 分布式通知和协调 zookeeper同步过程 分布式通知和协调 准备 3 台服务器做 Zookeeper 集群 192.168.68.5 192.168.68.6 192.168.68.7 安装前准备 //关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 node1服务器&a…

Linux进阶篇:性能监控工具:socket 统计信息

Linux性能监控工具:socket 统计信息 1 ss命令介绍 ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netsta…

ssm052游戏攻略网站的设计与实现+vue

游戏攻略网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本游戏攻略网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处…