关于DEL网卡驱动的一次故障

导读

单位一台R710服务器上线以后出现网卡异常挂掉,奇怪的是只是内网不通,外网接口还是正常的。排查过程一波三折。最后通过上网查资料和打电话咨询DEL技术支持确认是由于DEL网卡驱动的一个bug引起,这个bugRedhat 5.3 5.4 5.5Centos系统中存在。

环境介绍

CPU :        Xeon
E5620 2.4G

内存:        12G

硬盘:        3x450G Raid 5

O S:           Centos
5.5 64bit

程序:        memcache,Active MQ,LVS

故障经过

问题之—-初步出现

         新的服务器上线没几天就出现一次服务器不响应的情况,当时因为自己在外面,无法处理,为减少宕机时间直接打电话让机房重启服务器后恢复正常。回到公司马上查看服务器上的监控情况以及日志情况。在日志上没发现啥异常问题,但是监控图上发现一个异常,图片如下图所示:

在故障点swap的使用达到100%,正纳闷,因为上面部署的服务不太可能消耗这么多内存的,总的内存有12G。登录到服务器上,是使用命令free –m发现swap分区的大小为0。怎么可能呢,我安装系统的时候肯定是创建了swap分区的。使用fdisk –l命令查看一下,发现原来分给swap/dev/sda3竟然是Linux raid autodetect,真是奇怪。起初怀疑是这个问题,因为linux系统当要使用swapswap分区没有就会导致系统挂掉。于是赶紧先添加一个文件swap,以免再次出现问题,添加步骤如下:

1、  使用dd命令创建一个用于swap分区的16G的文件

dd if=/dev/zero of=/data/tmp/myswap bs=32k count=524288

2、  使用mkswap格式化该文件

mkswap /data/tmpmyswap

3、  启用新建的swap分区文件

swapon /data/tmp/myswap

4、  将该swap分区添加到/etc/fstab自动启动

/data/tmp/myswap swap swap defaults 0 0

临时解决了这个问题,那么是什么原因导致swap分区没添加成功呢?在虚拟机上重新安装了系统,终于发现是我分区的时候不小心选择了swap上面的一个分区,可能是当时操作太快了,于是将/dev/sda3重新格式化成swap分区,并将添加的文件swap去掉,步骤如下:

1、  格式化/dev/sda3swap

mkswap /dev/sda3

2、  启动swap

swapon /dev/sda3

3、  去掉原来添加的文件swap

swapoff /data/tmp/myswap

4、  添加到/etc/fstab自启动

/dev/sda3               swap                 swap   
defaults        0 0

通过以上步骤,服务器上已经有了swap分区了,再使用free –m查看发现Swap16002M

 

问题之—-现场体验

         本以为问题已经得到解决,但是上周六早上又收到该服务器的报警,报警内容显示该服务器宕机了,这次我在家可以直接现场体验服务器故障情况了,由于那个机器配置有内网和外网,于是首先登录到局域网的一台机器上,ping这台机器的局域网IP不同。接着从我加的电脑ping该机器的公网IP,竟然是通的。通过SecureCRT登录上去使用top命令查看各个指标都正常,奇怪啊,就是内网不通。使用ifdown eth0/ifup eth0重启内网网卡后,再ping内网IP竟然通了,真是奇怪。问题临时解决了。由于不能马上定位问题,而那个服务器非常重要,又不能长时间出问题,因此先写了个脚本,实现功能是如果内网不能连通就重启内网网卡来临时解决这个问题,脚本内容如下:

cat
/var/script/monitor_network/monitor_network.sh

#!/bin/bash

packet_lost_status=`ping -i 0.01 -c 20 172.16.88.10 |
grep “packet loss”  | awk
\'{{sub(/%/,””,$6)}print $6}\’`

if [ $packet_lost_status -gt “95” ];then

        echo
“`date` restart eth0” >>restart_network.log

       
/sbin/ifdown eth0

        /sbin/ifup
eth0

        echo
“`date` start eth0 ok” >>restart_network.log

fi

        

问题之—-接近真相

有了脚本的保护就可以从容地来排查问题了,目前将问题定位到了eth0内网网卡上面,通过dmesg来诊断没发现eth0网卡有异常,查看/var/log/message也没发现有什么明显的错误。于是想去网上搜索一下看看是否有人和我一样的问题,于是在百度、google中搜索DEL R710 centos网络中断、DEL R710网络中断等关键字,发现了很多朋友遇到过这个问题。很多文章都提到dell的服务器网卡Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet在负载高的情况下会出现无故中断,重启网卡就好了,要更新网卡驱动。登录到服务器查看我的网卡型号,正好是这个型号:eth0: Broadcom NetXtreme II BCM5709 1000Base-T,似乎找到了问题的根源。

还不太放心,又拨通了DEL的技术支持电话4008845117DEL服务器的技术支持正式目前该网卡在Redhat 5.35.45.5以及Centos 5.35.45.5的旧的驱动存在bugBroadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet在负载高的情况下会出现无故中断,重启网卡就可以。升级到最新的驱动就能解决该问题,终于确认了问题了,下面就来搞定Centos 5.5 64bit下的网卡驱动升级

 

问题之—-完美解决

         下面是详细的Centos
5.5 64bit
下的网卡驱动升级的详细流程:

在升级之前先使用命令modinfo bnx2查看一下网卡的驱动版本,升级之前的版本为:2.0.2

1.  
http://zh-cn.broadcom.com/support/ethernet_nic/netxtremeii.php
下载最新的Broadcom NetXtreme II BCM5706/5708/5709/5716 linux驱动。

2.  
yum -y install
kernel-devel 
安装内核源码(服务器已经安装过了)。

3.  
备份之前的驱动:

cp /lib/modules/2.6.18-194.el5/kernel/drivers/net/bnx2.ko
/lib/modules/2.6.18-194.el5/kernel/drivers/net/bnx2.ko_bak

4.  
安装驱动:

unzip license.zip 

cd Server/Linux/Driver

tar xzvf netxtreme2-7.0.36.tar.gz

cd netxtreme2-7.0.36/bnx2/src

make && make install

5.  
加载新的驱动

./load_driver.sh

cat load_driver.sh

#!/bin/bash

rmmod bnx2

modprobe bnx2

/etc/rc.d/init.d/network restart

通过这两个命令来重新加载新的驱动,也可以通过重新启动系统的方式。

升级完成以后,再通过modinfo bnx2命令来查看驱动版本号,版本为:2.1.12b

至此问题总算解决了!

        

经验总结

         通过这次故障找到了以前没有swap添加所无的隐含问题,从某种意义上要感谢这次故障,不然以后还是会出现问题。获得了Redhat系列和Centos系列对DEL网卡的支持的bug,以后所有linux系统的新服务器上线之前都必须先更新网卡驱动,避免类似的故障发生,影响公司的业务。最后一个经验就是当你对故障无从下手的时候可以多googlebaidu,也许会有意外的发现,此外DEL技术支持也是一个相当重要的资源,毕竟他们处理过很多类似的故障有相当的经验。利用好网络和DEL技术支持的资源也许会出现事半功倍的效果。

 

版权声明:本文为feihongwuhen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/feihongwuhen/archive/2012/04/23/7169859.html