当两台交换机使用多条链路连接时,一方面可以避免唯一一条线路故障导致链路中断,另一方面也可以提升两台交换机之间的带宽。为了避免环路的产生,交换机通常会只保留一条链路,其他链路阻塞,这样就造成了带宽浪费。这就要使用到链路聚合。

链路聚合常识

链路聚合带来以下好处:

  • 增加带宽:链路聚合接口的最大带宽是其成员接口带宽之和
  • 提高可用性:当一条活跃的链路出现故障时,相关流量会自动切换到其他可用的成员链路上
  • 负载分担:一个虚拟链路组合中的多条活跃的物理链路可以实现负载分担

链路聚合相关概念:

  • 链路聚合组(LAG Link Aggregation Group):多条以太网链路捆绑在一起形成的逻辑链路
  • 链路聚合接口(Eth-trunk接口):一个链路聚合组对应一个链路聚合接口,它是由多个物理接口所连接的链路捆绑在一起形成的逻辑接口
  • 成员接口和成员链路:Eth-trunk接口的每个物理接口成为成员接口,成员接口所连接的链路成为成员链路
  • 活动接口和非活动接口:活动接口负责转发数据,非活动接口不转发数据;活动接口对应的链路被称为活动链路,非活动接口对应的链路被称为非活动链路
  • 活动接口上限阈值:一个链路聚合组中的活动接口的数量由管理员根据实际情况设置;当3G带宽的链路聚合组中捆绑了5个1G的物理接口时,管理员可将活动接口上限设置为3,此时有3条链路进入活跃状态,另外两条链路进入非活跃状态并提供备份。手动配置不支持该设置。
  • 活动接口下限阈值:为保障最小带宽,管理员可以设置活动接口下线阈值,当活动接口链路数量小于该值时,Eth-trunk接口会进入Down状态
  • 链路聚合工作模式:手动模式和LACP(Link Aggregation Control Protocol 链路聚合控制协议)模式

链路聚合模式

将两台交换机的g0/0/10,g0/0/11,g0/0/12接口分别对应连接,此时可以看到3条链路中只有一条链路能够转发数据,其他两条进入阻塞状态。链路聚合配置可以将这3个物理接口捆绑为一个逻辑接口,从而避免STP将物理端口阻塞掉。

1
2
3
4
5
6
7
8
9
10
[SW1]dis stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/10 DESI FORWARDING NONE
0 GigabitEthernet0/0/11 DESI FORWARDING NONE
0 GigabitEthernet0/0/12 DESI FORWARDING NONE
[SW2]dis stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/10 ROOT FORWARDING NONE
0 GigabitEthernet0/0/11 ALTE DISCARDING NONE
0 GigabitEthernet0/0/12 ALTE DISCARDING NON

手动模式

以太网链路聚合手动配置需要以下两个步骤:

  • interface eth-trunk trunk-id:系统视图命令,创建Eth-Trunk接口并进入接口视图
  • mode manual load-balance(可选):接口视图命令,设置链路聚合模式为手工模式
  • 接口加入Eth-Trunk:使用两种方式之一添加接口成员
    • trunkport interface-type {interface-number} [to interface-number] 添加接口成员,在添加多个接口时,如果某个接口添加失败,则它后面的接口也不会被加入Eth-Trunk
    • eth-trunk trunk-id 进入某个接口,将当前接口加入到Eth-Trunk中
  • mixed-rate link enable:接口视图命令,把不同速率的端口添加到同一个Eth-Trunk端口中。

交换机端口加入Eth-Trunk时,注意:

  • 每个Eth-Trunk接口最多包含8个成员接口
  • Eth-Trunk接口的成员接口不能是其他Eth-Trunk接口
  • 一个以太网端口只能加入一个Eth-Trunk接口,如果要加入其他的Eth-Trunk接口,需要先退出当前接口
  • 当一个以太网端口被配置为Eth-Trunk接口成员后,与其直连的对端以太网端口也必须配置为Eth-Trunk端口,以便两端能正常通信
  • Eth-Trunk链路两端的参数必须保持一致,包括物理端口数量,速率,双工方式等

