Linux上双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个结合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。其实这项技术在Sun和Cisco中早已存在,被称为Trunking和Etherchannel 技术,在Linux的2.4.x的内核中也采用这这种技术,被称为bonding。
bonding技术的最早应用是在集群——beowulf上,为了提高集群节点间的数据传输而设计的。下面我们讨论一下bonding 的原理,什么是bonding需要从网卡的混杂(promisc)模式说起。我们知道,在正常情况下,网卡只接收目的硬件地址(MAC Address)是自身Mac的以太网帧,对于别的数据帧都滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂promisc的模式,可以接收网络上所有的帧,比如说tcpdump,就是运行在这个模式下。bonding也运行在这个模式下,而且修改了驱动程序中的mac地址,将两块网卡的 Mac地址改成相同,可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。
直接给两块网卡设置同一IP地址是不可能的。Kernels 2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。
二、bonding配置
1、编辑虚拟网络接口配置文件,指定网卡IP
假设eth0是对外服务的网卡,已经调试好网络;eth1是希望与eth0同时对外提供服务的网卡。
[root@jw-masterdb ~]# cd /etc/sysconfig/network-scripts/
[root@jw-masterdb network-scripts]# cp ifcfg-eht0 ifcfg-bond0
将ifcfg-bon0的信息修改大致如下:
[root@jw-masterdb network-scripts]# vim ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
IPADDR=10.3.3.120
NETMASK=255.255.255.0
ONBOOT=yes
TAPE=Ethernet
GATEWAY=10.3.3.1
USERCTL=no
2、配置真实的网卡
修改ifcfg-eth0如下:
[root@jw-masterdb network-scripts]# vim ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
SLAVE=yes
MASTER=bond0
修改ifcfg-eth1如下:
[root@jw-masterdb network-scripts]# vim ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes