现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景。linux操作系统下自带的网卡绑定模式,Linux bonding驱动提供了一个把多个网络接口设备捆绑为单个网络接口设置来使用,用于网络负载均衡及网络冗余。当然现在网卡产商也会出一些针对windows操作系统网卡管理软件来做网卡绑定(windows操作系统没有网卡绑定功能 需要第三方支持)。
一、 Bonding的应用
1、 网络负载均衡
对于bonding的网络负载均衡是我们在文件服务器中常用到的,比如把三块网卡,当做一块来用,解决一个IP地址,流量过大,服务器网络压力过大的问题。如果在内网中,文件服务器为了管理和应用上的方便,大多是用同一个IP地址。对于一个百M的本地网络来说,文件服务器在多个用户同时使用的情况下,网络压力是极大的,为了解决同一个IP地址,突破流量的限制,毕竟网线和网卡对数据的吞吐量是有限制的。如果在有限的资源的情况下,实现网络负载均衡,最好的办法就是bonding 。
2、 网络冗余
对于服务器来说,网络设备的稳定也是比较重要的,特别是网卡。大多通过硬件设备的冗余来提供服务器的可靠性和安全性,比如电源。bonding 也能为网卡提供冗余的支持。把网个网卡绑定到一个IP地址,当一块网卡发生物理性损坏的情况下,另一块网卡也能提供正常的服务。
二、 Bonding的原理
什么是bonding需要从网卡的混杂(promisc)模式说起。我们知道,在正常情况下,网卡只接收目的硬件地址(MAC Address)是自身Mac的以太网帧,对于别的数据帧都滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂promisc的模式,可以接 收网络上所有的帧,比如说tcpdump,就是运行在这个模式下。bonding也运行在这个模式下,而且修改了驱动程序中的mac地址,将两块网卡的 Mac地址改成相同,可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。
三、 Bonding的模式
linux有七种网卡绑定模式:
模式代号 | 模式名称 | 模式方式 | 说明 |
0 | (balance-rr) Round-robin policy | 轮询策略 | 该策略是按照设备顺序依次传输数据包,直到最后一个设备。这种模式提供负载均衡和容错能力。 |
1 | (active-backup) Active-backup policy | 主备策略 | 该策略只有一个设备处于活动状态。 一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见的。 此模式提供了容错能力。 |
2 | (balance-xor) XOR policy | 异或策略 | 该策略是根据MAC地址异或运算的结果来选择传输设备,提供负载均衡和容错能力。 |
3 | Broadcast policy | 广播策略 | 该策略将所有数据包传输给所有接口通过全部设备来传输所有数据,提供容错能力。 |
4 | (802.3ad) IEEE 802.3ad Dynamic link aggregation | 动态链接聚合 | 该策略通过创建聚合组来共享相同的传输速度,需要交换机也支持 802.3ad 模式,提供容错能力。 |
5 | (balance-tlb) Adaptive transmit load balancing | 适配器传输负载均衡 | 该策略是根据当前的负载把发出的数据分给每一个设备,由当前使用的设备处理收到的数据。本策略的通道联合不需要专用的交换机支持,提供负载均衡和容错能力。
|
6 | (balance-alb) Adaptive load balancing | 适配器负载均衡 | 该策略在IPV4情况下包含适配器传输负载均衡策略,由ARP协商完成接收的负载,通道联合驱动程序截获ARP在本地系统发送出的请求,用其中一个设备的硬件地址覆盖从属设备的原地址。 |
常用的是模式0和模式1,通常使用模式0。
mode=1:在主备模式下,只有主网卡eth0工作,eth1作为备份网卡是不工作的,只有当一个网络接口失效时(例如交换机掉电等),为了不会出现网络中断,系统会按照配置指定的网卡顺序启动工作,保证机器仍能对外服务,起到了失效保护功能。
mode=0:在负载均衡模式下,两块网卡都工作,提供两倍带宽。
四、 Bonding的配置
1、选择2个自己需要的网口,查看有哪些网口
[root@studying ~]# ifconfig -a
2、编辑网口的配置文件
[root@studying ~]# cd /etc/sysconfig/network-scripts
[root@studying network-scripts]# cat ifcfg-eth0
DEVICE=eth0 #网口名eth0
TYPE=Ethernet #以太网接口
ONBOOT=yes #LINUX在启动时激活该网口
BOOTPROTO=none #使用什么协议激活网口
none表示不使用任何协议
static表示设置静态IP
dhcp表示动态获取IP
MASTER=bond0 #指定虚拟网口的名字(主人)
SLAVE=yes #备用(从设备)
[root@studying network-scripts]# cat ifcfg-eth1
DEVICE=eth1 #网口名eth1
TYPE=Ethernet #以太网接口
ONBOOT=yes #LINUX在启动时激活该网口
BOOTPROTO=none #使用什么协议激活网口
none表示不使用任何协议
static表示设置静态IP
dhcp表示动态获取IP
MASTER=bond0 #指定虚拟网口的名字
SLAVE=yes #备用
备注:eth0、eth1的MASTER(主人)是bond0,本身是属于从设备作为bond0的SLAVE(备用)
[root@studying network-scripts]# cat ifcfg-bond0
DEVICE=bond0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.11.99
NETMASK=255.255.0.0
GATEWAY=172.16.1.1
4、关闭NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
5、加载bond模块
modprobe bonding miimon=100 mode=0
6、配置bonding
[root@studying network-scripts]# vim /etc/modprobe.d/bond.conf
末尾增加以下两行
alias bond0 bonding
options bond0 miimon=100 mode=0
说明:miimon是用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,常用的为0,1两种。mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份. bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用,Bond配置完成。
7、在/etc/rc.d/rc.local文件中加入如下语句,是系统启动自动运行
ifenslave bond0 eth0 eth1
#route add -net 172.16.0.0 netmask 255.255.0.0 bond0---如果有需要添加该路由
5、reboot重启
6、如果查看当前哪个网口是主用网口
[root@studying ~]# cat /proc/net/bonding/bond0