如何查看机器中的网卡bonding情况
查看是否存在bond网卡:
ifconfig
如何发现有带有 bondX
名字的网卡,那么说明本机是存在网卡bonding情况的。
然后查看网卡bonding的情况:
cat /proc/net/bonding/bond1
cat这个节点会输出网络bonding的模式,已经由哪些物理网卡作为bonding slave。
查看bond网卡配置:
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/ifcfg-bond1
如何配置网卡bonding
查看内核是否支持网卡bonding功能:
modinfo bonding | more
确认是否加载了内核网卡bonding功能module,如果没有需要手动编译module并且加载。然后修改
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/ifcfg-bond1
各个网卡的配置,详细的不写了,网上很多范例。
bond需要设置slave网卡为混杂模式吗?
搜索到网络上很多文章,有一部分介绍提到网卡的混杂模式,我第一次看文章时,想当然的理解为,为了保证master能够接收到对应MAC地址的网络报文,需要slave网卡设置为混杂模式,这样即使slave网卡MAC地址和Master设置的MAC不同,依然会保证Slave可以接收到数据,并传送给Master。然而实际上这根本是不对的,如果把Slave网卡都设置为混杂模式,那么所有经过网卡的数据包都要做处理,对于一个云上的大流量服务器来说,这得有多大的处理量,这种方式无疑会降低系统的性能和处理效率,肯定是不可取的。
实际上对于一个物理网卡来说,它的MAC地址是可以修改的,当然出厂时网卡中已经存在一个固定的HW ADDR,如果在系统中不做修改,那么该固定 HW ADDR 就会成为网络中使用的MAC地址。
那么在bond架构下(这里针对同时工作的mode,而不是主备mode)就需要修改对应的slave物理网卡的MAC地址为相同的值,最终情况为bond master网卡、slave网卡1、slave网卡2三者的MAC地址都相同。可以通过 cat /proc/net/bonding/bond1
查看网卡的地址情况:
system mac address: a4:91:2b:5d:f6:4b
Permanent HW addr: a4:bc:2d:3d:e6:4b
如上所示,对于物理网卡,会存在两个信息,第一个表示MAC,它会和bond网卡的MAC相同,第二个就是固定 HW ADDR 地址。
bond模式
bonding的模式:0-6,即:7种模式
#define BOND_MODE_ROUNDROBIN 0
#define BOND_MODE_ACTIVEBACKUP 1
#define BOND_MODE_XOR 2
#define BOND_MODE_BROADCAST 3
#define BOND_MODE_8023AD 4
#define BOND_MODE_TLB 5
#define BOND_MODE_ALB 6 /* TLB + RLB (receive load balancing) */
-
Mode 0(balance-rr): Round-robin policy
子网卡依次传输数据包, 此模式提供负载平衡和容错能力;同一个会话不同的网卡传输数据在客户端很有可能会出现数据包乱序到达的问题,因此可能会让网络的吞吐量下降一些。 -
Mode 1(active-backup): Active-backup policy
主备模式,只有一个设备处于活动状态,出现异常后由另一个顶替。MAC地址是外部可见得,所有子设备MAC地址和Bond设备一致,以避免交换机发生混乱。此模式只提供了容错能力;此模式优点是提高网络可靠性,缺点是降低资源利用率,只有一个接口处于工作状态,资源利用率为1/n。 -
Mode 2(balance-xor): XOR policy
基于指定的HASH策略传输数据包。默认的哈希策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过设置xmit_hash_policy指定,此模式提供负载平衡和容错能力。 -
Mode 3: broadcast
在每个slave接口上传输每个数据包,提供强大的容错能力。 -
Mode 4(802.3ad): IEEE 802.3ad Dynamic link aggregation
创建一个聚合组,共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。外出流量的slave选举是基于hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要交换机支持 -
Mode 5(balance-tlb): Adaptive transmit load balancing
不需要交换机进行特殊配置。在每个slave上根据当前的负载分配外出流量。如果正在处理数据的slave出故障了,另一个slave接管失败的slave的MAC地址。 -
Mode 6(balance-alb): Adaptive load balancing
不需要交换机进行特殊配置,该模式包含了balance-tlb模式的优点,同时加上针对IPV4流量的接收负载均衡。
MAC地址配置
除了TLB和ALB模式之外,其他的模式中所有的子设备MAC地址配置应该都与bond设备MAC地址相同,那么我们知道两个MAC地址相同的设备是不能处于同一个交换机下的子网的,这会带来MAC地址冲突,使这两个设备的网络异常,由于MAC地址相同,交换机可能会把需要转发到PORT1上的包转发到PORT2上,或者把PORT2的包转发到PORT1上。
那么对于一个bond的网卡,两个子网卡是否可以放于同一个交换机子网中呢?
在bonding场景下是合情合理的,由于多个网口都属于同一个host,因此不管交换机把指定MAC地址的包从哪一个口传递给bond slave设备,最终都会汇聚到bond驱动中,不但不会出现包的丢失,还扩大了网络的带宽。
动态添加或者删除slave
echo +eth0 > /sys/class/net/bond0/bonding/slaves
echo -eth0 > /sys/class/net/bond0/bonding/slaves
https://www.kernel.org/doc/Documentation/networking/bonding.txt