近期新上的DB SERVER服务器,在压测中发现网卡很不稳定,压力测试刚刚进行十几分钟后,服务器反应就变得非常慢,PING的时候经常丢包而且SSH连接也时断时续。刚开始以为是高并发时导致的db server无响应,可以看了一下CPU、内存和硬盘IO,发现都没有达到较高值,甚至比我们的预警值低很多,而且监测也表明DB服务器剩余资源很充裕!真是比较奇怪,那么引起网卡不稳定的原因到底是什么呢?

向相关工程师了解了一下情况,知道这台DB服务器是双机热备中的一台服务器,前几天刚做的2组千兆网卡绑定。据工程师说绑定前也做过压测,没有出现这样的问题。难道是绑定设置的哪个环节出问题了?于是决定从千兆网卡绑定进行详细检查。

故障现象图示:

一、 检查ifcfg-bond0和ifcfg-bond1文件

#cat  /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

BOOTPROTO=static

ONBOOT=yes

IPADDR=10.58.11.11

NETMASK=255.255.255.0

GATEWAY=10.58.121.254

USERCTL=no

#cat  /etc/sysconfig/network-scripts/ifcfg-bond1

DEVICE=bond1

BOOTPROTO=static

ONBOOT=yes

IPADDR=10.10.10.18

NETMASK=255.255.255.0

GATEWAY=10.58.121.254

USERCTL=no

分析:很标准的配置,没有什么问题。在这里注意不要指定单个网卡的IP 地址、子网掩码或网卡 ID。将上述信息指定到虚拟适配器(bonding)中即可。

二、检查ifcfg-eth0、ifcfg-eth1、ifcfg-eth2、ifcfg-eth3文件

#cat  /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

USERCTL=no

ETHTOOL_OPTS="speed 1000 duplex full autoneg on"

#cat  /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

ONBOOT=yes

BOOTPROTO=none

MASTER=bond1

SLAVE=yes

USERCTL=no

ETHTOOL_OPTS="speed 1000 duplex full autoneg on"

#cat   /etc/sysconfig/network-scripts/ifcfg-eth2

DEVICE=eth2

ONBOOT=yes

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

USERCTL=no

ETHTOOL_OPTS="speed 1000 duplex full autoneg on"

#cat  /etc/sysconfig/network-scripts/ifcfg-eth3

DEVICE=eth3

ONBOOT=yes

BOOTPROTO=none

MASTER=bond1

SLAVE=yes

USERCTL=no

ETHTOOL_OPTS="speed 1000 duplex full autoneg on"

分析:从配置文件上看是eth0和 eth2绑定为BOND0, eth1和 eth3绑定为BOND1.

(注:临时设置网卡的千兆全双工可以这样

ethtool -s eth0 speed 1000 duplex full autoneg on

ethtool -s eth1 speed 1000 duplex full autoneg on)

三、 检查modprobe.conf配置文件

# cat /etc/modprobe.conf

alias eth0 bnx2

alias eth1 bnx2

alias eth2 bnx2

alias eth3 bnx2

alias scsi_hostadapter megaraid_sas

alias scsi_hostadapter1 ata_piix

alias scsi_hostadapter2 lpfc

alias bond0 bonding

options bond0 miimon=100 mode=0

alias bond1 bonding

options bond1 miimon=100 mode=1

###BEGINPP

include /etc/modprobe.conf.pp

###ENDPP

分析:从此文件看加入

alias bond0 bonding

options bond0 miimon=100 mode=0

alias bond1 bonding

options bond1 miimon=100 mode=1

主要目的是使系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0、bond1

另外miimon是用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。

mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。

mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份.

注意:bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用。

这部分的配置也没有问题。

到这里似乎还没看到问题的所在,不过还有一个地方是大家容易忽视的,那就是rc.local文件,为了让网卡绑定在每次启动后都能立即生效,我们通常会设置 rc.local.所以我们还应检查一下这个文件。

四、检查rc.local文件

# cat  /etc/rc.d/rc.local

touch /var/lock/subsys/local

ifenslave bond0 eth0 eth1

ifenslave bond1 eth2 eth3

分析:这样的设置方便开机启动时,自动载入配置。

