linux下实现链路聚合
CentOS 双网卡绑定实现负载均衡或容错. 在这介绍的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驱动程序处理. 其实在 linux 将双网卡绑定成一块网卡,配置起来非常简单,只需要简单几个步骤即可实现,下面我们就一起来体验一下吧.首先,还是将本次实验的环境做个简单的介绍: 操作系统:CentOS 5.5 x86. 绑定的前提条件:芯片组型号相同,而且网卡应该具备自己独立的BIOS芯片.
1.先修改eth0 和eht1这2个网卡配置文件.目录在(/etc/sysconfig/network-scripts/)如下:
1 | DEVICE=eth0 |
2.eth1也是同样的修改.如下:
1 | DEVICE=eth1 |
3.新建一个虚拟网卡bond0,创建bond0的配置文件ifcfg-bond0.如下:
1 | DEVICE=bond0 |
注意:编辑的时候在配置文件中把MAC地址去掉,否则会出现mac冲突.
4.修改 /etc/modprobe.conf添加内容如下:
1 | alias bond0 bonding |
说明:miimon是用来进行链路监测的. 比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种. mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作. mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份. bonding只能提供链路监测,即从主机到交换机的链路是否接通.如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用. MODE=0测试结论: 如果交换机未配置链路聚合则会发生MAC动荡的情况,在配置了链路聚合后不会出现,SRV发出数据包的MAC为Bond0的MAC. MODE=6测试结论:(这个mode=6不了解) 此时交换机无需特殊配置,即可实现负载均衡.2个网卡发出的包使用的是各自的MAC,因此也不会造成交换机MAC地址表的动荡.
5.修改 /etc/rc.d/rc.local添加内容如下:
1 | ifenslave bond0 eth0 eth1 |
OK 完成. 重启(开始重启network服务没出想要得到的效果,最后选择重启的系统),验证:
1 | ifconfig |
可以down掉其中的一个网卡,链路依然是通的.
1 | ifconfig eth* down |
当都down掉的时候就不通了. 通过网卡邦定技术既增加了服务器的可靠性,又增加了可用网络带宽,为用户提供不间断的关键服务.