双网卡配置设置虚拟为一个网卡实现网卡的冗余,其中一个网卡坏掉后网络通讯仍可正常使用,实现网卡层面的负载均衡和高可用性。如今通常的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能作相应的冗余,能够说是好处多多。而通常企业都会使用linux操做系统下自带的网卡绑定模式,固然如今网卡产商也会出一些针对windows操做系统网卡管理软件来作网卡绑定(windows操做系统没有网卡绑定功能 须要第三方支持)。html
网卡工做在混杂(promisc)模式,接收到达网卡的全部数据包,tcpdump工做用的也是混杂模式(promisc),将两块网卡的MAC地址修改成相同接收特定MAC的数据帧,而后把相应的数据帧传送给bond驱动程序进行处理。python
轮询策略(round robin),mode=0,按照设备顺序依次传输数据包,提供负载均衡和容错能力linux
主备策略(active-backup),mode=1,只有主网卡处于工做状态,备网卡处于备用状态,主网卡坏掉后备网卡开始工做,提供容错能力算法
异或策略(load balancing (xor)),mode=2,根据源MAC地址和目的MAC地址进行异或计算的结果来选择传输设备,提供负载均衡和容错能力vim
广播策略(fault-tolerance (broadcast)),mode=3,将全部数据包传输给全部接口经过所有设备来传输全部数据,一个报文会复制两份经过bond下的两个网卡分别发送出去,提供高容错能力windows
动态连接聚合(lacp),mode=4,按照802.3ad协议的聚合自动配置来共享相同的传输速度,网卡带宽最高能够翻倍,链路聚合控制协议(LACP)自动通知交换机聚合哪些端口,须要交换机支持 802.3ad协议,提供容错能力服务器
输出负载均衡模式(transmit load balancing),mode=5,输出负载均衡模式,只有输出实现负载均衡,输入数据时则只选定其中一块网卡接收,须要网卡和驱动支持ethtool命令网络
输入/输出负载均衡模式(adaptive load balancing),mode=6,输入和输出都实现负载均衡,须要网卡和驱动支持ethtool命令并发
环境:系统CentOS 6.7 + 虚拟机 VMware 12负载均衡
至少两块物理网卡(VMware上添加eth0,eth1)
这5个配置文件是:
/etc/sysconfig/network-scripts/ifcfg-eth{0,1}
/etc/sysconfig/network-scripts/ifcfg-bond0
/etc/modprobe.d/dist.conf
/etc/rc.local
提示:先备份好eth0和eth1,再修改这几个文件
如下是修改好的三个网卡配置文件的参数
[root@ant network-scripts]# vimdiff ifcfg-eth0 ifcfg-eth1 ifcfg-bond0
在此文件中添加如下内容:
alias bond0 bonding,表示系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0
miimon=100,表示系统每100ms监测一次链路链接状态,若是有一条线路不通就转入另外一条线
mode=1,表示绑定模式为1
primary=eth0,系统首先eth0做为bond0接口与外界信息的传输接口
在此文件中添加如下内容:
modprobe bonding miimon=100 mode=1
使用ifconfig命令显示,bond0,eth1,eth2物理地址相同,提示三个网卡均经过一个ip主机端口与外界通讯
可是,咱们能够看到,在mode=1的状况下,当前bond0采用eth0通讯,实际的物理网卡地址见下图:
没有丢包,网络连通性可。
[root@ant ~]# tcpdump port 22 -Stn -c 6 tcpdump: WARNING: eth0: no IPv4 address assigned tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes IP 192.168.253.129.ssh > 192.168.253.1.50595: Flags [P.], seq 2999128300:2999128400, ack 2399104519, win 141, length 100 IP 192.168.253.129.ssh > 192.168.253.1.50595: Flags [P.], seq 2999128400:2999128724, ack 2399104519, win 141, length 324 IP 192.168.253.1.50595 > 192.168.253.129.ssh: Flags [.], ack 2999128724, win 254, length 0 IP 192.168.253.129.ssh > 192.168.253.1.50595: Flags [P.], seq 2999128724:2999128888, ack 2399104519, win 141, length 164 IP 192.168.253.129.ssh > 192.168.253.1.50595: Flags [P.], seq 2999128888:2999129148, ack 2399104519, win 141, length 260 IP 192.168.253.1.50595 > 192.168.253.129.ssh: Flags [.], ack 2999129148, win 252, length 0 6 packets captured 7 packets received by filter 0 packets dropped by kernel
一、mode=0(balance-rr)(平衡抡循环策略)
链路负载均衡,增长带宽,支持容错,一条链路故障会自动切换正常链路。交换机须要配置聚合口,思科叫port channel。
特色:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;可是若是一个链接或者会话的数据包从不一样的接口发出的话,中途再通过不一样的链路,在客户端颇有可能会出现数据包无序到达的问题,而无序到达的数据包须要从新要求被发送,这样网络的吞吐量就会降低
二、mode=1(active-backup)(主-备份策略)
这个是主备模式,只有一块网卡是active,另外一块是备用的standby,全部流量都在active链路上处理,交换机配置的是捆绑的话将不能工做,由于交换机往两块网卡发包,有一半包是丢弃的。
特色:只有一个设备处于活动状态,当一个宕掉另外一个立刻由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是惟一的,以免switch(交换机)发生混乱。此模式只提供了容错能力;因而可知此算法的优势是能够提供高网络链接的可用性,可是它的资源利用率较低,只有一个接口处于工做状态,在有 N 个网络接口的状况下,资源利用率为1/N
三、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)(IEEE 802.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(交换机)支持IEEE 802.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(接收负载均衡receive load balance).不须要任何switch(交换机)的支持。接收负载均衡是经过ARP协商实现的.
特色:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load 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从新 激活时,接收流量也要从新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上
当某个链路被从新接上,或者一个新的slave加入到bond中,接收流量在全部当前激活的slave中所有从新分配,经过使用指定的MAC地址给每一个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答 不会被switch(交换机)阻截。
必要条件:
条件1:ethtool支持获取每一个slave的速率;
条件2:底层驱动支持设置某个设备的硬件地址,从而使得老是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每一个bond 中的slave都有一个惟一的硬件地址。若是curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本同样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量。
mode5和mode6不须要交换机端的设置,网卡能自动聚合。mode4须要支持802.3ad。mode0,mode2和mode3理论上须要静态聚合方式。
但实测中mode0能够经过mac地址欺骗的方式在交换机不设置的状况下不太均衡地进行接收。
参考:
https://www.cnblogs.com/st-jun/p/LinuxLoadbalance.html
https://www.linuxidc.com/Linux/2017-11/148410.htm?utm_source=tuicool&utm_medium=referral
https://www.cnblogs.com/luoahong/p/6243065.html