HCIP-ICT实战进阶08-以太网链路的聚合和集群

1 网络可靠性需求

网络可靠性可以从设备、链路多个层面实现, 保持当前设备或链路出现单点或者多点故障时保证网络服务不间断的能力.

网络可靠性

设备可靠性

设备冗余设计的网络中,下游交换机双上行接入, 采用链路一主一备的方式, 主链路上行接口、设备故障可以切换到备份链路, 通过备份设备转发.

链路可靠性

如果需要提升链路带宽:

设备存在多条链路时, 由于STP存在, 实际只有一条链路转发流量, 设备直接按链路带宽无法得到提升.

但关闭STP会导致环路问题, 所以提升带宽需要其他的方法.

2 以太网链路聚合原理&配置

以太网链路聚合(Eth-Trunk): 简称链路聚合, 通过将多个物理接口捆绑成为一个逻辑接口, 可以在不进行硬件升级的条件下, 达到增加链路带宽的同时, 也能实现链路的冗余备份负载分担.

2.1 链路聚合基本概念

链路聚合组和链路聚合接口

链路聚合组(LAG)是多个以太网链路捆绑在一起形成的逻辑接口, 该接口称为链路聚合接口或者Eth-Trunk接口.

注意: Eth-Trunk是指链路聚合, 要和VLAN里的Trunk进行区分.

Eth-Trunk可以配置为trunk/access模式, 又或者是三层IP模式.

成员接口和成员链路

两台设备之间配置进入链路聚合的接口称为成员接口, 两个接口对应的一条链路就是成员链路.

活动接口和活动链路

链路聚合中可以配置成员接口是否参与转发数据, 参与转发数据的接口称为活动接口(selected), 不参与转发数据的备份接口称为非活动接口(unselected), 活动接口之间为活动链路, 非活动接口之间为非活动链路.

2.2 聚合模式

链路聚合有两种方式:

  • 手工链路聚合

  • LACP(Link Aggregation Control Protocol)模式链路聚合

注意: 采用LACP模式的链路聚合称为动态链路聚合, 但是LACP本身是静态的链路聚合.

说人话: 调用静态LACP协议实现动态链路聚合, 这种模式称为LACP模式.

2.2.1 手工链路聚合

Eth-Trunk接口的创建、成员接口的加入都是手工配置的, 配置完成之后, 所有成员接口都是活动接口. 所有接口之间会形成负载分担.

如果有一条链路故障, 故障链路的流量就需要平摊给其他活动链路.

手工模式的应用场景:

  • 有设备不支持LACP模式;
  • 不同厂商之间配置链路聚合(定制化服务会导致设备间可能无法识别);

配置聚合链路时需要保证:

  • 两侧接口数量一致;
  • 两侧活动接口上下限一致;
  • 两侧所有接口类型(光纤/双绞线)一致;
  • 两侧接口带宽一致;
  • 两侧接口工作模式(二层/三层)一致;
  • 两侧活动/非活动接口比例保持一致.

配置命令

  1. 创建Eth-Trunk聚合组:

    int eth-trunk 1

    表示创建编号为1的eth-trunk聚合组, 编号通常为接口号, 该编号(0-127)只在本地有意义, 不会发生设备间的冲突.

    注意: 配置完成后在eth-trunk中无法用dis this查看到配置结果, 需要在物理接口中查看.

  2. 修改聚合组工作模式:

    int eth-trunk 1
    mode manual load-balance

    修改聚合组的工作模式为手工聚合, 但默认下为手工聚合, 所以该命令可以不配置.

  3. 将接口加入聚合组:

    int eth-trunk 1
    trunkport g0/0/1

    聚合组加入g0/0/1;

    int g0/0/1
    eth-trunk 1

    也可以在接口视图下加入聚合组1;

  4. 查看聚合接口:

    dis eth-trunk 1

查看聚合链路接口如图所示:

  • workingmode: 工作模式, 默认为手工模式(normal), 也可以更改为LACP模式(static);
  • Hash arithmetic: 负载分担模式, src-dst-ip为默认模式;
  • least active-linknumber: 活动链路下限;
  • max active-linknumber: 活动链路上限;
  • status: 当前聚合接口状态, 接口为活动/非活动接口;
  • number: 当前聚合接口有几个活动接口.

这些属性也是可以修改的.

手工模式局限

  1. 所有成员接口的对端接口属于同一设备;
  2. 所有成员接口必须加入同一聚合组;
  3. 手工聚合模式没有任何协议报文进行协商, 必须通过管理员人工确认(最大缺陷);
  4. 没有冗余备份, 链路故障会导致其他链路进行分担流量, 导致其他链路工作压力变大.

2.2.2 LACP模式

LACP协议: 链路聚合控制协议((Link Aggregation Control Protocol)), LACP模式就是通过LACP协议进行协商而成的聚合链路.

