Linux配置bond(网卡绑定)
最近需要搭建测试环境,为了保证带宽不成为瓶颈,就需要使用bond来提升网络带宽
1 概念、原理、工作模式
1.1 概念:网卡捆绑
网卡绑定,也称作网卡捆绑。就是将两个或者更多的物理网卡绑定成一个虚拟网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗的讲就是说这几块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路,以达到提供负载均衡或者冗余、增加带宽的目的。
这项技术在sun和cisico中早已存在,被称为trinking(链路聚集)和etherchannel(链路捆绑)技术,在linux的2.4.X及其以上的内核中也采用了这种技术,被称为bonding。
1.2 原理:类比多个pod对外提供一个svc
类比:K8s service,多个pod对外提供一个服务,通过ingress实现负载均衡
什么是bonding需要从网卡的混杂(promise)模式说起。在正常情况下,网卡只接受目的硬件地址(MAC Address)是自身MAC的以太网帧,对于别的数据帧都滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种称为混杂模式,可以接受网络上所有的帧,比如说tcpdump,就是运行在这个模式下。Bonding也是运行在这个模式下,而且修改了驱动程序中的MAC地址,将两块网卡的MAC地址改成相同,可以接受待定MAC的数据帧。送给bond驱动程序处理。
1.3 工作模式(7种)
Bonding通过修改配置文件可以工作在以下七种工作模式:
①mode=0 round-robin 【轮询】
轮询策略(Round-robin policy),模式代号是0。该策略是按照设备顺序依次传输数据包,直到最后一个设备。这种模式提供负载均衡和容错能力。
②mode=1 active-backup 【替补】
活动备份策略(Active-backup policy),模式代号是1。该策略只有一个设备处理数据,当它宕机的时候就会由备份代替,仅提供容错能力。
③mode=2 load balancing (xor)【根据mac地址进行异或操作,来选择处理设备】
异或策略(XOR policy),模式代号是2。该策略是根据MAC地址异或运算的结果来选择传输设备,提供负载均衡和容错能力。
④mode=3 fault-tolerance (broadcast)【广播】
广播策略(Broadcast policy),模式代号是3。该策略通过全部设备来传输所有数据,提供容错能力。
⑤mode=4 lacp 【创建聚合组=》带宽翻倍】
IEEE 802.3ad 动态链接聚合(IEEE 802.3ad Dynamic link aggregation),模式代号是4。该策略通过创建聚合组来共享相同的传输速度,需要交换机也支持 802.3ad 模式,提供容错能力。该模式下,网卡带宽最高可以翻倍(如从1Gbps翻到2Gbps)。
⑥mode=5 transmit load balancing【传输负载均衡】
适配器传输负载均衡(Adaptive transmit load balancing),模式代号是5。该策略是根据当前的负载把发出的数据分给每一个设备,由当前使用的设备处理收到的数据,如果当前正用于接收数据的网卡发生故障,则由其它网卡接管,要求所用的网卡及网卡驱动可通过ethtool命令得到speed信息。本策略的通道联合不需要专用的交换机支持,提供负载均衡和容错能力。
⑦mode=6 adaptive load balancing 【传输+接受负载均衡】
适配器负载均衡(Adaptive load balancing),模式代号是6。该策略在IPV4情况下包含适配器传输负载均衡策略,由ARP协商完成接收的负载,通道联合驱动程序截获ARP在本地系统发送出的请求,用其中一个设备的硬件地址覆盖从属设备的原地址。即在策略6的基础之上,在接收数据的同时实现负载均衡,除要求ethtool命令可得到speed信息外,还要求支持对网卡MAC地址的动态修改功能。
注意事项
注意:
- Mode参数中的0、2、3、4模式要求交换机支持“ports group”功能并能进行相应的设置,例如在cisco中要将所连接的端口设为“port-channel”。
- 如果系统流量不超过单个网卡的带宽,请不要选择使用mode1之外的模式,因为负载均衡需要对流量进行计算,这对系统性能会有所损耗。
- 如果交换机及网卡都确认支持802.3ab,则实现负载均衡时尽量使用模式4以提高系统性能。【拧成一股绳】
2 实战
1. 建立bonding网卡:ifcfg-bond0
#新建bonding网卡配置文件ifcfg-bond0。
vi /etc/sysconfig/network-scripts/ifcfg-bond0
# 配置文件内容如下(IP改为自己的):
#物理设备名称
DEVICE=bond0
#启动时是否激活
ONBOOT=yes
#是否启动协议,可以是none(无须启动协议)、bootp(使用bootp协议)、dhcp(使用dhcp协议)
BOOTPROTO=none
#IP地址
IPADDR=192.168.100.21
#网络掩码
NETMASK=255.255.255.0
#是否允许非root用户控制该设备
USERCTL=no
#网卡的类型
TYPE=Ethernet
#是否在该网卡启用IPV6的功能
IPV6INIT=no
#是否运行网卡在启动时向DHCP服务器查询DNS信息,并自动覆盖/etc/resolv.conf配置文件
PEERDNS=yes
2. 配置开机自动加载bonding驱动
修改内核模块开机自动加载文件/etc/modprobe.conf(根据linux内核版本可能会存在不同,旧的版本可能是modules.conf),以使内核模块开机自动加载bonding驱动程序。
vi /etc/modprobe.conf
# 在文件最后加上:alias bond0 bonding
#miimon参数:指定网卡故障时切换时间间隔时间,以ms为单位
#mode参数:bonding模式
options bond0 miimon=100 mode=5
3. 修改配被绑定网卡配置
改所有被绑定了的网卡的配置文件(以eth2为例)
- 比如我要把ens11f0和ens1f0这两张网卡绑定到bond0,那么这两个网卡的配置文件都需要修改。帮几张修改几张
vi /etc/sysconfig/network-scripts/ifcfg-eth0
#bonding到bond0,使该网络适配器成为bond0的附属设备
DEVICE=eth2
BOOTPROTO=none
ONBOOT=yes
# 将该网卡绑定到bond0
MASTER=bond0
SLAVE=yes
USERCTL=no
TYPE=Ethernet
#原MAC地址最好不用删除,但要注释掉
#HWADDR=00:1B:21:64:32:24
4. 启动bonding
# 启动bond0
Ifup bond0
5. 验证是否绑定成功:ifconfig查看MAC
ifconfig,查看bond0与被绑定网卡的MAC地址是否相同
- 比如:如下我将eth2、eth3绑定到bond0
- bond0 Link encap:Ethernet HWaddr
00:15:17:C4:8B:E0
inet addr:192.168.110.82 Bcast:192.168.110.255 Mask:255.255.255.0
inet6 addr: fe80::215:17ff:fec4:8be0/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:129687 errors:0 dropped:0 overruns:0 frame:0
TX packets:2534730 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:11516581 (10.9 MiB) TX bytes:3449545971 (3.2 GiB)- eth2 Link encap:Ethernet HWaddr
00:15:17:C4:8B:E0
inet6 addr: fe80::215:17ff:fec4:8be0/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:5574 errors:0 dropped:0 overruns:0 frame:0
TX packets:634713 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:410305 (400.6 KiB) TX bytes:862488772 (822.5 MiB)
Base address:0x5020 Memory:b9960000-b9980000- eth3 Link encap:Ethernet HWaddr
00:15:17:C4:8B:E0
inet6 addr: fe80::215:17ff:fec4:8be0/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:2016 errors:0 dropped:0 overruns:0 frame:0
TX packets:633328 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:167005 (163.0 KiB) TX bytes:862342651 (822.3 MiB)
Base address:0x5000 Memory:b9920000-b9940000
再比如:我将网卡ensssf0np0、ens33f1np1绑定到bond0
参考:https://blog.csdn.net/lqnbfx/article/details/103390268