linux多网卡绑定聚合-bond技术

网卡bond能够把多张网卡绑定为一个逻辑网卡,实现网卡的冗余,带宽扩容和负载均衡,会大幅度提高服务器的网络吞吐(I/O)。linux

bond模式:vim

1.Mode=0(balance-rr) 表示负载分担round-robin,和交换机的聚合强制不协商的方式配合。服务器

2.Mode=1(active-backup) 表示主备模式,只有一块网卡是active,另一块是备的standby,这时若是交换机配的是捆绑,将不能正常工做,由于交换机往两块网卡发包,有一半包是丢弃的。网络

3.Mode=2(balance-xor) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(须要xmit_hash_policy)负载均衡

4.Mode=3(broadcast) 表示全部包从全部interface发出,这个不均衡,只有冗余机制...和交换机的聚合强制不协商方式配合。ide

5.Mode=4(802.3ad) 表示支持802.3ad协议,和交换机的聚合LACP方式配合(须要xmit_hash_policy)工具

6.Mode=5(balance-tlb) 是根据每一个slave的负载状况选择slave进行发送,接收时使用当前轮到的slaveoop

7.Mode=6(balance-alb) 在5的tlb基础上增长了rlb。测试

5和6不须要交换机端的设置,网卡能自动聚合。4须要支持802.3ad。0,2和3理论上须要静态聚合方式。但实测中0能够经过mac地址欺骗的方式在交换机不设置的状况下不太均衡地进行接收。rest

经常使用的有三种:

mode=0:平衡负载模式,有自动备援,但须要”Switch”支援及设定。

mode=1:自动备援模式,其中一条线若断线,其余线路将会自动备援。

mode=6:平衡负载模式,有自动备援,没必要”Switch”支援及设定。

mode有七种工做状态能够用modeinfo bonding查看。须要说明的是若是想作成mode 0的负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须作特殊配置(这两个端口应该采起聚合方式),由于作bonding的这两块网卡是使用同一个MAC地址.从 原理分析一下(bond运行在mode 0下):

mode 0下bond所绑定的网卡的IP都被修改为相同的mac地址,若是这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多个,那么交换机接受到发往这个mac地址的包应该往哪一个端口转发呢?正常状况下mac地址是全球惟一的,一个mac地址对应多个端口确定使交换机迷惑 了。因此 mode0下的bond若是链接到交换机,交换机这几个端口应该采起聚合方式(cisco称 为 ethernetchannel,foundry称为portgroup),由于交换机作了聚合后,聚合下的几个端口也被捆绑成一个mac地址.咱们 的解 决办法是,两个网卡接入不一样的交换机便可。

mode6模式下无需配置交换机,由于作bonding的这两块网卡是使用不一样的MAC地址。

实验准备:

经过网口绑定(bond)技术,能够实现网口冗余,负载均衡。

bond模式:mode 1

2个物理网口分别是:eth0、eth1

绑定虚拟端口是;bond0

服务器ip:192.168.1.225

1.备份eth0和eth1的网卡配置文件

[root@linzhongniao ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.ori}
[root@linzhongniao ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth1{,.ori}

2.编辑eth0和eth1网卡的配置文件

主要配置DEVICE,USERCTL,ONBOOT,MASTER,SLAVE,BOOTPROTO其余的不用配置,eth1网卡的配置文件和eth0同样就是把DEVICE的值改为eth1。

[root@linzhongniao ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 
ONBOOT=yes 
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes
TYPE=Ethernet
NM_CONTROLLED=yes
PEERDNS=yes
IPV6INIT=no

3.配置虚拟网卡bond0

配置虚拟网卡我用的自动获取ip的方式,也能够静态配置ip

dhcp自动获取ip地址:

[root@linzhongniao ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
USERCTL=no
PEERDNS=yes
IPV6INIT=no

用静态ip地址(本次实验以这种方式为例):

[root@linzhongniao ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
DNS1=192.168.18.1
NM_CONTROLLED=yes
PEERDNS=yes
DNS2=114.114.114.114
TYPE=Ethernet
IPV6INIT=no
IPADDR=192.168.1.225
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

4.修改modprobe相关的配置文件

编辑加载bonding的专属配置文件/etc/modprobe.d/bonding.conf,没有就在建立一个。

[root@linzhongniao ~]# cat /etc/modprobe.d/bonding.conf 
alias bond0 bonding
options bonding miimon=100 mode=1

5.加载模块(重启系统后就不用手动加载了)

[root@linzhongniao ~]# modprobe bonding

6.确认模块是否加载成功

[root@linzhongniao ~]# lsmod|grep bonding
bonding   133013  0

7.重启网络确认一下状况

[root@linzhongniao ~]# /etc/init.d/network restart
Shutting down interface bond0: [  OK  ]
Shutting down loopback interface:  [  OK  ]
Bringing up loopback interface:[  OK  ]
Bringing up interface bond0:  
Determining IP information for bond0... done.
   [  OK  ]
[root@linzhongniao ~]# ifconfig|grep HWaddr
bond0 Link encap:Ethernet  HWaddr 00:0C:29:9C:41:1C  
eth0  Link encap:Ethernet  HWaddr 00:0C:29:9C:41:1C  
eth1  Link encap:Ethernet  HWaddr 00:0C:29:9C:41:1C

如今查看的mac地址是同样的实际上是不同的以下所示

linux多网卡绑定聚合-bond技术

8.增长默认网关

启动系统自动绑定,增长默认网关

[root@linzhongniao ~]# vim /etc/rc.d/rc.local
#追加
route add default gw 192.168.1.1  《==根据需求配置

9.将modprobe相关文件写入/etc/rc.local中

开机自动加载

[root@linzhongniao ~]# grep "modprobe" /etc/rc.local 
modprobe bonding miimon=100 mode=1

10.添加负载均衡工具ifenslave

ifenslave负载均衡工具能够将数据包有效的分配,一般结合交换机和路由使用。这时会新建一个bond0的虚拟设备,使用咱们设置ip地址。这个时候eth0和eth1的工做模式混杂,什么数据都接收,可是数据过来以后ifenslave的底层驱动来作负载均衡,决定哪些数据规组里面的那个成员处理。

将负载均衡设置添加到/etc/rc.local中,开机自动加载

[root@linzhongniao ~]# cat /etc/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
modprobe bonding miimon=10 mode=1
ifenslave bond0 eth0 eth1

11.添加两个虚拟网卡的方法

添加两个网卡就不能在/etc/modprobe.d/bonding.conf里面堆叠了。正确的作法是

alias bond0 bonding
alias bond1 bonding
options bonding max_bonds=2 miimon=200 mode=1

提示:配置好以后重启系统生效

12.测试

工做服务器能够拔掉第一块网卡的网线测试。虚拟机咱们能够断开第一块网卡的链接,切记不是down掉第一块网卡而是断开第一块网卡的网络链接,在虚拟机的右下角断开链接。

相关文章
相关标签/搜索