Linux bonding 之balance-alb 原理介绍及其实现


要求:
首先要安装bonding driver 和 ifenslave。bonding driver 是实现网卡绑定的软件基础,它在很多系统中都作为模块而加载。ifenslave 是实现网卡绑定的一个实用工具。

检查系统是否符合这两个要求:
[root@node1 bin]# lsmod | grep bond
bonding                65128  0
说明该模块已经加载
ifensalve 一般在/sbin 路径下面
[root@node1 bin]# which ifenslave
/sbin/ifenslave
说明该使用工具也存在。 

balance-alb 的原理:
网卡绑定有很6种mode, balance-alb 不依赖于swith 的特殊配置,这里讨论此种模式。

网络通信中,两个节点想要通信,必须先知道源与目标的MAC地址。为了让系统能快速地找到远程节点的MAC,每一个本地的内核都保存有一个即时的查询表(ARP缓存)。 ARP中有映射远程主机的IP对应的MAC地址的一个列表。地址解析协议(ARP)缓存是一个TSR的数据结构,由本地的内核来管理的。Default ARP缓存中留有last 10 mins本地系统与之通信的节点的IP地址(和对应的MAC地址)。 

当一个远程MAC存在于本地ARP 缓存中,转换远程节点的IP地址为MAC地址可以直接通信。然而,系统在知道一个远程IP,但MAC不在本地ARP缓存中时,是这样来获取远程MAC的:本地主机发送一个Broadcast package,询问各节点是否有对 
应的IP。回应是唯一的。在回应包中就包含此MAC。在收到返回包后,本地节点就会在本地ARP缓存中记录远程MAC。 

而网卡绑定以后,每个ip可能拥有多个mac地址,究竟将哪个mac地址返回给client,这个就取决于bonding driver。
那balance-alb 来说,就是通过arp 协商决定的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。这样就实现了网络负载均衡。当其中的一个slave 失败,就会由其他的slave来接管,从而提高了网卡的容错能力。

balance-alb 的实现(这里通过修改配置文件实现)
vi /etc/sysconfig/network-script/ifcfg-eth0
DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
vi /etc/sysconfig/network-script/ifcfg-eth1 (同上,把eth1改为eth0 即可)
vi /etc/sysconfig/network-script/ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
添加 bonding 模块:
vi /etc/modules.conf
alias bond0 bonding
options bond0 mode=balance-alb miimon=100
# reboot

  未命名

balance-alb 与 RAC 的Private Network
根据balance-alb,对于只有两个节点的bonding只能提高容错机制,只有在3个或3个以上的节点时,才可能实现workload balance。

相关内容