工程师在给一台交换机上的特定Port-Channel增加多个端口时,有一些配置参数必须相同,如下所示:
 
  • 使用相同的速率和双工设置;
  • 使用相同的操作模式(Trunk、Access、动态);
  • 若不为Trunk,要使用相同的接入VLAN;
  • 若为Trunk,要使用相同的Trunk类型、允许VLAN和本征VLAN;
  • 在一台交换机上,Port-Channel中所有链路上的每个端口在每个VLAN中都必须有相同的STP开销;
  • 端口上不应该配置SPAN。
 
一些限制可能随着时间会有所更改——建议查阅特定交换机平台和IOS版本的配置指南,以了解最新信息。
 
当工程师创建了一个新的Port-Channel时,interface Port-channel会自动添加到配置中。端口会继承第一个添加到Port-Channel中的物理端口的配置,所有其他添加到相同Port-Channel中的物理端口的配置,会与interface Port-channel的配置进行比较。如果不同,物理端口在Port-Channel中为暂停状态,在工程师将其配置设置得与Port-Channel端口的设置相同之前,这个端口并不会成为工作成员。工程师对于interfacePort-channel执行的变更,只应用于非暂停的成员端口;即应用到Port-Channel端口的命令只会推送给那些在变更之前配置就已经和interfacePort-channel的配置相同的物理成员端口。因此,如果工程师希望通过重新在Port-Channel端口上输入配置来统一所有成员端口,其实并不会对当前配置与Port-Channel端口配置不同的端口产生影响。因而建议在配置Port-Channel时遵循以下指南。
 
  • 不要在将物理端口捆绑到Port-Channel之前,手动创建端口Port-Channel。
  • 另一方面,在移除Port-Channel后,确保手动从运行配置(running-config)中移除interfacePort-channel,这样之后重新创建使用相同编号的Port-Channel时,才不会造成问题。
  • 在将物理端口添加到同一个Port-Channel之前,确保端口的配置和Port-Channel相同。
  • 若物理端口的配置不同于interfacePort-channel的配置,首先纠正物理端口的配置。之后继续执行Port-Channel端口配置的更改。
  • Port-Channel端口可以是二层的(交换),也可以是三层的(路由),根据捆绑的物理端口的配置而定:二层(switchport)或三层(noswitchport)。工程师在创建了特定操作级别的Port-Channel之后,不能在不重新创建Port-Channel的前提下,将其改为其他模式。如果必须在二层和三层操作之间进行变更,工程师必须从配置中移除Port-Channel,把物理端口重新配置为要求的操作级别后,再重新创建Port-Channel。工程师也可以把一台交换机上的二层Port-Channel与另一台交换机上的三层Port-Channel组合在一起,但这并不是最佳的方式。
  • 在解决Port-Channel下的端口err-disable问题时,要确保关闭物理端口和interfacePort-channel本身。这时才能再尝试重新启用端口。如果问题仍没有解决,建议将整个Port-Channel从配置中移除,这会使得关联端口解绑,然后重新创建Port-Channel。
 
工程师可以使用接口命令channl-group number mode on在Port-Channel上静态配置端口。也可以使用相同的Port-Channel编号,在Port-Channel中的每个物理端口下配置相同的命令。这个配置会强制端口成为相同Port-Channel的成员,而不与邻居交换机协商。但是,工程师应该强烈反对使用这种方式来创建Port-Channel。因为,如果一台交换机认为有多个物理端口捆绑在一个Port-Channel中,而邻居交换机仍把它们当作独立的端口对待,或者将它们分配给几个Port-Channel,就可能会产生永久的交换环路。静态的Port-Channel配置无法检测捆绑的端口是否都连接到相同的邻接设备。一个Port-Channel中的独立端口如果连接到了不同的邻接交换机,也可能会造成永久的交换环路。为了理解交换环路是怎样产生的,参见下图所示的拓扑。
 
 
在这个拓扑中,备份根交换机与接入层交换机相连的端口已经由工程师通过命令modeon捆绑在了一个Port-Channel中,交换机会立刻将它们作为一个EtherChannel使用,而不与接入层交换机进行协商。然而,接入层交换机尚未在这些端口上配置Port-Channel,因而会将它们作为独立链路对待。
 
因为STP会把Port-Channel看作一个端口,无论捆绑了多少条物理链路,也只会向整个Port-Channel发送一个BPDU。对这个BPDU执行散列计算,并通过整个Port-Channel中的一条链路进行转发。假设备份根拥有网络中第二低的优先级,且这个BPDU通过左侧那条连接接入层交换机的链路转发,接入层交换机上相应的端口是替换丢弃状态。然而,接入层交换机在右侧链路上的端口未收到任何BPDU,并因此成为了指定转发状态。即使这样的端口发送了BPDU,它也会被备用根交换机忽略,因为这些BPDU次优于自己的BPDU。这样一来,网络中就创建了一个永久的交换环路。这也是在工程师输入了nointerface Port-channel后,交换机会关闭所有物理端口的原因——预防移除Port-Channel配置时的交换环路。
 
