linux服务器bond速率不叠加,Linux下双网卡绑定技术实现负载均衡和失效保护(bond)...

对于bonding的网络负载均衡是我们在文件服务器中常用到的,比如把三块网卡,当做一块来用,解决一个IP地址,流量过大,服务器网络压力过大的问题。对于文件服务器来说,比如NFS或SAMBA文件服务器,没有所有一个管理员会把内部网的文件服务器的IP地址弄非常多个来解决网络负载的问题。如果在内网中,文件服务器为了管理和应用上的方便,大多是用同一个IP地址。对于一个百M的本地网络来说,文件服务器在多个用户同时使用的情况下,网络压力是极大的,特别是SAMABA和NFS服务器。为了解决同一个IP地址,突破流量的限制,毕竟网线和网卡对数据的吞吐量是有限制的。如果在有限的资源的情况下,实现网络负载均衡,最佳的办法就是 bonding ;

另一种情况就是服务器的一个网卡失效或网络连接意外断开,如果做了bonding就能转换到另一个网卡的网络连接上.确保服务的不中断.

首先要看linux是否支持bonding,RHEL4已默认支持了.(大部分发行版都支持)

# modinfo bonding

filename:       /lib/modules/2.6.18-8.el5/kernel/drivers/net/bonding/bonding.ko

author:         Thomas Davis,

tadavis@lbl.gov

and many others

description:    Ethernet Channel Bonding Driver, v3.0.3

version:        3.0.3

license:        GPL

srcversion:     2547D22885C2FDF28EF7D98

如果有类似上面的信息输出,说明已支持了.

如果没有,说明内核不支持bonding,需要重新编译内核

编译内核的步骤这里就不多写了,在make menuconfig里面

找到Bonding driver support这样的对话框,选中他.

如果是模块编译,还需要挂载模块.挂载bonding 模块的方法;

[root@localhost#] modprobe bonding

如果/sbin/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

1.#cp  ifcfg-etho   ifcfg-bond

2.#vim ifcfg-bond

DEVICE=bond0

IPADDR=192.168.100.2

NETMASK=255.255.255.0

NOBOOT=yes

BOOTPROTO=none

USERCTL=no

#vim ifcfg-eth0

DEVICE=eth0

HWADDR=xxxxxxxxxx

BOOTPROTO=none

ONBOOT=yes

USERCTL=no

MASTER=bond0

SLAVE=yes

TYPE=Ethernet

#vim ifcfg-eth1

DEVICE=eth1

HWADDR=xxxxxxxxxx

BOOTPROTO=none

ONBOOT=yes

USERCTL=no

MASTER=bond0

SLAVE=yes

TYPE=Ethernet

3. #vim  /etc/modprobe.conf

加入下列行

alias bond0 bonding

options bond0 miimon=100 mode=1

alias net-pf-10 off  //这行是关闭ipv6支持,也能不要)

说明: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会认为链路没有问题而继续使用

4 # service network restart

重启后我们用ifconfig查看网卡信息,能看到多出一个bond0网卡.

bond0     Link encap:Ethernet  HWaddr xxxxxxxxx

inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0

UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1

RX packets:48 errors:0 dropped:0 overruns:0 frame:0

TX packets:38 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:8817 (8.6 KiB)  TX bytes:4807 (4.6 KiB)

eth0      Link encap:Ethernet  HWaddr xxxxxxxxx

UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

RX packets:44 errors:0 dropped:0 overruns:0 frame:0

TX packets:46 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:8196 (8.0 KiB)  TX bytes:6007 (5.8 KiB)

Interrupt:169 Base address:0x2000

eth1      Link encap:Ethernet  HWaddr xxxxxxxxx

UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

RX packets:8 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:861 (861.0 b)  TX bytes:0 (0.0 b)

Interrupt:193 Base address:0x2080

那也就是说在主备模式下,当一个网络接口失效时(例如主交换机掉电等),不回出现网络中断,系统会按照cat /etc/rc.d/rc.local里指定网卡的顺序工作,机器仍能对外服务,起到了失效保护的功能.

能查看到bond0的工作状态

[root@localhost ~]# cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.0.3 (March 23, 2006)

Bonding Mode: fault-tolerance (active-backup)

Primary Slave: None

Currently Active Slave: eth0

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0

Slave Interface: eth0

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:0c:29:c2:b3:44

Slave Interface: eth1

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:0c:29:c2:b3:4e

从另一台机器ping我们刚才设置的IP地址,然后在虚拟机vmware下面,点其中的一个网卡

选中disconnect(断开)

能看到ping只是出现了两个time out后就又恢复了正常.说明我们的设置起作用了.

071220170025.jpg

需要说明的是如果想做成负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,还需要设置交换机的端口.

从原理分析一下(bond运行在mode 0下):

mode 0下bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。

所以mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们的解决办法是,两个网卡接入不同的交换机即可。

取消linux bond的方法

另外大家关心的一个问题应该是:设置了bond 后如何去掉?

我现在想到的大致步骤是:

1,ifconfig bond0 down

2,vi modprobe.conf

引用:

alias eth0 e1000

alias eth1 e1000

#alias bond0 bonding     (注释掉)

#options bond0 miimon=100 mode=1  (注释掉)

alias scsi_hostadapter mptbase

alias scsi_hostadapter1 mptscsih

alias scsi_hostadapter2 ips

alias usb-controller ohci-hcd

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、Bond的工作模式 Linux bonding驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用,用于网络负载均衡及网络冗余。 bonding一共有7种工作模式(mode): 1)、bond=0,(balance-rr) Round-robin policy: (平衡轮询策略):传输数据包顺序是依次传输,直到最后一个传输完毕,此模式提供负载平衡和容错能力。 2)、bond=1,(active-backup) Active-backup policy:(活动备份策略):只有一个设备处于活动状态。一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得。此模式提供了容错能力。 3)、bond=2,(balance-xor) XOR policy:(平衡策略):传输根据[(源MAC地址xor目标MAC地址)mod设备数量]的布尔值选择传输设备。 此模式提供负载平衡和容错能力。 4)、bond=3,(broadcast) Broadcast policy:(广播策略):将所有数据包传输给所有设备。此模式提供了容错能力。 5)、bond=4,(802.3ad) IEEE 802.3ad Dynamic link aggregation. IEEE 802.3ad 动态链接聚合:创建共享相同的速度和双工设置的聚合组。此模式提供了容错能力。每个设备需要基于驱动的重新获取速度和全双工支持;如果使用交换机,交换机也需启用 802.3ad 模式。 6)、bond=5,(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡):通道绑定不需要专用的交换机支持。发出的流量根据当前负载分给每一个设备。由当前设备处理接收,如果接受的设 备传不通就用另一个设备接管当前设备正在处理的mac地址。 7)、bond=6,(balance-alb) Adaptive load balancing: (适配器负载均衡):包括mode5,由 ARP 协商完成接收的负载。bonding驱动程序截获 ARP在本地系统发送出的请求,用其中之一的硬件地址覆盖从属设备的原地址。就像是在服务器上不同的人使用不同的硬件地址一样。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值