原理简介
在这介绍的Linux多网卡绑定实现就是使用多块网卡虚拟成为一块网卡,使这个聚合起来的设备看起来是一个单独的以太网接口设 备,通俗点讲就是多块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。其实这项技术早在Sun和Cisco上已存在并实施过, 被称为Trunking和Etherchannel技术,现在,在Linux的2.4.x的内核中也采用了这种技术,被称为bonding。
bonding技术的最早应用是在集群——beowulf上,为了提高集群节点间的数据传输而设计的。下面分析一下bonding 的原理,什么 是bonding?需要我们从网卡的混(promisc)模式说起。我们知道,在正常情况下,网卡只接收目的硬件地(MACAddress)是自身Mac的以太网帧,对于别的数据帧都滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂promisc的模式,它可以接收 网络上所有的帧,比如说cpdump,就是运行在这个模式下。bonding也是运行在这个模式下,而且修改了驱动程序中的Mac地址,将 多块网卡的Mac地址改成相同的,可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。 绑定的前提条件:芯片组型号相同,而且网卡应该具备自己独立的BIOS芯片。
七种bond模式说明:
特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性。
第七种模式:mod=6,即:Adaptive load balancing(适配器适应性负载均衡) 特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何 switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond 中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。
模式一的配置参数及截图
修改内核文件
[root@localhost network-scripts]# vim ifcfg-eth0
[root@localhost network-scripts]# vim ifcfg-eth1
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-bond0
[root@localhost network-scripts]# vim ifcfg-bond0
编辑模块配置文件
[root@localhost network-scripts]# vim /etc/modprobe.conf
把eth0 eth1两网卡绑定到bond0
[root@localhost network-scripts]# vim /etc/rc.local
重起系统
查看网卡信息
[root@localhost ~]# ifconfig |less
查看通信情况
ping10.106.109.2 -t
内核信息
[root@localhost ~]# cat /proc/net/bonding/bond0
测试结果,
断开主网卡,丢一包马上又重新ping通
此时网卡绑定情况
[root@localhost ~]# cat /proc/net/bonding/bond0
模式0配置待续