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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux多网卡绑定聚合-bond技术相关的知识,希望对你有一定的参考价值。

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

bond模式:

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发出,这个不均衡,只有冗余机制...和交换机的聚合强制不协商方式配合。

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

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

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

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

常用的有三种:

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的网卡配置文件

[[email protected] ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.ori}
[[email protected] ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth1{,.ori}

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

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

[[email protected] ~]# 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地址:

[[email protected] ~]# 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地址(本次实验以这种方式为例):

[[email protected] ~]# 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,没有就在创建一个。

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

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

[[email protected] ~]# modprobe bonding

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

[[email protected] ~]# lsmod|grep bonding
bonding   133013  0

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

[[email protected] ~]# /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  ]
[[email protected] ~]# 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地址是一样的其实是不一样的如下所示

技术分享图片

8.增加默认网关

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

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

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

开机自动加载

[[email protected] ~]# grep "modprobe" /etc/rc.local 
modprobe bonding miimon=100 mode=1

10.添加负载均衡工具ifenslave

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

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

[[email protected] ~]# 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掉第一块网卡而是断开第一块网卡的网络连接,在虚拟机的右下角断开连接。

以上是关于linux多网卡绑定聚合-bond技术的主要内容,如果未能解决你的问题,请参考以下文章

Linux实现多网卡聚合绑定bonding

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

linux多网卡绑定聚合-Bond详细完整版

Linux平台双网卡绑定技术实现负载均衡(网卡聚合)bonding

Linux 链路聚合

Linux 链路聚合