以太网链路聚合控制协议(LACP)(链路聚合控制协议:将多个端口虚机成一个逻辑端口来提高链路速度, Active/Active 模式)

时间:2024-01-31 18:39:16

转自 http://storage.chinabyte.com/64/12541564.shtml http://lolo77.blog.51cto.com/941571/295075

   

1.LACP的概念

在过去的10年里,以太网线速(Line Rate)的发展从10Mb/s -> 100Mb/s -> 1Gb/s -> 10Gb/s(40GE和100GE也已出现),而然有的时候single 10GE link依然无法满足VLAN Trunk或iSCSI/FCoE 流量对带宽和冗余性的需求。于是链路聚合(Link Aggregation,LA)技术出现了,这是一种将多个网络链路合并成单条逻辑链路,从而提供更大带宽和冗余的网络技术。

  注:本文多次用到Link Aggregation、Port Aggregation、Port Channel、Link Channel等术语,如未特别指出,可认为是同一个意思。

  Link Aggregation

  不同厂商交换机的端口聚合(Port Aggregation,PA) 采用不同术语,Cisco的EtherChannel,Brocade的Brocade LAG,还有基于标准的IEEE 802.3ad LACP(Link Aggregation Control Protocol,该标准在2008年被转入IEEE 802.1ax),LACP可以动态配置端口聚合,且不依赖任何厂商,因此大部分以太网交换机都支持该协议。所有这些实现的目标都是一致的,即将两个或多个端口绑定在一起作为一个高带宽的逻辑端口来提升链路速度、冗余、弹性和负载均衡。技术上来讲,我们可以在交换机之间使用多个端口创建并行trunk链路,但生成树协议(STP)将其视为环路,从而会关闭所有可能造成环路的链接。端口聚合生成single logical link,不会造成环路,可作为Access Port(连接主机)或Trunk Port(承载Multi-VLAN traffic)使用。

在使用LA技术之前,有必要了解如下技术属性:

  兼容性/正常运行:聚合链路每一端的交换机或主机必须理解或使用公共的端口聚合技术

  负载均衡:通过哈希算法在single link中区分不同的traffic pattern来实现

  链路冗余:如果逻辑链路中的一条物理链路故障,流量转走临近的链路,故障转移时间一般小于几个毫秒。一旦失败链路恢复,流量会重新分布。

  在选择端口做端口聚合或端口隧道(port channel)时,每个端口需要互相兼容,可以在允许将端口加入端口聚合组(Port Channel Group)之前,检查端口的运行属性,兼容性检查通常包括以下接口运行属性:

  Port Mode

  Access VLAN

  Trunk native VLAN

  允许的VLAN列表

  Speed

  Link Aggregation Control Protocol (LACP)

  LACP 是通过向所有启用LACP协议的链路发送LACPDU Frame来工作的,如果发现链路另一端的设备也启用了LACP,LACP将独自在同一条链路上发送Frame,使得两者能够发现它们之间的多条链路,并将它们合并成单条逻辑链路。

  LACP可以配置为两种模式中的一种:Active 或 Passive。在Active模式下,LACP主动在配置的链路上发送Frame;在Passive模式下,LACP的反应是“speak when spoken to”,从而可以作为控制意外环路的一种方法(只要其他设备在Active模式下)。

  IEEE 802.3ad定义的LAC(Link Aggregation Group)是一个允许交换机自动协商端口绑定链路的协议,通过发送LACP Frame给Peer来实现。这些Frame在支持port channel的交换机端口之间进行交换,从而学习【邻居身份】以及【port group capability】并与本地交换机对比,然后LACP为port channel的端点分配角色。

      系统优先级最低的交换机根据端口优先级决定哪些端口可在某一时段作为端口聚合的Active port。例如,一组8 link的port channel,在任何时候LACP选择4个优先级最高的端口作为Active port,通常数值越小的端口优先级越高。另外8条链路置于hot-standby状态,如果一条Active Link down,就会激活其它的链路。端口优先级是可配置的,如果没有配置,则使用不同厂商自己的默认值。如果端口使用了相同的值,厂商通常会实现一个“tie breaker”,比如lower port number作为Active port,即port 1/1 > port 1/5。

  Port Channel中的每一个端口必须分配同样且唯一的channel group number,LACP自动在【配置为使用LACP的端口上】配置一个等于channel group number的管理键值(Administrative key value),该管理键值定义了端口与其他端口聚合的能力(ability)。一个端口与其他端口做聚合的能力取决于带宽、双工模式、点对点或共享介质的状态。通道协商必须设置为ON(无条件通道;没有LACP协商),Passive(被动监听并等待询问)或Active(主动询问)。