注意若使用RSTP/MST,分发机制将会检测到这个问题,并将备份根交换机上的Port-Channel设置为丢弃状态,来避免环路。此外,Cisco也在自己的交换机上实现了另一种称为STP EtherChannel误配置防护的机制。此机制会假设邻居设备上的多个端口都被正确地捆绑到了一个Port-Channel中,所有通过这个Port-Channel链路收到的BPDU的以太网头部中都必须有相同的源MAC地址,因为Port-Channel端口会继承其中一个物理成员端口的MAC地址。如果一个Port-Channel端口收到了源自不同MAC地址的BPDU,这表示邻居仍将链路独立对待,因而整个Port-Channel将置为err-disable状态。注意EtherChannel误配置防护的检测能力是有限的。在上图所示的拓扑中,这个机制就不会有什么帮助,因为备份根交换机通过右侧链路从接入层交换机只收到了一个BPDU,并没有其他BPDU可以用来比较源MAC地址。当备份根和接入层交换机之间有3条或更多链路时,或2条现有链路捆绑在接入交换机,而不是捆绑在备份根上时,这个机制可以提供检测。EtherChannel误配置防护默认启用,工程师可以使用全局命令no spanning-tree etherchannel guard misconfig将其禁用。
 
通过上文的解释,我们强烈建议使用动态协商协议,允许交换机之间协商Port-Channel的创建过程,并验证链路是否可以进行捆绑。这些协议是Cisco专有的端口聚合协议(PortAggregationProtocol,PAgP)和开放的IEEE802.1AX(之前为802.3ad)链路聚合控制协议(LinkAggregationControlProtocol,LACP)。虽然这两个协议互相不兼容,但它们都提供类似的功能。在一个普通的Port-Channel上,两台交换机必须使用相同的协商协议;不同的Port-Channel端口可以使用不同的协商协议。通常首选使用LACP,因为这是开放协议且被广泛支持。
 
PAgP允许一个Port-Channel中最多捆绑8条链路。交换机会拒绝工程师在一个PAgPPort-Channel中添加超过8条链路的命令。在当前的Catalyst交换机上,对于PAgP,工程之只能配置发送PAgP消息的频率。频率是基于每个端口配置的,使用命令pagptimer{normal|fast};在Port-Channel建立后,normal频率是30秒,fast是1秒。PAgP相关的其他可用命令对交换机的转发行为没有作用,只是为了向后兼容非常老的交换机。
 
对于LACP,一个Port-Channel最多可以设置16条链路。在这些链路中,最多有8条链路可以成为Port-Channel的活跃成员。其余链路将被设置为所谓的备份(有时也称为热备份)模式。如果一条活跃链路发生了故障,一条备份链路就会用来替换它。会有一台交换机负责控制将哪条备份链路选择为活跃状态——该交换机拥有更低的LACP系统ID,LACP系统ID由可配置的优先级值和交换机的MAC地址(与STP中的概念相同)构成。若有多个备份链路可供选择,控制交换机会选择端口ID最低的链路,这个ID也由可配置的优先级值和端口编号组成。工程师可以使用全局命令lacpsystem-priority来配置交换机的LACP优先级,还可以使用命令lacpport-priority来配置端口的优先级。两个优先级的可配置范围均为0~65535。
 
为了使用PAgP动态建立Port-Channel,工程师仍可以使用channel-group命令,模式使用auto或desirable进行配置。为了使用LACP动态建立Port-Channel,工程师可以使用模式active或passive。下表列出并描述了这些模式及含义。
 
 
因为模式关键字及其所指的协议(PAgP为desirable/auto;LACP为active/passive)可能有些不好记忆,Cisco提供了帮助命令channel-protocol {pagp | lacp},工程师可以在物理端口上使用该命令,这样做能够限制对所使用的协商协议配置可接受的模式选项。换句话说,如果工程师输入了命令channel-protocolpagp,那么接下来只能够使用desirable或auto模式;active、passive和on模式将被拒绝。类似地,如果工程师使用了命令channel-protocollacp,那么接下来只能够使用active或passive模式;desirable、auto和on模式将被拒绝。
 