可以使用display eth-trunk trunk-id来查看配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[SW1]interface Eth-Trunk 1
[SW1-Eth-Trunk1]trunkport GigabitEthernet 0/0/10 to 0/0/12

[SW2]interface Eth-Trunk 1
[SW2-Eth-Trunk1]q
[SW2]interface g0/0/10
[SW2-GigabitEthernet0/0/10]eth-trunk 1
[SW2-GigabitEthernet0/0/10]int g0/0/11
[SW2-GigabitEthernet0/0/11]eth-trunk 1
[SW2-GigabitEthernet0/0/11]int g0/0/12
[SW2-GigabitEthernet0/0/12]eth-trunk 1

# WorkingMode: NORMAL 表明是手工配置
[SW1]dis eth-trunk 1
Eth-Trunk1's state information is:
WorkingMode: NORMAL Hash arithmetic: According to SIP-XOR-DIP
Least Active-linknumber: 1 Max Bandwidth-affected-linknumber: 8
Operate status: up Number Of Up Port In Trunk: 3
--------------------------------------------------------------------------------
PortName Status Weight
GigabitEthernet0/0/10 Up 1
GigabitEthernet0/0/11 Up 1
GigabitEthernet0/0/12 Up 1

此时查看STP状态,发现STP不在基于每个物理端口进行计算,而是基于Eth-Trunk进行计算

1
2
3
[SW1]dis stp brief
MSTID Port Role STP State Protection
0 Eth-Trunk1 DESI FORWARDING NONE

LACP模式

当两台交换机通过LACP模式搭建Eth-Trunk链路时,它们之间需要先交互LACPDU(LACP Data Unit,LACP数据单元)进行协商,确保对端成员确实属于同一个Eth-Trunk接口。
在更改Eth-Trunk接口的工作模式时,我们需要先删除其中的成员接口(部分交换机不需要,根据配置手册来)。手动模式时,只要Eth-Trunk接口中加入了UP状态的成员接口,Eth-Trunk接口就会进入到UP状态;在LACP模式时,只有当链路两端的配置都完成,并且两端接口参数相同,LACP才会将Eth-Trunk接口进入UP状态。

  • mode lacp-static:Eth-Trunk接口视图命令,将本接口配置为LACP模式(默认的工作模式为手动模式 manual)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 先删除端口,再更改模式
[SW1]int Eth-Trunk 1
[SW1-Eth-Trunk1]undo trunkport GigabitEthernet 0/0/10 to 0/0/12
[SW1-Eth-Trunk1]mode lacp-static
[SW1-Eth-Trunk1]trunkport GigabitEthernet 0/0/10 to 0/0/12

[SW2]int Eth-Trunk 1
[SW2-Eth-Trunk1]undo trunkport GigabitEthernet 0/0/10 to 0/0/12
[SW2-Eth-Trunk1]mode lacp-static
[SW2-Eth-Trunk1]trunkport GigabitEthernet 0/0/10 to 0/0/12

# WorkingMode: STATIC标明是LACP模式
[SW1]dis eth-trunk 1
Eth-Trunk1's state information is:
Local:
LAG ID: 1 WorkingMode: STATIC
Preempt Delay: Disabled Hash arithmetic: According to SIP-XOR-DIP
System Priority: 32768 System ID: 4c1f-ccd5-7970
Least Active-linknumber: 1 Max Active-linknumber: 8
Operate status: up Number Of Up Port In Trunk: 3
--------------------------------------------------------------------------------
ActorPortName Status PortType PortPri PortNo PortKey PortState Weight
GigabitEthernet0/0/10 Selected 1GE 32768 11 305 10111100 1
GigabitEthernet0/0/11 Selected 1GE 32768 12 305 10111100 1
GigabitEthernet0/0/12 Selected 1GE 32768 13 305 10111100 1

