转自 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(主动询问)。
2.将eth1 和 ethe2 通过LACP模式进行聚合
2.1 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