LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1461|回复: 10

双网卡冗余技术应用

[复制链接]
发表于 2006-2-12 14:26:06 | 显示全部楼层 |阅读模式
这是我发表在其他地方的一篇文章,反应冷淡,呜~~~~~~~~,放在这里让更多gentoo粉士认识此技术,或者已经很多人用上来,俺是孤陋寡闻阿.
实验条件:两块网卡,可不限型号,一台交换机,gentoo环境,可以是其他linux,注意区分不同之处.
我的设备:两个8139,TP-LINK交换机,总值不过是百块,大家不要见笑,其实在gentoo的网络配置文件里提到过这种技术,刚好有台交换机,并参考网上一篇文章,试试如何.
将多块网卡虚拟成为一块网卡,使其具有相同的IP地址,来实现提升主机的网络吞吐量或者是提高可用性,这种技术被称作bonding。这项技术其实在 sun和cisco中已经存在,分别称为Trunking和etherchannel技术,在Linux中,这种技术称为bonding。

通过软硬件设置将两块或者多块网卡绑定在同一个IP地址上,接上集线器,使用起来就好象在使用一块网卡。

多网卡绑定的优点不少,首先,可以增大带宽,假如一个网卡的带宽是100M,理论上两块网卡就是200M,三块就是300M,当然实际上的效果是不会是这样简单的增加的,不过经实际测试使用多个网卡对于增加带宽,保持带宽的稳定性肯定是有裨益的。

形成网卡冗余阵列、分担负载,双网卡被绑定成“一块网卡”之后,同步一起工作,对服务器的访问流量被均衡分担到两块网卡上,这样每块网卡的负载压力就小多了,抗并发访问的能力提高,保证了服务器访问的稳定和畅快,当其中一块发生故障的时候,另一块立刻接管全部负载,过程是无缝的,服务不会中断,直到维修人员到来。

1)连接设备:
adsl接入到交换机,交换机接两块网卡,也就是说adsl通过交换机连接两个网卡,进入.
2) 编译带有bonding driver的内核
在内核选项:
Device Drivers->
Network device support->
<M>Bonding driver support
编译成模块。
3) 获取并安装用户管理工具
安装ifenslave程序,gentoo是支持emerge的,其他版本的linux要自己找了,找不到的说说,有附带源代码
#emerge ifenslave
设置,执行命令:
#modprobe bonding
加载模块
#ifconfig bond0 192.168.0.1 netmask 255.255.0.0
设置设备bond0的IP
#ifenslave bond0 eth0 eth1
绑定两个网卡
解除是:
#ifconfig bond0 down
用命令ifconfig看出bond0设备的情况:
# ifconfig
bond0     Link encap:Ethernet  HWaddr 00:0A:EB:FA:08:A9
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:179812 errors:0 dropped:0 overruns:0 frame:0
          TX packets:147859 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:204694202 (195.2 Mb)  TX bytes:67080581 (63.9 Mb)

eth0      Link encap:Ethernet  HWaddr 00:0A:EB:FA:08:A9
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:89088 errors:0 dropped:0 overruns:0 frame:0
          TX packets:73543 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:101695763 (96.9 Mb)  TX bytes:33487215 (31.9 Mb)
          Interrupt:16 Base address:0x2f00

eth1      Link encap:Ethernet  HWaddr 00:0A:EB:FA:08:A9
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:90724 errors:0 dropped:0 overruns:0 frame:0
          TX packets:74318 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:102998439 (98.2 Mb)  TX bytes:33593500 (32.0 Mb)
          Interrupt:17 Base address:0x4e00

lo        Link encapocal Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:269 errors:0 dropped:0 overruns:0 frame:0
          TX packets:269 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:21908 (21.3 Kb)  TX bytes:21908 (21.3 Kb)

ppp0      Link encapoint-to-Point Protocol
          inet addr:221.4.185.60  P-t-P:221.4.184.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:178863 errors:0 dropped:0 overruns:0 frame:0
          TX packets:146823 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:200336566 (191.0 Mb)  TX bytes:63717954 (60.7 Mb)

需要重新设置adsl,因为原adsl是使用eth0,现在eht0和eth1都绑在bond0身上,没有网卡了,所以,把这项改为:
(default eth1): bond0
启动adsl,看到网卡和交换机的灯同时闪烁,说明已经工作了.

