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地址.

HCIP-ICT实战进阶08-以太网链路的聚合和集群的更多相关文章

  1. Linux实战教学笔记31:Keepalived高可用集群应用实践

    1.1 Keepalived高可用软件 1.1.1 Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入 ...

  2. Redis进阶实践之十一 Redis的Cluster集群搭建

    一.引言      本文档只对Redis的Cluster集群做简单的介绍,并没有对分布式系统的详细概念做深入的探讨.本文只是提供了有关如何设置集群.测试和操作集群的说明,而不涉及Redis集群规范中涵 ...

  3. 实战中的asp.net core结合Consul集群&Docker实现服务治理

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在写这篇文章之前,我看了很多关于consul的服务治理,但发现基本上都是直接在powershell或者以命令工具的方式在 ...

  4. Kubernetes实战总结 - 阿里云ECS自建K8S集群

    一.概述 详情参考阿里云说明:https://help.aliyun.com/document_detail/98886.html?spm=a2c4g.11186623.6.1078.323b1c9b ...

  5. 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第五步)(2)

    把下载下来的"hadoop-2.2.0.tar.gz"复制到"/usr/local/hadoop/"文件夹下并解压: 改动系统配置文件,改动~/.bashrc文 ...

  6. Hadoop入门进阶步步高(五)-搭建Hadoop集群

    五.搭建Hadoop集群 上面的步骤,确认了单机能够运行Hadoop的伪分布运行,真正的分布式运行无非也就是多几台slave机器而已,配置方面的有一点点差别,配置起来就很easy了. 1.准备三台se ...

  7. Redis进阶实践之十 Redis主从复制的集群模式

    一.引言        Redis的基本数据类型,高级特性,与Lua脚本的整合等相关知识点都学完了,说是学完了,只是完成了当前的学习计划,在以后的时间还需继续深入研究和学习.从今天开始来讲一下有关Re ...

  8. Redis项目实战---应用及理论(二)---Redis集群原理

    一. Redis官方推荐集群方案:Redis Cluster 适用于redis3.0以后版本,        redis cluster 是redis官方提供的分布式解决方案,在3.0版本后推出的,有 ...

  9. Redis实战(十三)Redis的三种集群方式

    序言 能聊聊redis cluster集群模式的原理吗 资料 https://www.cnblogs.com/51life/p/10233340.html Redis 集群分片原理

  10. Nginx网络架构实战学习笔记(六):服务器集群搭建、集群性能测试

    文章目录 服务器集群搭建 Nginx---->php-fpm之间的优化 302机器 202机器 压力测试 搭建memcached.mysql(数据准备) 今晚就动手-.- 集群性能测试 服务器集 ...

随机推荐

  1. 【RocketMQ】DLedger选主源码分析

    RocketMQ 4.5版本之前,可以采用主从架构进行集群部署,但是如果master节点挂掉,不能自动在集群中选举出新的Master节点,需要人工介入,在4.5版本之后提供了DLedger模式,使用R ...

  2. [代码审计基础 14]某cms变量覆盖到N处漏洞

    PHP:5.4.5 设置调试:https://blog.csdn.net/m0_46641521/article/details/120107786 PHPCMS变量覆盖到SQL注入 0x01:路由分 ...

  3. LG P3768 简单的数学题

    \(\text{Problem}\) 求 \[\left(\sum_{i=1}^n \sum_{j=1}^n i j \gcd(i,j)\right) \bmod p \] \(n \le 10^{1 ...

  4. noip2020模拟赛 背包 (knapsack)

    题目 区间 \(01\) 背包 \(1 \le l_i \le r_i \le n \le 20000,1 \le q \le 100000,1 \le m_i \le 500, 1 \le w_i ...

  5. 如何用revit+bimfilm快速完成径向动画制作

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链. 在实际的施工中,我们会遇到诸如一些管道保温层包覆的施工内容,所以在制作它们的施工动画时,我们需要用径向剖切保温层来表达管道保温层包覆过程的施工状 ...

  6. VSCode 自定义代码片段

    Ctrl+Shift+P 输入"代码片段:配置用户代码片段": 搜索你想要设置的语言代码片段,比如,我设置 .vue 文件的代码片段,选择 vue.json: 可以配置多个代码片段 ...

  7. Vue学习笔记之组件与通信

    1. 组件 1.1. 什么是组件 组件是可复用的Vue实例, 说白了就是一组可以重复使用的模板,通常一个应用会以一棵嵌套的组件树的形式来组织: 例如,你可能会有页头.侧边栏.内容区等组件,每个组件又包 ...

  8. LeetCode-846 一手顺子

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/hand-of-straights 题目描述 Alice 手中有一把牌,她想要重新排列这些牌,分成 ...

  9. php链接access并查询列出

    <?php$odbc = "Driver={Microsoft Access Driver (*.mdb)};Dbq=".realpath("db.mdb" ...

  10. Verilog设计指定寄存器数组在综合时使用block memory资源

    自己用verilog代码写的rom或ram会被综合成查找表LUT+REG构建,并没有使用到block memory资源. 资料:https://www.intel.com/content/www/us ...