网卡不稳定的罪魁祸首
 
近期新上的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. 如何使用 APM 搞定 PHP 应用的性能优化?

    APM 究竟是什么? 很多人都是第一次听说 APM 的概念,本文主要阐述如何使用 APM 的解决方案来实现 PHP 应用性能的优化.首先先介绍一下 APM (Application Performan ...

  2. 眼见为实(1):C++基本概念在编译器中的实现

    眼见为实(1):C++基本概念在编译器中的实现 对于C++对象模型,相信很多程序员都耳熟能详. 本文试图通过一个简单的例子演示一些C++基本概念在编译器中的实现,以期达到眼见为实的效果. 本文的演示程 ...

  3. [itint5]两数积全为1

    http://www.itint5.com/oj/#18 这一题,首先如果直接去算的话,很容易就超出int或者long的表示范围了.那么要利用%的性质,(num * 10 + 1) % a = 10 ...

  4. Java Web开发 之小张老师总结GET和POST区别

    get和post区别1.传输方式不同,get在request-line中传输(即在URL中传输).post在request-line及 request-body中传输(可认为隐藏传输)2.get传输长 ...

  5. [Unity菜鸟] 术语

    HUD Mozilla  Mozilla基金会,简称Mozilla(缩写MF或MoFo),是为支持和领导开源的Mozilla项目而设立的一个非营利组织. 称作Mozilla公司的子公司,雇佣了一些Mo ...

  6. Fundamental Datastructure

    11988 - Broken Keyboard (a.k.a. Beiju Text) 可以用deque来模拟. #include <iostream> #include <stri ...

  7. Android ListView避免多线程加载一个同一资源

    当我们的ListView中的Item包含图片,而且这些图片是同一资源,我们用多线程去加载图片,这时候可能就发生了这种情况. 比如线程是人,第一个人去做加载图片到缓存的工作,还没做好时第二个人要这同一张 ...

  8. 如何利用python使用libsvm

    一:libsvm包下载与使用:      LIBSVM是台湾大学林智仁(Lin Chih-Jen)副教授等开发设计的一个简单.易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在 ...

  9. Java之获取系统属性

    import java.util.Enumeration; import java.util.Properties; public class Example609 { public static v ...

  10. Mysql DBA 20天速成教程,DBA大纲

    Mysql DBA 20天速成教程 基本知识1.mysql的编译安装2.mysql 第3方存储引擎安装配置方法3.mysql 主流存储引擎(MyISAM/innodb/MEMORY)的特点4.字符串编 ...