Partner:
--------------------------------------------------------------------------------
ActorPortName SysPri SystemID PortPri PortNo PortKey PortState
GigabitEthernet0/0/10 32768 4c1f-cce9-3ef5 32768 11 305 10111100
GigabitEthernet0/0/11 32768 4c1f-cce9-3ef5 32768 12 305 10111100
GigabitEthernet0/0/12 32768 4c1f-cce9-3ef5 32768 13 305 10111100

最小和最大活动链路数量

  • least active-linknumber link-number:Eth-Trunk接口视图命令,设置链路聚合活动接口数量的下限阈值,默认情况是1,当链路两端下限阈值不一致时,以较大的为准
  • max active-linknumber link-number:Eth-Trunk接口视图命令,设置链路聚合活动接口数量的上限阈值,默认情况时8,当链路两端上限不一致时,以较小的为准
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    [SW1]int Eth-Trunk 1
    [SW1-Eth-Trunk1]least active-linknumber 2
    [SW1-Eth-Trunk1]max active-linknumber 2

    # g0/0/12端口进入unselect状态, 尽管SW2的参数未发生改变,SW2的g0/0/12端口也会进入unselect状态,但是配置尽量保持一致
    [SW1]dis eth-trunk 1
    Eth-Trunk1s state information is:
    Local:
    LAG ID: 1 WorkingMode: STATIC
    Preempt Delay: Disabled Hash arithmetic: According to SIP-XOR-DIP
    System Priority: 32768 System ID: 4c1f-ccd5-7970
    Least Active-linknumber: 2 Max Active-linknumber: 2
    Operate status: up Number Of Up Port In Trunk: 2
    --------------------------------------------------------------------------------
    ActorPortName Status PortType PortPri PortNo PortKey PortState Weight
    GigabitEthernet0/0/10 Selected 1GE 32768 11 305 10111100 1
    GigabitEthernet0/0/11 Selected 1GE 32768 12 305 10111100 1
    GigabitEthernet0/0/12 Unselect 1GE 32768 13 305 10100000 1

    Partner:
    --------------------------------------------------------------------------------
    ActorPortName SysPri SystemID PortPri PortNo PortKey PortState
    GigabitEthernet0/0/10 32768 4c1f-cce9-3ef5 32768 11 305 10111100
    GigabitEthernet0/0/11 32768 4c1f-cce9-3ef5 32768 12 305 10111100
    GigabitEthernet0/0/12 32768 4c1f-cce9-3ef5 32768 13 305 10110000

    [SW2]int Eth-Trunk 1
    [SW2-Eth-Trunk1]least active-linknumber 2
    [SW2-Eth-Trunk1]max active-linknumber 2

LACP系统优先级

在LACP模式中,链路两端的设备会根据管理员的配置或者默认规则,选择Eth-Trunk中的活动接口,只有当两端选择的活动接口一致时,才能正常工作。LACP系统优先级的作用时设置链路哪端的设备为主动端,并由它来决定活动接口的选择。

  • lacp priority priority:系统视图命令,设置当前设备的LACP系统优先级,默认值:32768,值越低,优先级越高。如果优先级相同,则MAC地址较小的一端会成为主动端。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [SW1]lacp priority 30000

    # System Priority: 30000 显示更改的值
    [SW1]dis eth-trunk 1
    Eth-Trunk1's state information is:
    Local:
    LAG ID: 1 WorkingMode: STATIC
    Preempt Delay: Disabled Hash arithmetic: According to SIP-XOR-DIP
    System Priority: 30000 System ID: 4c1f-ccd5-7970
    Least Active-linknumber: 2 Max Active-linknumber: 2
    Operate status: up Number Of Up Port In Trunk: 2

LACP接口优先级

