在现在的网络中,带宽越来越高,线路的带宽可以达到1000m的带宽,但是想要达到整体性能达到1000m的带宽却很难,因为网络i/o限制着,无法整体达到这么高的带宽,甚至有时以前买的服务器网卡带宽不咋地,导致整个网络的带宽无法提升。
但是linux的bond模块和ifenslave 网卡聚合工具可以解决这一问题。利用bond模块连接内核实现双网卡通信,使用ifenslave 工具做到网卡聚合。
具体操作如下:
1 加载bond模块的支持
查看内核是否加载该模块
Cat /lib/modules/2.6.18-194.el5/kernel/drivers/net/bonding/bonding.ko
默认是加载好的,如果没得加载的需要重新编译内核
Make menuconfig找到Bondingdriver support这样的对话框
查看模块加载模块 modinfo bonding
filename: /lib/modules/2.6.18-8.el5/kernel/drivers/net/bonding/bonding.ko
author: Thomas Davis, [email protected] andmany others
description: Ethernet Channel Bonding Driver, v3.0.3
version: 3.0.3
license: GPL
srcversion: 2547D22885C2FDF28EF7D98
如果没有ifenslave 工具,需要自行编译
[root@lin:/home/beinan#]cd /usr/src/linux-2.6.20/Documentation/networking
[root@lin:/home/networking#] gcc -Wall -Wstrict-prototypes -O -I/usr/src/linux-2.6.20/include ifenslave.c-o ifenslave
[root@lin:/home/networking#]cp ifenslave /sbin/ifenslave
2 配置文件
设置两张网卡设置静态状态,同时不要设置ip地址等信息。如下:
[root@localhost/]# cat /eth0
# Advanced MicroDevices [AMD] 79c970[PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:0c:29:ef:63:dd
[root@localhost/]# cat /eth1
# Advanced Micro Devices[AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
设置开机加载bonding模块
[root@localhost/]# tail -3 /etc/modprobe.conf
alias eth1pcnet32
alias bond0bonding //定义模块别名
options bond0miimon=100 mode=0 // 设置为负载均衡模式
mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。
mode=1表示fault-tolerance (active-backup)提供冗余功能,
[root @test/root]# modprobe modules_name<==直接加载该模块与其相依属性的模块
设置开机加载ifenslave 命令
[root@localhostetc]# cat /etc/rc.d/rc.local
#!/bin/sh
#
touch/var/lock/subsys/local
/sbin/ifenslavebond0 eth0 eth1
重启network 查看网卡情况
[root@localhostetc]# cat /proc/net/bonding/bond0
Ethernet ChannelBonding Driver: v3.4.0 (October 7, 2008)
Bonding Mode:fault-tolerance (active-backup)
Primary Slave:None
Currently ActiveSlave: eth0
MII Status: up
MII PollingInterval (ms): 100
Up Delay (ms): 0
Down Delay (ms):0
Slave Interface:eth0
MII Status: up
Link FailureCount: 0
Permanent HWaddr: 00:0c:29:ef:63:dd
Slave Interface:eth1
MII Status: up
Link FailureCount: 0
Permanent HWaddr: 00:0c:29:ef:63:e7
可以了
问题1:
[root@localhost etc]# service networkrestart
Shutting down interface bond0: [ OK ]
Shutting down interface eth0: [ OK ]
Shutting down interface eth1: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface bond0: [ OK ]
Bringing up interface eth0: [ OK ]
Bringing up interface eth1: Device eth1 has different MAC address thanexpected, ignoring.
[FAILED]
这是你的eth0 文件中设置了mac 地址,清理掉就好
问题2
出现bond0 有了ip 但是就是ping不同其他ip
解决:
查看bond0 网卡状态 cat /proc/net/bonding/bond0 发现状态是开启的
查看下ifenslave 相关文件,发现/sbin/ifenslave bond0 eth0eth1 这一句没有执行,只是设置了开机启动。