Linux双网卡绑定一个IP地址,实质工作就是使用两块网卡虚拟为一块,使用同一个IP地址,是我们能够得到更好的更快的服务。其实这项技术在Sun和Cisco中早已存在,被称为Trunking和Etherchannel技术,在Linux的2.4.x的内核中也采用这这种技术,被称为bonding。本文以Debian为例介绍这个技术的实现。
bonding的原理
在正常情况下,网卡只接收目的硬件地址(MAC Address)是自身Mac的以太网帧,对于别的数据帧都过滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂的模式,可以接收网络上所有的帧,比如说很多用物抓包工具就需要让网卡运行在这个模式下。bonding也运行在这个模式下,而且修改了驱动程序中的MAC地址,将两块网卡的MAC地址改成相同,可以接收特定MAC的数据帧。然后把相应的数据帧传送给bond驱动程序处理。
bonding模块工作方式
bonding有0-6七种模式,常用的工作方式为0、1、6三种:
mode=0:表示load balancing(round-robin)为负载均衡模式(两块网卡都要工作),但需要交换机支持并需要在交换机上进行相应配置。
mode=1:表示fault-tolerance(active-backup)提供冗余功能,工作方式是主务的方式,也就是说默认情况下只有一块网卡工作,另一块做备份。
mode=6:表示load balancing(round-robin)为负载均衡模式(两块网卡都要工作),不需要交换机支持。
bonding配置
使用如下命令安装bonding。
srv10:~# apt-get install ifenslave
使用如下命令让系统开机自动加载模块bonding。其中miimon参数是用于进行链路监测的。比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示bonding工作模式。
srv10:~# sh -c "echo bonding mode=6 miimon=100 >> /etc/modules"
修改/etc/network/interfaces文件为如下内容。
auto lo iface lo inet loopback auto bond0 iface bond0 inet static#虚拟网卡的TCP/IP配置 address 192.168.159.100 netmask 255.255.255.0 gateway 192.168.159.1 dns-nameservers 192.168.159.1 post-up ifenslave bond0 eth0 eth1 pre-down ifenslave -d bond0 eth0 eth1
如果在安装ifenslave后没有重新启动计算机,必须手动加载bonding模块。
srv10:~# modprobe bonding mode=6 miimon=100
使用如下命令重新启动网卡。
srv10:~# /etc/init.d/networking restart
作者简介:张勤,MCSE、MCDBA、RHCE,从事软件开发(Delphi、Java)、项目管理、系统集成工作。曾参与多个基于Windows及Linux的大型系统集成项目,并在国内多个知名IT网站发表技术类文章。
原文链接:http://os.51cto.com/art/201102/245483.htm