网卡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
[root@linzhongniao ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.ori} [root@linzhongniao ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth1{,.ori}
主要配置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
配置虚拟网卡我用的自动获取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
编辑加载bonding的专属配置文件/etc/modprobe.d/bonding.conf,没有就在建立一个。
[root@linzhongniao ~]# cat /etc/modprobe.d/bonding.conf alias bond0 bonding options bonding miimon=100 mode=1
[root@linzhongniao ~]# modprobe bonding
[root@linzhongniao ~]# lsmod|grep bonding bonding 133013 0
[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地址是同样的实际上是不同的以下所示
启动系统自动绑定,增长默认网关
[root@linzhongniao ~]# vim /etc/rc.d/rc.local #追加 route add default gw 192.168.1.1 《==根据需求配置
开机自动加载
[root@linzhongniao ~]# grep "modprobe" /etc/rc.local modprobe bonding miimon=100 mode=1
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
添加两个网卡就不能在/etc/modprobe.d/bonding.conf里面堆叠了。正确的作法是
alias bond0 bonding alias bond1 bonding options bonding max_bonds=2 miimon=200 mode=1
提示:配置好以后重启系统生效
工做服务器能够拔掉第一块网卡的网线测试。虚拟机咱们能够断开第一块网卡的链接,切记不是down掉第一块网卡而是断开第一块网卡的网络链接,在虚拟机的右下角断开链接。