链路聚合是指将交换机之间或者交换机与其它设备之间的多条线路合并成一条线路。既增加带宽,也增加了可靠性。
链路聚合是交换机上支持的一种技术,它把两个交换机之间两条以上同时相连的链路虚拟成为一条链路来传输信息。
链路聚合技术亦称主干技术(Trunking)或捆绑技术(Bonding),其实质是将两台设备间的数条物理链路“组合”成逻辑上的一条数据通路,称为一条聚合链路,如下图示意。交换机之间物理链路Link 1、Link2和Link3组成一条聚合链路。该链路在逻辑上是一个整体,内部的组成和传输数据的细节对上层服务是透明的。
合内部的物理链路共同完成数据收发任务并相互备份。只要还存在能正常工作的成员,整个传输链路就不会失效。仍以上图的链路聚合为例,如果Link1和Link2先后故障,它们的数据任务会迅速转移到Link3上,因而两台交换机间的连接不会中断。

 

链路聚合的优点
从上面可以看出,链路聚合具有如下一些显著的优点:
1、提高链路可用性:链路聚合中,成员互相动态备份。当某一链路中断时,其它成员能够迅速接替其工作。与生成树协议不同,链路聚合启用备份的过程对聚合之外是不可见的,而且启用备份过程只在聚合链路内,与其它链路无关,切换可在数毫秒内完成。
2、增加链路容量:聚合技术的另一个明显的优点是为用户提供一种经济的提高链路传输率的方法。通过捆绑多条物理链路,用户不必升级现有设备就能获得更大带宽的数据链路,其容量等于各物理链路容量之和。聚合模块按照一定算法将业务流量分配给不同的成员,实现链路级的负载分担功能。某些情况下,链路聚合甚至是提高链路容量的唯一方法。例如当市场上的设备都不能提供高于10G的链路时,用户可以将两条10G链路聚合,获得带宽大于10G的传输线路。
3、价格便宜,性能接近千兆以太网。
4、不需重新布线,也无须考虑千兆网令人头疼的传输距离极限。
5、Trunking可以捆绑任何相关的端口,也可以随时取消设置,这样提供了很高的灵活性。
6、Trunking可以提供负载均衡能力以及系统容错。由于Trunking实时平衡各个交换机端口和服务器接口的流量,一旦某个端口出现故障,它会自动把故障端口从Trunking组中撤消,进而重新分配各个Trunking端口的流量,从而实现系统容错。
此外,特定组网环境下需要限制传输线路的容量,既不能太低影响传输速度,也不能太高超过网络的处理能力。但现有技术都只支持链路带宽以10为数量级增长,如10M、100M、1000M等。而通过聚合将n条物理链路捆绑起来,就能得到更适宜的、n倍带宽的链路。
 

2.将eth1 和 ethe2 通过LACP模式进行聚合

2.1 Linux网卡的绑定模式

linux有七种网卡绑定模式: 
  • bond0:round-robin, 轮询。各接口轮流使用。需要交换机支持。交换机要配置成聚合口
  • bond1:active-backup, 主备。即只有一个接口在使用,当接口出现问题的时候再切换到别的接口
  • bond2:load balancing(xor), 根据数据的目的mac地址计算使用的端口。
  • bond3:broadcast, 所有数据在每个接口都复制一份
  • bond4:lacp, IEEE 802.3ad动态链路聚合。创建共享相同的速率和双工模式的聚合组。能根据802.3ad规范利用所有的slave来建立聚合链路。Salve的出站选择取决于传输的hash策略,默认策略是简单的XOR策略,而hash策略则可以通过xmit_hash_policy选项加以改变。
  • bond5:对外出流量负载均衡
  • bond6:通过修改ARP包实现负载均衡, 即对到来的arp请求依据一定策略使用不通过的arp进行回复

 2.2 示例:将eth1和eth2两张网卡使用mode 4 也就是LACP模式进行绑定 

auto bond0
iface bond0 inet manual
   bond-slaves eth2 eth1
   bond-miimon 100
   bond-mode 4
   bond-lacp-rate 1
   bond-xmit-hash-policy 2
   mtu 9000
auto eth2
iface eth2 inet manual
bond-master bond0
auto eth1
iface eth1 inet manual
bond-master bond0
auto bond0.1600
iface bond0.1600 inet static
   address 10.0.1.108
   netmask 255.255.255.0
   up ip route add 10.0.0.0/16 via 10.0.1.1 dev bond0.1600 || true