LACP接口优先级是选择活动接口的标准

  • lacp priority priority:接口视图命令,设置当前接口的LACP优先级,默认值:32768,值越低,优先级越高。如果优先级相同,接口ID较小的优先级较高。
  • **lacp selected {priority|speed}**:接口视图命令,建议具有相同速率的接口捆绑为聚合链路;如果接口速率不同,可能会选择速率较低的接口成为活动接口。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    [SW1]int g0/0/10
    [SW1-GigabitEthernet0/0/10]lacp priority 40000

    # 发现g0/0/10没有成为非活动接口,此时需要开启LACP抢占功能
    [SW1]dis eth-trunk 1
    Eth-Trunk1s state information is:
    Local:
    LAG ID: 1 WorkingMode: STATIC
    Preempt Delay: Disabled Hash arithmetic: According to SIP-XOR-DIP
    System Priority: 30000 System ID: 4c1f-ccd5-7970
    Least Active-linknumber: 2 Max Active-linknumber: 2
    Operate status: up Number Of Up Port In Trunk: 2
    --------------------------------------------------------------------------------
    ActorPortName Status PortType PortPri PortNo PortKey PortState Weight
    GigabitEthernet0/0/10 Selected 1GE 40000 11 305 10111100 1
    GigabitEthernet0/0/11 Selected 1GE 32768 12 305 10111100 1
    GigabitEthernet0/0/12 Unselect 1GE 32768 13 305 10100000 1

    Partner:
    --------------------------------------------------------------------------------
    ActorPortName SysPri SystemID PortPri PortNo PortKey PortState
    GigabitEthernet0/0/10 32768 4c1f-cce9-3ef5 32768 11 305 10111100
    GigabitEthernet0/0/11 32768 4c1f-cce9-3ef5 32768 12 305 10111100
    GigabitEthernet0/0/12 32768 4c1f-cce9-3ef5 32768 13 305 1010000

LACP抢占功能

LACP抢占功能可以使优先级较高的接口总是能够成为活动接口。当高优先级接口由于故障切换到非活动状态再次恢复时,抢占功能可以使高优先级接口抢占低优先级接口,成为活动接口。
配置抢占功能的同时,为其配置一个时延,也就是非活动接口切换为活动接口之前需要等待的时间,避免链路切换导致Eth-Trunk中的数据传输不稳定

  • lacp preempt enable:Eth-Trunk接口视图命令,为当前Eth-trunk接口启用LACP的抢占功能
  • lacp preempt delay delay-time:Eth-Trunk接口视图命令,为当前Eth-trunk配置LACP抢占时延,默认时延是30s

链路两端都进行相同的配置时,才会触发抢占功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[SW1]interface Eth-Trunk 1
[SW1-Eth-Trunk1]lacp preempt enable
[SW1-Eth-Trunk1]lacp preempt delay 10

[SW2]int g0/0/10
[SW2-GigabitEthernet0/0/10]lacp priority 40000
[SW2]int Eth-Trunk 1
[SW2-Eth-Trunk1]lacp preempt enable
[SW2-Eth-Trunk1]lacp preempt delay 10

[SW1]dis eth-trunk 1
Eth-Trunk1s state information is:
Local:
LAG ID: 1 WorkingMode: STATIC
Preempt Delay Time: 10 Hash arithmetic: According to SIP-XOR-DIP
System Priority: 30000 System ID: 4c1f-ccd5-7970
Least Active-linknumber: 2 Max Active-linknumber: 2
Operate status: up Number Of Up Port In Trunk: 2
--------------------------------------------------------------------------------
ActorPortName Status PortType PortPri PortNo PortKey PortState Weight
GigabitEthernet0/0/10 Unselect 1GE 40000 11 305 10100000 1
GigabitEthernet0/0/11 Selected 1GE 32768 12 305 10111100 1
GigabitEthernet0/0/12 Selected 1GE 32768 13 305 10111100 1

