Linux下多网卡负载的实现

作为局域网的服务器特别是文件服务器,经常出现的系统瓶颈在于网络接口。有些情况下我们确实需要将n个网卡设置为一个虚拟的网卡,具有相同的IP地址且可以实现负载——类似于cisco的etherchannel技术。在linux下,这种技术被称之谓“bonding”,本身已经存在于linux的内核里。

看了几家人家的发行版本,很多都默认不开启bonding,所以还需要我们重新订制一个内核。
在核心配置的界面中的网络设备驱动开启Bonding driver support

Device Drivers->Network device support->(M)Bonding driver support

编译新的linux 核心。

编辑/etc/modprobe.conf添加一条:

alias bond0 bonding

编辑/etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

修改原先的/etc/sysconfig/network-scripts/ifcfg-eth0 if-eth1
DEVICE=eth0 //eth1
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

重新启动网络或服务器

anyShare分享到:
          

,

  1. #1 by litrin on 2006年05月21日 - 15:00

    相比linux而言,FreeBSD的则相对麻烦一点,它其实是利用了FreeBSD的ng_one2many 模块来实现的。个人感觉这种方式更接近于“逆向防火墙策略”——把其中一块网卡的数据自动转移到另一网卡上去。

    首先,还是要重新编译内核,并将netgraph ng_ether ng_one2many这3个模块加入内核

    /sbin/kldload ng_ether

    /sbin/kldload netgraph

    /sbin/kldload ng_one2many //load这3个内核模块

    /sbin/ifconfig rl0 up
    /sbin/ifconfig rl1 up

    #这里以我服务器上的2块8139“烂”网卡(rl0 rl1)为例

    /usr/sbin/ngctl mkpeer rl0: one2many upper one
    /usr/sbin/ngctl connect rl0: rl0:upper lower many0
    /usr/sbin/ngctl connect rl1: rl0:upper lower many1
    /usr/sbin/ngctl msg rl1: setpromisc 1
    /usr/sbin/ngctl msg rl1: setautosrc 0

    /usr/sbin/ngctl msg em0:upper setconfig "{ xmitAlg=1 failAlg=1 enabledLinks=[ 1 1] }"

    #这里xmitAlg=1 为两块网卡轮流链接,设置为2则两网卡同时链接,发送同样的数据包
    #failAlg=1为负载均衡模式,设置为2则可以在“1”的基础上实现检测链路状态,高可用模式

    /sbin/ifconfig rl0 inet IP_ADDRESS netmask NET_MASK
    /sbin/route add default ROUTER_IP

    #设置网络参数,这里看得出,其实只是设置了rl0的网络参数

  2. #2 by litrin on 2006年06月5日 - 11:25

    如果您是在win下,实现双网卡负载需要安装一个NICExpress,这个软件的共享版本有30天的使用限制,解除限制还是老一套——注册码。

    比较的傻瓜化,没有什么难度。

  3. #3 by litrin on 2008年03月29日 - 13:07

    您提出的问题我没有碰到过,不敢做太多猜测。希望您能提供:

    • /etc/make.conf
    • uname -a信息
    • 硬件配置等等,总之越多越好!

    btw,习惯上最好不要直接修改Genric文件,您可以复制到另一个文件中再做编译。

(will not be published)
*