详解Linux双网卡绑定之bond0
1、什么是bond?
网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels 2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。
2、实现原理:
网卡工作在混杂(promisc)模式,接收到达网卡的所有数据包,tcpdump工作用的也是混杂模式(promisc),将两块网卡的 MAC地址修改为相同接收特定MAC的数据帧,然后把相应的数据帧传送给bond驱动程序进行处理。
3、通过以下命令确定内核是否支持 bonding:
[root@lixin network-scripts]#cat /boot/config-2.6.32-573.el6.x86_64 |grep -i bonding
CONFIG_BONDING=m
[root@lixin network-scripts]#
4、bond的模式
bond的模式常用的有两种:
mode=0(balance-rr)
表示负载分担round-robin,并且是轮询的方式比如第一个包走eth0,第二个包走eth1,直到数据包发送完毕。
优点:流量提高一倍
缺点:需要接入交换机做端口聚合,否则可能无法使用
mode=1(active-backup)
表示主备模式,即同时只有1块网卡在工作。
优点:冗余性高
缺点:链路利用率低,两块网卡只有1块在工作
bond其他模式:
mode=2(balance-xor)(平衡策略)
表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy,需要交换机配置port channel)
特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力
mode=3(broadcast)(广播策略)
表示所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。需要和交换机的聚合强制不协商方式配合。
特点:在每个slave接口上传输每个数据包,此模式提供了容错能力
mode=4(802.3ad)(IEEE802.3ad 动态链接聚合)
表示支持802.3ad协议和交换机的聚合LACP方式配合(需要xmit_hash_policy).标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。
特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性。
必要条件:
条件1:ethtool支持获取每个slave的速率和双工设定
条件2:switch(交换机)支持IEEE802.3ad Dynamic link aggregation
条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式
mode=5(balance-tlb)(适配器传输负载均衡)
根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。
特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
必要条件:
ethtool支持获取每个slave的速率
mode=6(balance-alb)(适配器适应性负载均衡)
在5的tlb基础上增加了rlb(接收负载均衡receiveload balance).不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的.
特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receiveload balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新(ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的slave加入到bond中时,或者某个未激活的slave重新激活时,接收流量也要重新分布。接收的负载被顺序地分布(roundrobin)在bond中最高速的slave上当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答不会被switch(交换机)阻截。
bond模式小结:
mode5和mode6不需要交换机端的设置,网卡能自动聚合。mode4需要支持802.3ad。mode0,mode2和mode3理论上需要静态聚合方式。
3 配置bond
测试环境:
[root@lixin ~]# cat/etc/redhat-release
CentOS release 6.7 (Final)
[root@lixin ~]# uname -r
2.6.32-573.el6.x86_64
[root@lixin~]#
1、配置物理网卡
[root@lixin network-scripts]#cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes //可以没有此字段,就需要开机执行ifenslave bond0 eth0 eth1命令了。
[root@lixin network-scripts]#
[root@lixin network-scripts]#cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@lixin network-scripts]#
2、配置逻辑网卡bind0
[root@lixin network-scripts]#cat ifcfg-bond0 //需要我们手工创建
DEVICE=bond0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.10
NETMASK=255.255.255.0
DNS2=4.4.4.4
GATEWAY=10.0.0.2
DNS1=10.0.0.2
[root@lixin network-scripts]#
由于没有这个配置文件我们可以使用拷贝一个ifcfg-eth1来用:cp ifcfg-{eth0,bond1}
3、加载模块,让系统支持bonding
[root@lixin ~]# cat/etc/modprobe.conf //不存在的话,手动创建(也可以放在modprobe.d下面)
alias bond0 bonding
options bond0 miimon=100 mode=0
[root@lixin ~]#
配置bond0的链路检查时间为100ms,模式为0。
注意:
linux网卡bonging的备份模式实验在真实机器上做完全没问题(前提是linux内核支持),但是在vmware workstation虚拟中做就会出现适配器不具有网络连接的现象。
配置完成后出现适配器不具有网络连接的问题,但是bond0能够正常启动也能够正常使用,只不过没有起到备份模式的效果。当使用ifdown eth0后,网络出现不通现象。
内核文档中有说明:bond0获取mac地址有两种方式,一种是从第一个活跃网卡中获取mac地址,然后其余的SLAVE网卡的mac地址都使用该mac地址;另一种是使用fail_over_mac参数,是bond0使用当前活跃网卡的mac地址,mac地址或者活跃网卡的转换而变。
既然vmware workstation不支持第一种获取mac地址的方式,那么可以使用fail_over_mac=1参数,所以这里我们添加fail_over_mac=1参数
[root@lixin etc]# cat/etc/modprobe.d/modprobe.conf
alias bond0 bonding
options bond0 miimon=100 mode=0fail_over_mac=1
[root@lixin etc]#
4、加载bond module
[root@lixin etc]# modprobe bonding
5、查看绑定结果
[root@lixin etc]# cat/proc/net/bonding/bond0
Ethernet Channel BondingDriver: v3.7.1 (April 27, 2011)
Bonding Mode: load balancing(round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr:00:50:56:28:7f:51
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr:00:50:56:29:9b:da
Slave queue ID: 0
[root@lixin etc]#
4 测试bond
由于使用的是mode=0,负载均衡的方式,这时我们ping百度,然后断开一个网卡,此时ping不会中断。
[root@lixin etc]# pingbaidu.com
PING baidu.com (111.13.101.208)56(84) bytes of data.
64 bytes from 111.13.101.208:icmp_seq=1 ttl=128 time=10.6 ms
64 bytes from 111.13.101.208:icmp_seq=2 ttl=128 time=9.05 ms
64 bytes from 111.13.101.208:icmp_seq=3 ttl=128 time=11.7 ms
64 bytes from 111.13.101.208:icmp_seq=4 ttl=128 time=7.93 ms
64 bytes from 111.13.101.208:icmp_seq=5 ttl=128 time=9.50 ms
64 bytes from 111.13.101.208:icmp_seq=6 ttl=128 time=7.17 ms
64 bytes from 111.13.101.208:icmp_seq=7 ttl=128 time=21.2 ms
64 bytes from 111.13.101.208:icmp_seq=8 ttl=128 time=7.46 ms
64 bytes from 111.13.101.208:icmp_seq=9 ttl=128 time=7.82 ms
64 bytes from 111.13.101.208:icmp_seq=10 ttl=128 time=8.15 ms
64 bytes from 111.13.101.208:icmp_seq=11 ttl=128 time=6.89 ms
64 bytes from 111.13.101.208: icmp_seq=12ttl=128 time=8.33 ms
64 bytes from 111.13.101.208:icmp_seq=13 ttl=128 time=8.65 ms
64 bytes from 111.13.101.208:icmp_seq=14 ttl=128 time=7.16 ms
64 bytes from 111.13.101.208:icmp_seq=15 ttl=128 time=9.31 ms
64 bytes from 111.13.101.208:icmp_seq=16 ttl=128 time=10.5 ms
64 bytes from 111.13.101.208:icmp_seq=17 ttl=128 time=7.61 ms
64 bytes from 111.13.101.208:icmp_seq=18 ttl=128 time=10.2 ms
^C
--- baidu.com ping statistics---
18 packets transmitted, 18received, 0% packet loss, time 17443ms
rtt min/avg/max/mdev = 6.899/9.417/21.254/3.170 ms
//用另一个终端手动关闭eth0网卡,ping并没有中断
[root@lixin etc]# !ca
cat /proc/net/bonding/bond0
Ethernet Channel BondingDriver: v3.7.1 (April 27, 2011)
Bonding Mode: load balancing(round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr:00:50:56:28:7f:51
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr:00:50:56:29:9b:da
Slave queue ID: 0
[root@lixin etc]#
//查看bond0状态,发现eth0,down了,但是bond正常
详解Linux双网卡绑定之bond0的更多相关文章
- Linux双网卡绑定bond详解--单网卡绑定多个IP
Linux双网卡绑定bond详解 1 什么是bond 网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术.Kernels 2.4.12及 ...
- Linux 双网卡绑定
Linux 双网卡绑定 Linux 双网卡绑定双网卡绑定的常用模式:mode1:active-backup 模式,即主备模式.mode0:round-broin 模式,即负载均衡模式(需要交换机配置聚 ...
- Linux 双网卡绑定技术
bond技术是在linux2.4以后加入内核. 一般步骤是1.把bonding模块加入内核, 2 编辑要绑定的网卡设置,去除地址设定 3 添加bond设备,设置地址等配置 4 重启网络 5 在交换机 ...
- Linux双网卡绑定
Linux双网卡绑定 作者:Eric 微信:loveoracle11g eth0和eth1绑定为bond0 [root@rac-node1 ~]# cat /etc/sysconfig/network ...
- Linux双网卡绑定配置
Linux双网卡绑定配置 环境介绍 Linux Redhat 6.5.4张网卡 需求 4张网卡两两绑定,4张网卡分别是eth ...
- Linux 双网卡绑定及Bridge
Linux 双网卡绑定及Bridge 阅读(5,202) 一:linux操作系统下双网卡绑定有七种模式.现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多. ...
- cnetos 网卡绑定 eth0+eth1做双网卡绑定到bond0
1.网卡绑定:eth0+eth1做双网卡绑定到bond0 二.网络配置 网卡绑定1./etc/sysconfig/network-scripts/目录下建立ifcfg-bond0文件,内容如下DEVI ...
- Linux双网卡绑定和解除绑定的实现
双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作.根据交换机可支持的功能不 ...
- Linux双网卡绑定和解除
转载双网卡绑定和解除 一定要在服务管理中关闭NetworkManager服务并禁用自动启动,因为NetworkManager服务是实时生效的,一旦设置错,管理员就得回到机房接显示器配置网络连接. 以 ...
随机推荐
- Chapter 5 Blood Type——14
"You're wrong." His voice was almost inaudible. “你错了.” 他的声音几乎听不见 He looked down, stealing ...
- centos7安装xfce桌面
用了centos自带的gnome桌面 太重了 启动超慢 内存占用近2G 因此打算换一个轻量级的桌面xfce 先安装桌面协议yum groupinstall "X Window system& ...
- opensuse使用zypper安装软件
安装软件(opensuse) opensuse 通过zypper可以方便的进行软件管理,类似centos的yum 软件. 命令参考 软件包操作 搜索软件 zypper search package 安 ...
- Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字
Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...
- eclipse svn插件卸载 重新安装 Subclipse卸载安装 The project was not built since its build path is incomplete This client is too old to work with the working copy at
安装插件的原则就是,要按照规则,插件与本地的svn版本要一致, 这样子本地和eclipse上面就可以无缝使用,不会出现问题 1.卸载eclipse svn插件 2,安装新版的svn插件 2.1,下载 ...
- springboot情操陶冶-@ConfigurationProperties注解解析
承接前文springboot情操陶冶-@Configuration注解解析,本文将在前文的基础上阐述@ConfigurationProperties注解的使用 @ConfigurationProper ...
- mysql数据插入前判断是否存在
今天在对一些抓取到的数据做插入的时候,因为使用了定时器,每间隔几分钟会抓取一次,导致很多数据插入的是重复数据,为了解决这个问题, 一般是在插入之前先通过一个标识去查询表数据看是否已经有了,没有再执行插 ...
- JQuery——选择器
简单介绍一下什么是选择器:选择器是CSS样式中用来选择页面元素的一个特有的方式,而JQuery的选择器同样也是如此,JQuery的选择器简单的分为一下这几种:1.常用的CSS选择器 标签选择器:E{ ...
- .NET CORE 使用Session报错:Session has not been configured for this application or request
报错信息:Session has not been configured for this application or request 解决方案:在Startup.cs文件中的Configure方法 ...
- 【设计原则和编程技巧】单一职责原则 (Single Responsibility Principle, SRP)
单一职责原则 (Single Responsibility Principle, SRP) 单一职责原则在设计模式中常被定义为“一个类应该只有一个发生变化的原因”,若我们有两个动机去改写一个方法,那这 ...