Partner:
--------------------------------------------------------------------------------
ActorPortName SysPri SystemID PortPri PortNo PortKey PortState
GigabitEthernet0/0/10 32768 4c1f-cce9-3ef5 40000 11 305 10100000
GigabitEthernet0/0/11 32768 4c1f-cce9-3ef5 32768 12 305 10111100
GigabitEthernet0/0/12 32768 4c1f-cce9-3ef5 32768 13 305 10111100

测试LACP备用接口

通过模拟SW1的g0/0/11接口故障,观察Eth-Trunk中活动的接口的切换。当SW1的g0/0/11故障(关闭)时,Eth-Trunk状态迅速完成了切换,g0/0/10从非活跃状态切换为活跃状态,无须等待10s,只要当g0/0/11恢复后,由于g0/0/11的优先级高于g0/0/10而要抢占活动接口,LACP抢占才会时延10s。即:发生故障立即切换不等待,故障恢复抢占需等待时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[SW1]int g0/0/11
[SW1-GigabitEthernet0/0/11]shutdown
[SW1]dis eth-trunk 1
Eth-Trunk1s state information is:
Local:
LAG ID: 1 WorkingMode: STATIC
Preempt Delay Time: 10 Hash arithmetic: According to SIP-XOR-DIP
System Priority: 30000 System ID: 4c1f-ccd5-7970
Least Active-linknumber: 2 Max Active-linknumber: 2
Operate status: up Number Of Up Port In Trunk: 2
--------------------------------------------------------------------------------
ActorPortName Status PortType PortPri PortNo PortKey PortState Weight
GigabitEthernet0/0/10 Selected 1GE 40000 11 305 10111100 1
GigabitEthernet0/0/11 Unselect 1GE 32768 12 305 10100010 1
GigabitEthernet0/0/12 Selected 1GE 32768 13 305 10111100 1

Partner:
--------------------------------------------------------------------------------
ActorPortName SysPri SystemID PortPri PortNo PortKey PortState
GigabitEthernet0/0/10 32768 4c1f-cce9-3ef5 40000 11 305 10111100
GigabitEthernet0/0/11 0 0000-0000-0000 0 0 0 10100011
GigabitEthernet0/0/12 32768 4c1f-cce9-3ef5 32768 13 305 10111100

[SW1-GigabitEthernet0/0/11]undo shutdown
[SW1]dis eth-trunk 1
Eth-Trunk1s state information is:
Local:
LAG ID: 1 WorkingMode: STATIC
Preempt Delay Time: 10 Hash arithmetic: According to SIP-XOR-DIP
System Priority: 30000 System ID: 4c1f-ccd5-7970
Least Active-linknumber: 2 Max Active-linknumber: 2
Operate status: up Number Of Up Port In Trunk: 2
--------------------------------------------------------------------------------
ActorPortName Status PortType PortPri PortNo PortKey PortState Weight
GigabitEthernet0/0/10 Unselect 1GE 40000 11 305 10100000 1
GigabitEthernet0/0/11 Selected 1GE 32768 12 305 10111100 1
GigabitEthernet0/0/12 Selected 1GE 32768 13 305 10111100 1

Partner:
--------------------------------------------------------------------------------
ActorPortName SysPri SystemID PortPri PortNo PortKey PortState
GigabitEthernet0/0/10 32768 4c1f-cce9-3ef5 40000 11 305 10100000
GigabitEthernet0/0/11 32768 4c1f-cce9-3ef5 32768 12 305 10111100
GigabitEthernet0/0/12 32768 4c1f-cce9-3ef5 32768 13 305 10111100

测试活动链路阈值

前面设定Eth-Trunk 1 的活动链路下限阈值是2,如果当前配置关闭两个端口g0/0/11和g0/0/12,只留下一个端口g0/0/10,会导致Eth-Trunk 1变为down状态。

  • display trunkmembership eth-trunk 1:查看Eth-Trunk接口的状态以及成员接口的状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[SW1]int g0/0/11
[SW1-GigabitEthernet0/0/11]shutdown
[SW1]int g0/0/12
[SW1-GigabitEthernet0/0/12]shutdown