LACP模式: 根据设备的配置信息和其他参数在两台设备之间自动形成链路聚合, 并且选择活动接口和非活动接口, 最后启动链路聚合接口, 进行数据收发.

LACP协议报文(LACPDU):

LACPDU会携带的参数:

参数 说明
设备优先级 用于区分两端设备优先级高低, 缺省时为32768, 优先级数值越小越优, 成为主动端.
mac地址 当两端设备优先级相同时, mac地址小的设备成为主动端.
接口优先级 主动端设备在同一个聚合组里判断哪些接口可以成为活动接口, 缺省32768, 优先级越小越优.
接口号 接口优先级相同的情况下, 接口号越小越优先.

主动端: 决定哪些成员接口/链路为活动接口/链路, 只有主动端有判断的能力, 被动端不进行接口优选.

LACP活动链路选举

LACP建立eth-trunk的过程.

  1. LACP模式中Eth-Trunk接口加入成员接口之后, 则两端设备会互相发送LACPDU报文.

  2. 两边设备会根据参数确定主动端, 并且由主动端判断自己的接口优先级和接口编号, 然后决定将哪些成员接口变为活动接口, 最后通过LACPUD报文告知对端设备.

LACP抢占

假设有3条链路参与聚合, 2:1.

当活动链路1故障, 非活动链路3会顶替活动链路1继续转发数据, 如果故障的活动链路1恢复正常, 由于LACP默认情况下没有开启LACP抢占功能, 所以活动链路1会保持非活动链路, 链路2、3保持活动链路.

负载分担方式

  • 基于包的负载分担(逐包负载)

    设备会根据数据包到达顺序, 将数据包通过不同成员链路发送出去.

    可能会导致数据帧到达对端的时间不一致, 引发数据乱序.

  • 基于流的负载分担(逐流负载)

    相同的数据源和目的地址, 转发数据包的时候, 从同一个成员链路发送.

配置命令

  1. 创建一个链路聚合组

    int eth-trunk 1

    如果一台设备有多个聚合链路, 该编号需要不同.

  2. 配置LACP

    int eth-trunk 1
    mode lacp-static

    配置静态LACP协议, 进行LACP模式动态聚合链路协商.

    如果手工配置聚合后已经加入了成员接口, 想要更换模式时需要先删除成员接口.

  3. 配置设备优先级:

    int eth-trunk 1
    lacp priority 100

    将设备优先级修改为100.

  4. 配置接口优先级:

    int g0/0/0
    lacp priority

    将接口优先级修改为100.

  5. 加入成员接口: 同手工配置.

  6. 配置活动接口上限/下限

    {max|least} active-linknumber 1

    配置活动接口上限/下限为1, 如果活动接口数量少于/多余该数值, 则不提供链路聚合服务.

    下限min缺省时为1, 通常用于保证链路带宽, 保证用户延迟体验.

    上限max缺省时为8, 通常用于限制活动链路数量, 保证链路可靠性, 实现冗余备份.

  7. 配置LACP抢占模式:

    int eth-trunk
    lacp preempt enbale

    配置后接口优先级/编号小的设备会抢占活动接口, 默认时延为30s, 当然这也是能修改的.

  8. 修改抢占时延:

    int eth-trunk
    lacp preempt delay 1

    修改抢占时延为1s.

  9. 配置负载分担:

    int eth-trunk 1
    load-balance dst-ip
    load-balance dst-mac
    load-balance src-ip
    load-balance src-mac
    load-balance src-dst-ip
    load-balance src-dst-mac

    默认情况下为src-dst-ip.

2.4 典型使用场景

交换机之间

交换机与服务器之间

Eth-Trunk接口连接到服务器的时候要注意, 接口可能需要配置PVID, 然后允许对应的vlan通过, 因为服务器本身是有数据需要转发的, 因此需要有一个PVID用于给服务器使用, 同时服务器上可能会存在虚拟交换机, 虚拟交换机可以为服务器内部的其他虚拟机提供vlan服务,

交换机与堆叠系统

堆叠系统使得两台交换机成为一台逻辑上的设备,交换机与堆叠系统通过链路聚合互联可以组建高可靠、无环的网络。

防火墙双机热备心跳线

防火墙双机热备组网中使用心跳线来检测对端设备的状态, 为防止单端口、单链路故障导致的状态监测错误可以部署Eth-Trunk,使用Eth-Trunk作为检测状态的心跳线.

对防火墙双机热备不熟悉的可以看看我的这篇博客(点不开就是还没发布, 看啥时候有空).

2.5 聚合链路VLAN

在创建的聚合链路上, 可以像在正常接口上一样配置vlan, 但是配置完成后聚合链路的vlan变为0, vlan id在聚合接口上显示.

配置命令

int eth-turnk
port link-type trunk
port trunk allow-vlan 10 20 30
port trunk pvid 10

2.6 E-Trunk

如果A=C=B, 希望A和B的链路聚合在一起

