admin
不忘初心,方得始终
级别: 管理员
只看楼主 | | | 0楼 发表于:2015-07-25 03:53

Linux网口绑定实现网卡高可用

  通过网口绑定(bond)技术,可以很轻松实现网口冗余,负载均衡,从而达到网络高可用和高可靠的目的。
前提条件:
2个物理网口分别是:eth0,eth1
绑定后的虚拟口是:bond0
服务器IP是:192.168.1.168
第一步,配置设定文件:
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.168
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
GATEWAY=192.168.1.1
DNS1=202.106.46.151
DNS2=202.106.195.68
USERCTL=no
TYPE=Ethernet
BONDING_OPTS="miimon=100 mode=1"
MTU=1500

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes

/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes

第二步,修改modprobe相关配置文件,并加载bonding模块:
1.在这里,我们直接创建一个加载bonding的专属配置文件/etc/modprobe.d/bonding.conf
vim /etc/modprobe.d/bonding.conf:
#添加
alias bond0 bonding
options bonding mode=1 miimon=200
加载bonding模块的时候,options里的一些参数的含义:
miimon 监控网络链接的频度,单位是毫秒,我们设置的是200毫秒。
max_bonds 配置的bond口个数。
mode bond模式,主要有以下几种,在一般的实际应用中,0和1用的比较多。
0或balance-rr 轮转策略,提供负载均衡和耐故障功能,按顺序轮流把包发给包含在bond口内的网口。
1或active-backup 主备策略,提供高耐故障功能,逻辑简单,一个处于激活状态,一个失败,另外一个自动激活。
2或balance-xor XOR策略,提供负载均衡和耐故障功能。
3或broadcast 广播策略,耐故障功能。把数据以广播的方式,发给包含在该bond口内的所有网口。
4或802.3ad IEEE 802.3ad动态链接集合。
5或balance-tlb 自动适应传输负载均衡策略。
6或balance-alb 自动适应负载均衡策略。

2.加载模块(重启系统后就不用手动再加载了)
modprobe bonding
3.确认模块是否加载成功:
lsmod | grep bonding
出现bonding 数字 0,表明bonding模块加载成功。

第三步,重启网络,确认网络状况:
/etc/init.d/network restart
查看绑定的文件:
more /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
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
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:49:43:e8
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:49:43:f2
Slave queue ID: 0

[root@localhost ~]# ifconfig |grep HWaddr
bond0     Link encap:Ethernet  HWaddr 00:0C:29:49:43:E8  
eth0      Link encap:Ethernet  HWaddr 00:0C:29:49:43:E8  
eth1      Link encap:Ethernet  HWaddr 00:0C:29:49:43:E8

从上面的确认信息中,我们可以看到3个重要信息:
1.现在的bonding模式是active-backup
2.现在Active状态的网口是eth0
3.bond0,eth1的物理地址和处于active状态下的eth0的物理地址相同,这样是为了避免上位交换机发生混乱。
任意拔掉一根网线,然后再访问你的服务器,看网络是否还是通的。

第四步,系统启动自动绑定、增加默认网关:
vim /etc/rc.d/rc.local
#添加
ifenslave bond0 eth0 eth1
route add default gw 192.168.1.1
#如可上网就不用增加路由,网关地址192.168.1.1地址按环境修改。

留心:前面只是2个网口绑定成一个bond0的情况,如果我们要设置多个bond口,比如物理网口eth0和eth1组成bond0,eth2和eth3组成bond1,
那么网口设置文件的设置方法和上面第一步配置的方法相同,只是/etc/modprobe.d/bonding.conf的配置就不能像下面这样简单的叠加了:
alias bond0 bonding
options bonding mode=1 miimon=200
alias bond1 bonding
options bonding mode=1 miimon=200

正确的配置方法有2种:

第一种,你可以看到,这种方式的话,多个bond口的模式就只能设成相同的了:
alias bond0 bonding
alias bond1 bonding
options bonding max_bonds=2 miimon=200 mode=1

第二种,这种方式,不同的bond口的mode可以设成不一样:
alias bond0 bonding
options bond0 miimon=100 mode=1
install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0
仔细看看上面这2种设置方法,现在如果是要设置4个,6个,甚至更多的bond口,应该可以解决!

总结与提高:
linux网卡bonging的备份模式实验在真实物理机做完全没问题(前提是linux内核支持),但是在VMware Workstation虚拟机中做就会出现bond0能够正常启动也能够正常使用,只不过没有起到备份模式的效果。当使用ifconfig eth0 down后,网络出现不通现象。VMware Workstation给出提示:这个MAC地址是eth0的,eth1不能使用。
这种现象需要利用Linux的内核知识解决:
bond0获取mac地址有两种方式:一种是从第一个活跃网卡中获取mac地址,然后其余的SLAVE网卡的mac地址都使用活跃网卡的mac地址;另一种是使用fail_over_mac参数,是bond0使用当前活跃网卡的mac地址,mac地址随着活跃网卡的状态转换而变化。
VMware Workstation不支持第一种获取mac地址的方式,所以为了达到网卡绑定的效果,必须加上fail_over_mac=1的参数。
配置文件如下:
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.168
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
GATEWAY=192.168.1.1
DNS1=202.106.46.151
DNS2=202.106.195.68
USERCTL=no
TYPE=Ethernet
BONDING_OPTS="miimon=100 mode=1 fail_over_mac=1"
MTU=1500
vim /etc/modprobe.d/bonding.conf
#添加
alias bond0 bonding
options bonding mode=1 miimon=200 fail_over_mac=1