网卡不稳定的罪魁祸首
 
近期新上的DB SERVER服务器,在压测中发现网卡很不稳定,压力测试刚刚进行十几分钟后,服务器反应就变得非常慢,PING的时候经常丢包而且SSH连接也时断时 续。刚开始以为是高并发时导致的db server无响应,可以看了一下CPU、内存和硬盘IO,发现都没有达到较高值,甚至比我们的预警值低很多,而且监测也表明DB服务器剩余资源很充裕! 真是比较奇怪,那么引起网卡不稳定的原因到底是什么呢?
向相关工程师了解了一下情况,知道这台DB服务器是双机热备中的一台服务器,前几天刚做的2组千兆网卡绑定。据工程师说绑定前也做过压测,没有出现这样的问题。难道是绑定设置的哪个环节出问题了?于是决定从千兆网卡绑定进行详细检查。
一、 检查ifcfg-bond0和ifcfg-bond1文件
#cat  /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0  www.2cto.com  
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  www.2cto.com  
  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  www.2cto.com  
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.所以我们还应检查一下这个文件。
  www.2cto.com  
四、检查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了。  www.2cto.com  
我们可以检查一下各网卡的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   www.2cto.com  
          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双网卡的绑定是一个比较具体的操作工作,在配置当中我们不仅要熟悉了解它的原理,更要在部署实施时仔细认真,一个疏忽就会造成网络的不稳定和节点的瘫痪。

inter的更多相关文章

  1. Inter Core CPU 型号的尾字母含义

    Inter Core CPU 型号的尾字母含义: M:表示移动处理器(Mobile Processor):QM:四核移动处理器(Quad Mobile Processor):U:超低电压处理器(Ult ...

  2. mybatis报错Mapped Statements collection does not contain value for com.inter.IOper

    首页 > 精品文库 > mybatis报错Mapped Statements collection does not contain value for com.inter.IOper m ...

  3. I2S (Inter—IC Sound) 总线

    I2S I2S(Inter—IC Sound)总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛应用于各种多 ...

  4. Inter IPP 跟 Microsoft V100编译器区别

    最近做项目用了两个编译器,由于是一种精度的算法计算,对计算的精度要求非常高,同时都用的float型,发现inter的结果比vs的结果好许多.但是不知道是什么原因,最后测试发现,是两个编译器的问题.   ...

  5. x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  6. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  7. memory prefix inter,intra,intro,iso out 5

    1● inter 在~之间:相互   2● intra 3● iso 等 同   4● intro 向内,在内,内部  

  8. VMware设置inter共享连接出现空值

    1.打开“网络和共享中心”选择“VMware Virtual Ethernet Adapter for VMnet8”网卡右键属性,选择VMware Bridge Protocol,同时设置ip自动获 ...

  9. Inter exchange Client Address Protocol (ICAP)- 互换客户端地址协议

    https://github.com/ethereum/wiki/wiki/Inter-exchange-Client-Address-Protocol-(ICAP) Transferring fun ...

  10. Inter网关做Team的方法

    1.到Inter官网上找到相关驱动程序 2.在安装过程中,要求勾选高级网络 3.驱动安装完成后,打开网卡的属性窗口,在“分组”选项卡中,勾中,并输入Team名称 4.选择需要做Team的网卡 5.选择 ...

随机推荐

  1. poj 3440 Coin Toss 概率问题

    这题主要是推导数学公式!!! 将概率问题转化为圆心所在的面积! 代码如下: #include<iostream> #include<stdio.h> #include<a ...

  2. linux压缩文件(夹) zip uzip命令的用法

    压缩文件(夹) # 压缩列举的文件,格式如下: zip 压缩包名称 文件1 文件2 文件3 ... # 压缩test.txt, a.out文件,并取名为abc.zip $ zip abc.zip te ...

  3. UR #13 Ernd

    考试的时候没有注意到可以将(a,b)放在二维平面上之后旋转坐标系,使得转移变成树状数组二维偏序 这样就算我想出来了第二个转移的斜率优化也没有什么卵用啊(摔西瓜 设g(i)表示当前站在第i个水果下面且第 ...

  4. UR #13 Yist

    第一次打UR,打了一个半小时就弃疗了QAQ 这是我唯一一道考试的时候做出来的题目,其他两道连暴力都懒得写了 很容易发现对于每个要删除的点 我们找到左边第一个比他小的不用删除的点,右边第一个比他小的不用 ...

  5. tinyXml在linux下的使用

    [下载] 一.下载 xml 软件包:tinyxml_2_6_2.zipTinyxml(轻量级 c++)下载地址:http://sourceforge.net/projects/tinyxml/?sou ...

  6. 选择排序的openMP实现

    // test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include < ...

  7. 影响pogo pin连接器使用寿命的因素

    精细化.安装简易化及使用寿命长是现在数码电子产品的趋势发展,pogo pin连接器体积小而且弹簧伸缩式设计,可以更好的缩小数码电子产品的尺寸并且连接安装更加的简单方便,因此pogo pin连接器得到了 ...

  8. JS中访问对象的属性

    方式一: 对象名.属性名;   方式二: 对象名["属性名"];   ★注意:方式二中,属性名以字符串的形式出现在方括号中,这意味着通过方式二访问属性的话,可以实现“动态访问对象的 ...

  9. Android 签名(7)签名常见问题,debug签名和release签名的区别等

    一般在安装时提示出错:INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 1) 两个应用,名字相同,签名不同 2) 升级时前一版本签名,后一版本没签名 3) ...

  10. tomcat+oracle连接池

    tomcat 5.5.23 oracle 10g 全局配置 一.tomcat目录\common\lib下添加包ojdbc14.jar. 二.tomcat目录\conf\server.xml的<G ...