E-Trunk(跨设备链路聚合): 该聚合模式一定要使用LACP模式, 可以实现多台设备连接到一台设备的时候, 多台设备可以将链路聚合在一个聚合接口中.

A和B需要配置E-Trunk和Eth-Trunk, C设备只需要配置Eth-Trunk即可.

3 堆叠/集群概述

3.1 堆叠

堆叠(i-Stack): 多台支持(最多9台)堆叠设备特性的交换机通过堆叠线缆连接在一起, 从逻辑上变成一台设备, 作为一个整体参与数据转发, 适用于华为中低端交换机(盒式交换机), 常用在汇聚层.

盒式交换机

盒式交换机一般端口固定,具备1-2个扩展插槽,可以一个或者几个端口,整机支持端口数一般小于60个,且设备高度一般低于2u(1U就是4.45cm,2U则是1U的2倍为8.9cm)盒式交换机没有主控板卡,交换网板等组件,唯二的冗余就是电源和风扇模块。(一般机架47U)

3.2 集群

集群(Cluster Switch System, CSS): 将两台支持集群特性的交换机设备组合在一起, 从逻辑上组合成一台设备, 适用于华为中高端交换机(框式交换机), 常用在核心层.

其实从概念上来说, 两种方式都是实现物理设备逻辑上虚拟化为一台设备, 最后实现的效果就是数据转发的过程中, 多台设备就是同一个设备.

框式交换机

框式交换机具备独立的主控板(图上红色的两个槽),业务板,电源模块,风扇模块等,端口没有固化, 可以自定义端口,需要通过配置满足实际需求,高度一般10U左右,是自带外框架的网络设备, 支持模块化定制.

3.3 堆叠/集群的优势

  • 交换机多虚一: 堆叠交换机对位表现为一台逻辑交换机, 控制平面合一, 统一管理;
  • 转发平面合一: 堆叠内物理设备转发平面合一, 转发信息共享并实时同步;
  • 阔设备链路聚合: 跨物理设备的链路被聚合成一个Eth-Trunk端口, 和下游设备实现互联.

大部分网络里面, 如果可用做堆叠/集群建议采用堆叠/集群配置网络, 而不是VRRP+MSTP, 因为链路全部采用链路聚合技术, 这个网络拓扑非常清晰, 而且链路全部采用链路聚合技术, 网络带宽没有浪费.

3.4 推荐架构

问题

  1. LACP模式中, 成员接口中活动接口和非活动接口的数量分配是怎样的?

    LACP模式中, 活动链路和非活动链路, 经常以m:n形式出现, 比如希望三条链路中有两条活动链路, 一条非活动链路, 则写为2:1.

  2. LACP模式聚合之后的聚合链路带宽有多少?

    从理论上来说, 聚合链路带宽为活动链路带宽之和.

    但实际上活动链路的带宽值没法完全累加, 会存在损耗, 手工模式同理.

  3. 链路聚合能不能配置在三层(能不能配置完成后配置IP地址)?

    可以, eth-trunk默认为二层模式, 需要在聚合接口上undo portswitch修改为支持三层模式, 之后就能将路由器的接口加入聚合链路, 也可以为聚合接口配置IP地址.

最新文章

  1. log4j使用总结
  2. Java 第7章 数组
  3. WebView中实现文件下载功能
  4. php脚本时 linux命令获取服务器IP
  5. angularjs2 学习笔记(三) 服务
  6. 访问ControlTemplate内部的元素
  7. Sdut 2151 Phone Numbers (山东省ACM第一届省赛题 A)
  8. 列表:一个打了激素的数组2 - 零基础入门学习Python011
  9. JBoss 系列六十九:CDI 基本概念
  10. LeetCode4. Median of Two Sorted Arrays---vector实现O(log(m+n)--- findkth
  11. 网页浏览 infinite scroll效果知识
  12. luogu 2480 古代猪文 数论合集(CRT+Lucas+qpow+逆元)
  13. Django之天天生鲜项目
  14. vue接口地址配一个全局的
  15. linux 查看tcp数量
  16. elk-nginx输出json格式的日志
  17. chrome浏览器直接编辑源码功能的开通办法 - Chrome Workspace
  18. MySQL数据库语法(一)
  19. php index.php修改之后未生效
  20. Python——基础数据类型(补充)

热门文章

  1. final关键字用于修饰局部变量-final关键字用于修饰成员变量
  2. Codeforces Round #849 (Div. 4)
  3. HTTPS基础原理和配置-2
  4. 【亲妈教学】配置Gzip压缩,含前后端步骤
  5. 分布式云原生平台Kurator v0.2.0正式发布!一键构建分布式云原生平台
  6. Serverless Streaming:毫秒级流式大文件处理探秘
  7. Request01
  8. 2021级《JAVA语言程序设计》上机考试试题7
  9. css当文字过长时,显示省略号
  10. 微信小程序-支付