搜索文章:

首页  |  Java技术  |  Asp.net  |  Asp编程  |  VC/C++  |  Delphi  |  VB编程
上一篇:IP网络路由技术 >>

双网卡负载均衡及路径切换配置

1.前言
双网卡负载均衡其实很早就在linux内核里面实现了,我见到的最早的版本是2.2.10的内核。不过那个时候还没要作为缺省功能编译到内核里面去,如果你需要这个功能你需要编译内核,然后选中bonding相关选项。我最早使用了bonding是在我最毕业设计时,在iscsi技术里面加入了bonding技术。通过测试发现对于小数据包的传送,单网卡比双网卡要快,这当然也是正常的,只有在大数据传送的情况下,它才能显示优势,比如流媒体文件的传输。2.4.x以后的内核就把bonding技术作为缺省功能编译进去了,而且还加入了路径切换的功能,那就更加完美了。

2.测试环境
硬件:
cpu celeron 766mhz
mem 92m (100mhz)
网卡:d-link,realtalk
软件:
os fedora core 2 (2.6.5-1.358)

3.配置过程
其实在linux里面配置双网卡负载均衡和路径切换很简单,只需要修改或增加一些配置文件就可以了。
a)首先配置/etc/modules.conf文件,添加下面的信息
代码::

alias bond0 bonding
options bond0 miimon=100 mode=1


第一行的意思我想大家都很明白,就是增加一个设备驱动的别名,真正的驱动名字是bonding.ko
第二上是驱动加载时的参数,这里解释一下
“miimon=100”,表示链路检测的时间间隔,单位是毫秒。
“mode=1”,这里表示双网卡bond的模式,目前官方发布的模式有0,1,2,3,4,5,6共7种,我们一般常用的是0,1两种。这里分别介绍
0表示round-robin模式,它从第一块有效的网卡传输资料,知道最后一块。它提供了负载均衡和容灾的功能
1表示active-backup模式,表示每次只有一个网卡是激活和有数据传输的,其它网卡处于backup状态,一旦激活的网卡链路出现问题,backup状态的网卡就会激活成为active状态这种模式提供了容灾的功能,但是没有负载均衡的功能。

b)配置bond0的配置文件
代码::

#cat /etc/sysconfig/network-scripts/ifcfg-bond0
device=bond0
ipaddr=192.168.10.254
netmask=255.255.255.0
network=192.168.10.0
broadcast=192.168.10.255
onboot=yes
bootproto=none
userctl=no

#cat /etc/sysconfig/network-scripts/ifcfg-eth0
device=eth0
onboot=yes
master=bond0
slave=yes
userctl=no
bootproto=none


#cat /etc/sysconfig/network-scripts/ifcfg-eth1
device=eth1
onboot=yes
master=bond0
slave=yes
userctl=no
bootproto=none


c)起动并测试
ok,你现在可以起动你的配置文件了,不过在起动之前,先看看有没有加载bonding内核模块(使用lsmod命令),如果没有,那就加载它,使用下面的命令
代码::

modprobe bonding


然后使用下面的命令重新起动网络
代码::

/etc/init.d/networkd restart


在使用ifconfig命令看看结果,如果你能看到下面类似的输出,那就配置没有问题了
代码::

#ifconfig
bond0 link encap:ethernethwaddr 00:1a:34:56:91:be
 inet addr:192.168.10.254bcast:192.168.10.255mask:255.255.255.0
 inet6 addr: fe80::200:ff:fe00:0/64 scope:link
 up broadcast running master multicastmtu:1500metric:1
 rx packets:2620 errors:0 dropped:0 overruns:0 frame:0
 tx packets:1352 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0
 rx bytes:259480 (253.3 kb)tx bytes:292208 (285.3 kb)

eth0link encap:ethernethwaddr 00:1a:34:56:91:be
 inet6 addr: fe80::21a:34ff:fe56:91be/64 scope:link
 up broadcast running slave multicastmtu:1500metric:1
 rx packets:1218 errors:0 dropped:0 overruns:0 frame:0
 tx packets:613 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000
 rx bytes:118905 (116.1 kb)tx bytes:132632 (129.5 kb)
 interrupt:11 base address:0x9000

eth1link encap:ethernethwaddr 00:1a:34:56:91:be
 inet6 addr: fe80::21a:34ff:fe56:91be/64 scope:link
 up broadcast running slave multicastmtu:1500metric:1
 rx packets:1402 errors:0 dropped:0 overruns:0 frame:0
 tx packets:741 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000
 rx bytes:140575 (137.2 kb)tx bytes:161196 (157.4 kb)
 interrupt:12 base address:0xd000

lolink encap:local loopback
 inet addr:127.0.0.1mask:255.0.0.0
 inet6 addr: ::1/128 scope:host
 up loopback runningmtu:16436metric:1
 rx packets:82 errors:0 dropped:0 overruns:0 frame:0
 tx packets:82 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:0
 rx bytes:5700 (5.5 kb)tx bytes:5700 (5.5 kb)


你还可以通过下面的命令来查看bond0的基本信息
代码::

#more /proc/net/bonding/bond0

bonding mode: load balancing (round-robin)
mii status: up
mii polling interval (ms): 0
up delay (ms): 0
down delay (ms): 0

slave interface: eth0
mii status: up
link failure count: 0
permanent hw addr: 00:1a:34:56:91:be

slave interface: eth1
mii status: up
link failure count: 0
permanent hw addr: 00:0a:eb:82:da:ab


下面我们测试一下路径切换,准备一台机器,采用ping的方式看链路情况。
然后在测试的机器上随便拔掉一根网线,看看情况,我的机器的情况是大约8秒的样子链路切换了,如果全部拔掉,然后随便插入一根网线,大约需要10秒的时间恢复链路。

4.后记
这个测试我在04年的12月份做过测试,不过是在我的笔记本上测试的,一块网卡是8139的,另外一块是讯驰的无线网卡,记过发现起动bond0时会死机。我不知道是不是无线网卡和有线网卡不能做这样的操作,不过我可以肯定的是如果即使这样bond0能起来,把链路切换到无线网卡上时,肯定会失败,因为无线网卡加入时需要验证。不过我想做这些配置应该是在服务器上,还没有谁在服务器上配置两个无线网卡吧!

()

相关文章:
© 2006   www.java-asp.net