注意:这里是把 eth0和 eth1放到bond0里,eth2和 eth3放到bond1里。如果大家仔细回想的话,会发现在第二步检查当中是eth0和 eth2绑定为BOND0, eth1和 eth3绑定为BOND1的。看来问题的罪魁祸首就在这里,那么这样配置错了,会造成什么现象呢?

首先回顾一下网卡绑定的原理。我们知道,在正常情况下,ethernet网卡只接收目的mac地址是自身mac的ether帧,对于别的数据帧都过滤掉,以减轻驱动程序——也就是软件的负担。但是ethernet网卡也支持另外一种被称为promisc的模式,可以接收网络上所有的帧,很多系统程序如:sniffer、tcpdump,都运行在这个模式下。Bonding网卡绑定也运行在这个模式下,而且修改了驱动程序中的mac地址,将两块网卡的mac地址改成相同,可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。

那么在我们检查的这个rc.local文件中,由于系统工程师的粗心把网卡绑定配置错了,这样一个细微的配置错误就会造成一个IP地址对应两个不同的MAC地址,显然会造成网络的延迟和不稳定,这跟ARP***比较像。当有多个不同MAC对应同样的IP,网络里面各机器包括路由器对应这个IP的ARP会不停的变,包不是丢了就是发到错误的MAC了。

我们可以检查一下各网卡的MAC来确认一下。

eth0      Link encap:Ethernet  HWaddr D4:AE:52:7F:D1:74          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

RX packets:358839038 errors:0 dropped:0 overruns:0 frame:0

TX packets:445740732 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:84060158481 (78.2 GiB)  TX bytes:324117093205 (301.8 GiB)

Interrupt:178 Memory:c6000000-c6012800

eth1      Link encap:Ethernet  HWaddr D4:AE:52:7F:D1:76          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

RX packets:1319022534 errors:0 dropped:0 overruns:0 frame:0

TX packets:827575644 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:402801656790 (375.1 GiB)  TX bytes:249765452577 (232.6 GiB)

Interrupt:186 Memory:c8000000-c8012800

eth2      Link encap:Ethernet  HWaddr D4:AE:52:7F:D1:74          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

RX packets:368142910 errors:0 dropped:0 overruns:0 frame:0

TX packets:445816695 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:88487806059 (82.4 GiB)  TX bytes:324236716714 (301.9 GiB)

Interrupt:194 Memory:ca000000-ca012800

eth3      Link encap:Ethernet  HWaddr D4:AE:52:7F:D1:76          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

RX packets:1311065414 errors:0 dropped:0 overruns:0 frame:0

TX packets:827581593 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:400383501186 (372.8 GiB)  TX bytes:249850192137 (232.6 GiB)

Interrupt:202 Memory:cc000000-cc012800

可以看到eth0和eth2的MAC是一样的,eth1和eth3的MAC是一样的。

针对问题原因,立即修改rc.local这个文件,改回正确的配置。

ifenslave bond0 eth0 eth2

ifenslave bond1 eth1 eth3

然后重启服务器,再进行压测,发现果然一切正常了。

总结:Linux双网卡的绑定是一个比较具体的操作工作,在配置当中我们不仅要熟悉了解它的原理,更要在部署实施时仔细认真,一个疏忽就会造成网络的不稳定和节点的瘫痪。