工作情况,如下:
# dmesg |grep eth
eth0: RealTek RTL8139 at 0xd0802f00, 00:0a:eb:fa:08:a9, IRQ 16
eth0:  Identified 8139 chip type 'RTL-8100B/8139D'
eth1: RealTek RTL8139 at 0xd0804e00, 00:14:78:2c:d8:98, IRQ 17
eth1:  Identified 8139 chip type 'RTL-8100B/8139D'
eth0: link down
eth0: link down
eth1: link up, 100Mbps, full-duplex, lpa 0x45E1
eth1: link down
eth1: link up, 100Mbps, full-duplex, lpa 0x45E1
eth1: link down
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
eth1: link up, 100Mbps, full-duplex, lpa 0x45E1
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
bonding: bond0: enslaving eth0 as an active interface with an up link.
eth1: link up, 100Mbps, full-duplex, lpa 0x45E1
bonding: bond0: enslaving eth1 as an active interface with an up link.

用bt下载一些文件测试速度,前后的下载速度是有一定的提高,难说是具体有多大变化,应该有30%提高,峰值是比原来高一些,那路高手有时间可做做测试,搞些新玩法,贴贴出来,其实双网卡应用要求的硬件设施和技术都不高,效果是明显,值得应用.
下面是参考文章:http://www.hackhome.com/2005/6-17/1904107338.shtml
发表于 2006-2-12 14:50:43 | 显示全部楼层
好文章~~~
回复 支持 反对

使用道具 举报

发表于 2006-2-12 17:17:48 | 显示全部楼层
或许我那该死的ADSL带宽由128KB变成128MB的时候,就可以把闲置的网卡利用起来了
回复 支持 反对

使用道具 举报

发表于 2006-2-13 01:36:43 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2006-2-13 10:51:52 | 显示全部楼层
不知楼主有没有自己在一个子网内测试过极根速度?
个人用户的ADSL的速度是远远比不上一块网卡的速度,用BT测试觉得与网络状态关系大一些,提高30%的速度可能是网络状态的原因。现在电信提供的ADSL理论速度:下载8Mbps(还是8MBps), 上传是2Mbps,而自适应网卡10Mbps/100Mbps,如果用交换机(一般集线器的速度都是10Mbps),一般可以达到10MBps的速度是没有问题。

这种技术有价值,一是提高网络吞吐量,一是冗余以提高稳定性。以前看别人实验报告:最大速度为接近单块网卡的最大速度的两倍。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-13 12:28:50 | 显示全部楼层
俺的网卡和交换机是10-100m自适应,如何去测试速度,俺就不大懂了,如何大幅提高网速?有赖大家深入探讨,贴出经验,能这么简单而显著提高速度,我的实验环境没能实现,要是可能那就太好啦~~~~~~~~!
回复 支持 反对

使用道具 举报

发表于 2006-2-16 16:02:58 | 显示全部楼层
用于ADSL能提高速度绝对是心理感觉,实际没用,用于文件服务器提高总吞吐量效果不错,你用的是哪个绑定模式?我记得8139不支持硬改mac,要用支持绑定的交换机才能实现绑定,在linux kernel的文档里资料还是很详细的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-16 19:13:06 | 显示全部楼层
我是用默认的0模式,轮询模式,就是加快速度类型,至于交换机是没有trunk技术的,对提高网速感觉还是有帮助的,希望感觉没有错.
回复 支持 反对

使用道具 举报

发表于 2006-2-17 14:17:20 | 显示全部楼层
bonding用在100M交换网中(交换机也是100M),速度没有“想象中”那样大幅度提升。单NIC下载速度10M,改成bonding后,两个client并发下载两个iso文件的平均速度不超过5.5M。这是我在公司实践的结果。注,机器是120G IDE disk,这里可能有瓶竟
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-17 20:46:23 | 显示全部楼层
Post by shaaben
bonding用在100M交换网中(交换机也是100M),速度没有“想象中”那样大幅度提升。单NIC下载速度10M,改成bonding后,两个client并发下载两个iso文件的平均速度不超过5.5M。这是我在公司实践的结果。注,机器是120G IDE disk,这里可能有瓶竟


你是在局域网内做的实验吗?我没有局域网的条件,在小网络的情况看不出效果,我连结是ADSL,没从说起,你能否产生一个大的负载请求,测试抗负载能力,应该说此技术最大的好处是冗余,提高吞吐量,对整个网络速度的提高估计影响不大.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表