# 所有接口都是非活动状态 Operate status: down
[SW1]display trunkmembership eth-trunk 1
Trunk ID: 1
Used status: VALID
TYPE: ethernet
Working Mode : Static
Number Of Ports in Trunk = 3
Number Of Up Ports in Trunk = 0
Operate status: down
Interface GigabitEthernet0/0/10, valid, operate down, weight=1
Interface GigabitEthernet0/0/11, valid, operate down, weight=1
Interface GigabitEthernet0/0/12, valid, operate down, weight=1

[SW1]int g0/0/11
[SW1-GigabitEthernet0/0/11]undo shutdown
[SW1]int g0/0/12
[SW1-GigabitEthernet0/0/12]undo shutdown

再次开启g0/0/11和g0/0/12,Eth-trunk 1恢复正常。

1
2
3
4
5
6
7
8
9
10
11
12
[SW1-GigabitEthernet0/0/11]q
[SW1]dis trunkmembership eth-trunk 1
Trunk ID: 1
Used status: VALID
TYPE: ethernet
Working Mode : Static
Number Of Ports in Trunk = 3
Number Of Up Ports in Trunk = 2
Operate status: up
Interface GigabitEthernet0/0/10, valid, operate down, weight=1
Interface GigabitEthernet0/0/11, valid, operate up, weight=1
Interface GigabitEthernet0/0/12, valid, operate up, weight=1

LACP负载分担方式

可以通过配置LACP负载分担方式,将不同的数据流分布在不同的活动链路上,为了避免发生数据包乱序情况,应设置通过同一条活动链路发送同一个数据流。使用散列算法生成数据流的散列值,交换机根据散列值在Eth-Trunk中选择对应的出接口,每条数据流计算出的散列值不同,这样既保证了通过同一条链路发送同一个数据流的数据帧,也能够让多条活动链路负载分担不同的数据流。
散列值计算因素:

  • 目的IP地址
  • 目的MAC地址
  • 源IP地址
  • 源MAC地址
  • 源IP地址异或目的IP地址
  • 源MAC地址异或目的MAC地址

Eth-Trunk链路两端设备上的负载分担方式可以不一致,因为负载分担只对本地设备出方向的流量有效果,所以两端配置互相不影响。

  • load-balance {dst-ip | dst-mac |src-ip|src-mac|src-dst-ip|src-dst-mac}:Eth-Trunk接口视图命令,配置Eth-Trunk的负载分担方式
1
2
3
4
5
6
7
8
9
10
11
12
[SW1]interface Eth-Trunk 1
[SW1-Eth-Trunk1]load-balance src-mac

# Hash arithmetic: According to SA 基于源MAC地址(SA)
[SW1]display eth-trunk 1
Eth-Trunk1's state information is:
Local:
LAG ID: 1 WorkingMode: STATIC
Preempt Delay Time: 10 Hash arithmetic: According to SA
System Priority: 30000 System ID: 4c1f-ccd5-7970
Least Active-linknumber: 2 Max Active-linknumber: 2
Operate status: up Number Of Up Port In Trunk: 2

堆叠模式

多条物理链路可以捆绑为一条虚拟的逻辑链路,多台物理交换机也可以捆绑为一台逻辑上的交换机,以此提升冗余性,这就是堆叠技术。使用堆叠技术的几台交换机可以根据交换机的启动状态,优先级和MAC地址选举一台主交换机,这台主交换机负责管理逻辑交换机,并从其他交换机收集网络拓扑信息,同时选举一台备用交换机,在主交换机故障时接替主交换机。在完成选举后,其他交换机都会同步并运行主交换机的配置文件。管理员只需要对主交换机发起管理就可以管理整个堆叠。

  • 集群:使用华为S12700系列的框式交换机完成堆叠,称为CSS(Cluster Switch System)集群交换机系统,只支持两台交换机
  • 智能堆叠:使用华为S5700系列的盒式交换机,称为iStack(intelligent Stack)智能堆叠,支持多台交换机