Linux双网卡绑定实现负载均衡与失效保护的方法

发布时间:2020-08-20编辑:脚本学堂
本文介绍下,在linux系统中,实现双网卡的绑定,以实现负载均衡与失效保护的具体方法。有需要的朋友参考下。

在生产环境中,一定要确保服务器网络连接的高可用性。网卡(NIC)绑定技术有助于保证高可用性特性并提供其它优势以提高网络性能。

本文要介绍的linux双网卡绑定,就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址
而并行链接聚合成一个逻辑链路工作。

其实这项技术在Sun和Cisco中早已存在,被称为Trunking和 Etherchannel技术,在Linux的2.4.x的内核中也采用这这种技术,被称为bonding。bonding技术的最早应用是在
集群—— beowulf上,为了提高集群节点间的数据传输而设计的。

bonding原理

说到bonding,还要谈谈网卡的混杂 (promisc)模式。

正常情况下,网卡只接收目的硬件地址(MAC Address)是自身Mac的以太网帧,对于别的数据帧都滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂promisc
的模式,可以接收网络上所有的帧,比如说tcpdump,就是运行在这个模式下。bonding也运行在这个模式下,而且修改了驱动程序中的mac地址,将两块网卡的Mac地址改成相
同,可以接收特定mac的数据帧。然后把相应的数据帧传送给bond驱动程序处理。

绑定的前提条件:芯片组型号相同,而且网卡应该具备自己独立的BIOS芯片。
 
具体配置步骤如下,共分四步:
 
本测试环境是在RHEL5.4上做的。
 

复制代码 代码示例:
[root@jbxue network-scripts]# pwd
/etc/sysconfig/network-scripts
 [root@jbxue network-scripts]# cat ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970[PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
HWADDR=00:0c:29:50:ed:1d
 [root@jbxue network-scripts]# catifcfg-eth0.bak
# Advanced Micro Devices [AMD] 79c970[PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
HWADDR=00:0C:29:71:AC:8B
IPADDR=192.168.1.10
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
[root@jbxue network-scripts]#
 

1、先建立/etc/sysconfig/network-scripts/ifcfg-bond0文件,内容如下:
 

复制代码 代码示例:
DEVICE=bond0
NETMASK=255.255.255.0
BROADCAST=192.168.0.255
IPADDR=192.168.0.10
NETWORK=192.168.0.0
ONBOOT=yes
 

测试环境修改:
 

复制代码 代码示例:
[root@jbxue network-scripts]# cpifcfg-eth0.bak ifcfg-bond0
[root@jbxue network-scripts]# catifcfg-bond0
# Advanced Micro Devices [AMD] 79c970[PCnet32 LANCE]
DEVICE=bond0
BOOTPROTO=static
BROADCAST=192.168.1.255
#HWADDR=00:0C:29:71:AC:8B
IPADDR=192.168.1.10
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
[root@jbxue network-scripts]#
 

2、修改/etc/sysconfig/network-scripts/目录下原来的ifcfg-eth0和ifcfg-eth1文件,内容如下:
 

复制代码 代码示例:

BOOTPROTO=none
TYPE=Ethernet
DEVICE=eth0
ONBOOT=yes
MASTER=bond0

BOOTPROTO=none
TYPE=Ethernet
DEVICE=eth1
ONBOOT=yes
MASTER=bond0
 

测试环境:
 

复制代码 代码示例:
[root@jbxue network-scripts]# cat ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970[PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=dhcp–》BOOTPROTO=none
ONBOOT=yes
#HWADDR=00:0c:29:50:ed:1d
TYPE=Ethernet
MASTER=bond0
 

3、在/etc/modprobe.conf文件里增加两行:
 

复制代码 代码示例:
alias bond0 bonding
options bond0 miimon=100 mode=0
 

说明:miimon是用来进行链路监测的。比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有
0,1,2,3四种模式,常用的为0,1两种。
mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。
mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份。
 
4、编辑/etc/rc.d/rc.local文件,添加如下内容:
ifenslave bond0 eth0 eth1
基本创建完成。
 
不重启服务器的情况下,执行:
ifenslave bond0 eth0 eth1;
然后执行:
service network restart
即可使用绑定后的虚拟网卡。