PAgP和LACP在协商建立Port-Channel时,交换的消息中包含了重要的信息,这些信息用来检测是否捆绑在一个Port-Channel下的所有链路都连接了同一个邻居,还用来检测邻居是否也希望将这些链路捆绑在一个Port-Channel下。这些值包括互连设备的系统ID、物理端口标识符,以及这些端口归属的聚合组。人们有时认为PAgP和LACP携带每个端口设置的详尽信息;但这是不正确的。虽然PAgP和LACP能够确保将捆绑链路都连接到相同的邻居交换机,且两台交换机都希望将链路捆绑到通用的Port-Channel,但是它们既不能也不应该验证捆绑链路两端的端口是否拥有相同的配置。
 
PAgP和LACP完成建立过程后,将会出现新的Port-Channel端口,它会被STP看作是一个端口,并根据在每台交换机上配置的全局负载均衡策略实现负载均衡。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

STP-19-Port-Channel发现和配置的更多相关文章

  1. Port Channel and VPC

    1.Port Channel 介绍 Port Channel  简介 绑定多个物理链路(最多8条),到一个单一的逻辑链路,在两个物理设备之间 每个物理端口只能被放入一个port-channel中. 在 ...

  2. Consul 服务发现和配置

    Service discovery and configuration made easy. Distributed, highly available, and datacenter-aware. ...

  3. 自学Zabbix3.12.3-动作Action-自动发现action配置

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix3.12.3-动作Action-自动发现action配置 1. 首先先学习  Ne ...

  4. 自学Zabbix9.2 zabbix网络发现规则配置详解+实战

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix9.2 zabbix网络发现规则配置详解+实战 1.  创建网络发现规则 Conf ...

  5. Consul 服务发现与配置

    Consule 是什么 Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性: 服务发现 Consul 的客户端可用提供一个服务,比如 api 或 ...

  6. spring-cloud-consul 服务注册发现与配置

    下面是 Spring Cloud 支持的服务发现软件以及特性对比(Eureka 已停止更新,取而代之的是 Consul): Feature euerka Consul zookeeper etcd 服 ...

  7. SpringCloud微服务实战——搭建企业级开发框架(九):使用Nacos发现、配置和管理微服务

    Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台,Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置 ...

  8. consul服务发现和配置共享的软件,

    Consul 是什么 consul是一个支持多数据中心分布式高可用服务发现和配置共享的服务软件,由HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2. ...

  9. 3/19 Django框架 url路由配置及模板渲染

    3/19 Django框架 url路由配置及模板渲染 1.路由分配 URL(Uniform Resoure Locato):统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, ...

  10. 嵌入式Linux设备驱动程序:发现硬件配置

    嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...

随机推荐

  1. BZOJ1799 [Ahoi2009]self 同类分布[数位DP]

    求出[a,b]中各位数字之和能整除原数的数的个数. 有困难的一道题.被迫看了题解:枚举每一个各位数字的和($<=162$),设计状态$f[len][sum][rest]$表示dp后面$len$位 ...

  2. cookie与web Storage

    一.cookie 1. http头与cookie cookie是HTTP Cookie的简称.该标准要求: (1)服务器的HTTP响应头包含 Set-Cookie字段 响应头Eg: HTTP/1.1 ...

  3. win32 获取 HotKey 控件中的内容(HKM_GETHOTKEY)

    windows给我们提供了一个对话框控件HotKey非常好用,在设置热键的时候用起来很爽,但是一直百度就是没找到在win32下怎样通过消息获取这个控件里面的内容,找到的都是用MFC封装好的控件类来操作 ...

  4. log4net 使用

    1. 代码中使用配置文件: log4net.Config.DOMConfigurator.Configure(new FileInfo("log4netConfig.xml")); ...

  5. 使用Azure CLI实现自动关闭Azure虚拟机的脚本

    Azure除提供Portal界面.PowerShell进行管理外,还提供Xplate的CLI对其进行管理. 在Azure的管理界面上可以下载各种平台的Xplate CLI的安装程序. 下面是一个小的脚 ...

  6. SYS/BIOS实例分析

    SYS/BIOS简介 SYS/BIOS是一个可扩展的实时内核(或者说是操作系统),其提供了许多模块化的APIs(应用程序接口),支持抢占式多线程,硬件抽象,实时分析和配置工具,其设计目的是为了最大限度 ...

  7. windows服务和进程的区别和联系

    Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出. 任何的用户消息通常都是记录在Windows 事件日志里.Windows Serv ...

  8. 第二课 go语言的结构

    1 go 语言结构 package main import "fmt" func main() { /* 这是我的第一个简单的程序 */ fmt.Println("Hel ...

  9. Python命令模块argparse学习笔记(四)

    默认参数 ArgumentParser.set_defaults(**kwargs) set_defaults()可以设置一些参数的默认值 >>> parser = argparse ...

  10. Spring Boot 专栏

    http://blog.csdn.net/column/details/spring-boot.html?&page=2