linux网卡时断时续,网卡不稳定的罪魁祸首相关推荐

  1. Linux下双网卡绑定(bonding技术)

    Linux网卡绑定探析 2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的网卡 ...

  2. linux服务器多网卡bond

    将多个Linux网络端口绑定为一个,可以提升网络的性能,比如对于备份服务器,需要在一个晚上备份几个T的数据, 如果使用单个的千兆网口将会是很严重的瓶颈.其它的应用,比如ftp服务器,高负载的下载网站, ...

  3. linux 有线网卡,linux下有线网卡出现ADDRCONF(NETDEV_UP): eth0: link is not ready的解决方法...

    一.背景 2018年5月24日,笔者的pc已经连续运转两天了,突然要使用有线网卡,却发现有线网卡无法正常工作,于是查看了一下内核日志: r8169 0000:05:00.0 eth0: link do ...

  4. Linux下多网卡MAC配置问题

    HWADDR=, 其中 以AA:BB:CC:DD:EE:FF形式的以太网设备的硬件地址.在有多个网卡设备的机器上,这个字段是非常有用的,它保证设备接口被分配了正确的设备名,而不考虑每个网卡模块被配置的 ...

  5. linux网卡驱动离线安装_新装Linux系统没有网卡驱动的解决办法和步骤

    刚安装的linux系统没有网卡驱动,下面给出我的解决方法: (机器系统是RHEL5.3) 首先说明几个命令: #lsmod --显示已载入系统的模块. 执行lsmod指令,会列出所有已载入系统的模块. ...

  6. linux多网卡bind发送数据,Linux系统多网卡绑定实战

    原标题:Linux系统多网卡绑定实战 纯手工打造每一篇开源资讯与技术干货,数十万程序员和Linuxer已经关注. 导读 对于服务器来说,网络设备的稳定也是比较重要的,特别是网卡.在生产型的系统中,网卡 ...

  7. linux链路状态,网卡一配地址,链路状态就down了,求解决方法!

    网卡一配地址,链路状态就down了,求解决方法! (2012-06-13 01:26:16) 标签: 网卡 杂谈 网卡一配地址,链路状态就down了,求解决方法!suse 10系统,网卡类型 Ethe ...

  8. linux 网卡绑定updelay,Linux 配置双网卡绑定实现负载均衡

    Linux 配置双网卡绑定,实现负载均衡 1.Bond的工作模式 Linux bonding驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用,用于网络负载均衡及网络冗余. bonding ...

  9. Linux 系统双网卡绑定 bond的7种模式

    第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略) 第二种模式:mod=1,即: (active-backup) Active-backup ...

  10. linux mode4的双网卡绑定,Linux实现双网卡绑定自动化脚本 | 聂扬帆博客

    在上一篇写了双网卡绑定和卸载:Linux实现双网卡绑定和卸载 其实认真观察上面的步骤,都是固定的.于是我们就可以写个脚本实现自动化配置#!/bin/bash if [ $# -lt 6 ];then ...

最新文章

  1. java中抽象接口_一篇文章让你彻底理解java中抽象类和接口
  2. Pycharm中导入requests模块详解
  3. 用大顶堆实现最大优先队列
  4. 【入门经典】在母版页中使用CSS
  5. vue 渲染函数处理slot_面试官:Vue 和 React 对于组件的更新粒度有什么区别?
  6. Fastify 2.0.1 和 1.14.3 发布,极速 Node.js Web 框架
  7. Spark2.0流式处理读Kafka并写ES
  8. java color类 蓝色_java中Color类的简单总结
  9. uvm_reg_defines——寄存器模型(四)
  10. git push失败:ssh:connect to host github.com port 22:Connection timed out
  11. 【Java面试题系列】:Java中final finally finalize的区别
  12. 浅谈移动端设备标识码:DeviceID、IMEI、IDFA、UDID和UUID
  13. 千寻位置平台使用入门总结
  14. Expeditious Cubing(浮点数处理)
  15. WRF嵌套网格的设计
  16. php 查询功能,php实现查询功能的方法
  17. Linux操作系统下的一些简单网络配置命令
  18. 【封神台】漏洞挖掘XXE wp
  19. 计算机音乐花之舞谱,花之舞钢琴谱
  20. 分级保护测评检查技术方案

热门文章

  1. 给计算机图片文件夹加密码,文件夹加密软件如何给照片文件夹加密
  2. 掌财社寒山:彼得林奇最珍贵的股市投资理念
  3. Debian10安装Chromium浏览器
  4. python字典怎么获得_python怎样获取字典中前十个
  5. i.e.、e.g.、etc.、et al、viz各种缩写都是什么意思?一文搞懂各种缩写
  6. 手机图形计算器matlab,图形计算器Mathlab
  7. 工作用oracle18c还是11g,Oracle 18c体验
  8. 打开组策略 计算机配置,组策略怎么打开? 打开组策略命令与4种方法-电脑教程...
  9. matlab演奏《起风了》代码
  10. 剑指Offer--045-孩子们的游戏(圆圈中最后剩下的数)--约瑟夫环