linux 网卡bond绑定

Bond技术原理

Bond 就是将多块网卡虚拟成为一块网卡的技术,通过 bond 技术让多块网卡看起来是一个单独的以太网接口设备并具有相同的 IP 地址。

Bond 的原理是网卡在混杂 (promisc) 模式下运行;在这种模式下,网卡不像在通常情况下,只接收目的硬件地址是自身 Mac 的以太网帧,对于别的数据帧都滤掉,以减轻驱动程序的负担;而是接收网络上所有的数据帧,而且修改了驱动程序中的 mac 地址,将两块网卡的 Mac 地址改成相同,可以接收特定 mac 的数据帧,然后把相应的数据帧传送给 bond 驱动程序处理。

    为了实现多块网卡的协同工作,Bond 模式将自己的 MAC 地址复制到各个物理网卡上,让所有的网卡共享同一个 MAC 地址。这个方式就要求所有的网卡都要支持 BIOS,这样才能够让操作系统将 MAC 地址写到网卡上;对于不支持 BIOS 读写的网卡而言,重起以后就恢复到网卡上 MAC 地址,服务器可能无法根据记录的 MAC 地址找到相对应的网卡。

    对于单物理网卡的 Bond 网卡而言,Bond 网卡的 MAC 地址和物理网卡的物理地址是一致的;对于多物理网卡的 Bond 网卡而言,其中一块物理网卡会被设置为 Master,其他的网卡都是 Slave,Bond 网卡的 MAC 地址取自标志为 Master 的物理网卡,然后将这个 MAC 地址复制到其他物理网卡上。所以在指定用于安装 Linux 的网卡时,我们需要指定 Bond 网卡,以及 Bond 网卡所对应的标志为 Master 的物理网卡。(如果没有人为干预,一般情况下 Linux 所识别到的第一块网卡会被标志为 Master,也即使 eth0;对于有特殊配置的 Bond 网卡,需要根据具体的 Bond 配置情况来进行指定。)

下图是实验过程中的截图说明bond在工作过程中将驱动程序中的网卡mac改成形同:

650) this.width=650;” >

bond的几种工作模式:

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 自动适应负载均衡策略。

下面以实例说明bond的工作原理:

实验拓扑:

650) this.width=650;” >

实验说明:

在虚拟机中linux系统中配置bond 增加为两块网卡,配置好后用物理机ping linux系统所在主机,过程中将一块网卡断掉测试结果

编辑网卡参数相关文件让网卡公用一个ip:

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=dhcp —— 使eth0自动获得地址

ONBOOT=yes

TYPE=Ethernet

~                                                                                                                                                                                             

~                                                                                                                                                                                             

~               

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth1

BOOTPROTO=dhcp          ——-使eth1自动获得地址

ONBOOT=yes

~                                                                                                                                                                                             

~                                                                                                                                                                                             

~  配置bond的参数 ,使bond0拥有个ip可供两个网卡使用

~                                                                                                                                                                                             

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0 

[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-bond0

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0                                                                                                                                                                                         

~            

DEVICE=bond0

BOOTPROTO=none

APADDR=192.168.2.99            ——给bond0一个静态地址

NETMASK=255.255.255.0

ONBOOT=yes

~

修改模块的配置文件 可以使bond加载驱动

[root@localhost network-scripts]# vim /etc/modprobe.conf

alias eth0 pcnet32

alias bond0 bonding

alias scsi_hostadapter mptbase

alias scsi_hostadapter1 mptspi

alias scsi_hostadapter2 ata_piix

alias snd-card-0 snd-ens1371

options bond0 miimon=100 mode=1 —-给bond0 一定参数 表示网络监视间隔为100ms 模式为1

options snd-card-0 index=0

options snd-ens1371 index=0

remove snd-ens1371 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r –ignore-remove snd-ens1371

alias eth1 pcnet32

~                                                                                                                                                                                             

~    

修改开机脚本使bond0在开机的时候能够启动

[root@localhost network-scripts]# vim /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

ifenslave bond0 eth0 eth1 —将bond0 eth0 eth1 绑定 加到开机脚本

~                                          

650) this.width=650;” >

测试结果:

当把其中的一个网卡关掉的时候 只是丢失了一个包仍是能够通讯

650) this.width=650;” >

650) this.width=650;” >

650) this.width=650;” >

 

 

当把mode改为0时仍然具有耐故障功能只是丢了一个包仍能通讯,下面为测试结果:

 

650) this.width=650;” >

650) this.width=650;” >

 

当把mode改为3时仍然具有耐故障功能丢一个包继续通讯,下面为测试结果:

650) this.width=650;” >

 

 

见过旅行风景,就这样,慢慢学会了长大。

linux 网卡bond绑定

相关文章:

你感兴趣的文章:

标签云: