Ether Channel通过在多条链路上传输多个数据帧,增加了可用带宽。一个以太网帧总是通过一个Ether Channel中的一条链路传输。针对数据帧地址字段执行散列计算能够产生一个编号,标识这个数据帧在Ether Channel中转发所使用的物理链路。在特定地址字段(或多个字段)中拥有相同的值,且使用这个值来计算散列值的一系列数据帧,称为一个会话或一条数据流。散列函数是决定性因素,也就是说一条数据流中的所有数据帧会计算出相同的散列值,因此设备会通过相同的物理链路来转发这些数据帧。因此,只通过一条数据流是感觉不出可用带宽的增加的;多条数据流才会有机会被分布到多条链路上,从而能够实现更高的汇总吞吐量。一条数据流通过一条链路传输,进而无法受益于带宽增长,这是一项不足之处;不过,这种方式也防止了重新排序数据帧。序列属性是至关重要的,因为Ether Channel——作为透明技术——必须不能引入在普通以太网中不应该出现的问题。
 
负载均衡的具体方式根据交换机型号和软件版本而有所不同。通常,负载均衡基于二层、三层和/或四层头部的内容。如果负载均衡只基于数据帧中的一个头部字段执行,这个字段会用来执行散列计算。若使用多个头部字段,首先在所选字段之间使用XOR操作,且只有这个XOR的结果用来执行散列计算。Cisco所使用的散列函数详情并未公开,并且可能根据不同的交换机平台而变化。
 
为了达到最好的均衡效果,在Port-Channel中传输的各种数据帧应该使用不同的头部字段来进行负载均衡。例如,对于连接到接入层交换机的二层Port-Channel,从接入层交换机到分布层交换机的大部分流量都可能是从客户到默认路由器的。所以大部分帧都有不同的源MAC地址,但有相同的目的MAC地址。对于从分布层交换机去往接入层交换机的数据包,其中许多数据帧可能有相同路由器的源地址,以及不同的MAC地址。所以工程师可以在接入层交换机上基于源MAC地址执行均衡,在分布层交换机上基于目的MAC地址执行均衡——或者在两类交换机上同时基于两个地址字段执行均衡。目标就是使用数据帧中字段值有变化的均衡方式。
 
工程师可以使用全局配置命令port-channel load-balance type来设置负载均衡的类型。type选项包括使用源和目的MAC地址、IP地址以及TCP和UDP端口——可以设置一个字段值,或同时设置源和目的地址。由于这是一条全局配置命令,因此它会影响交换机上所有EtherChannel的操作。EtherChannel两端的设备通常可以使用不同的负载均衡算法。
 
一个EtherChannel中最多可以有8个活跃成员链路。这个限制很合理,因为各版本以太网的速率差别数量级为10(10Mbit/s、100Mbit/s、1Gbit/s、10Gbit/s、100Gbit/s)。一个EtherChannel中有超过8条链路捆绑在一起的话,速率就近似于使用下一级更快的以太网版本,所以在这种情况中考虑换用更快的以太网技术是很合理的。在许多Catalyst交换机平台上,散列函数会生成范围在0~7之间的3比特结果,这个值会被分配给每条成员链路。对于一个EtherChannel中捆绑的8条物理链路,每条链路都正好分配到这个范围中的一个值。如果物理链路少于8条,就会有些链路分配到这个范围中的多个值,因此,有的链路会比其他链路承载更多的流量。下表描述了流量总量比(Pn表示一个EtherChannel中的第n个端口)。
 
在理想环境下,只有在链路数量是8、4或2时,成员链路上的流量分布才会相等。对于3比特散列函数生成的8个值,每个值代表总流量的1/8=12.5%。用12.5%这种倍数来分布流量,是非常粗糙的做法。也可以使用DIV和MOD来计算比率:例如,一条捆绑链路中有3条物理链路,每条链路将被分配8DIV3=2个结果散列值,8MOD3=2条链路将得到额外的结果散列值,产生比率(2+1):(2+1):2=3:3:2,或37.5%:37.5%:25%。
 
在其他Cisco交换机平台上,虽然仍限制EtherChannel最多使用8条链路,但使用了8比特的散列结果。这个散列值能够提供256个可能的结果,因此每个值仅代表流量的1/256=0.390625%。一个EtherChannel中的每条物理链路上分布的流量因此具有更细的粒度。有3条链路时,每条链路将被分配256DIV3=85个结果散列值,且256MOD3=1条链路将得到额外的结果散列值。所以流量划分比例是86:85:85,或大致分为33.6%:33.2%:33.2%,这比3:3:2更平均。
 
Port-Channel有时会被错误地描述为只能处理2条、4条或8条链路。这是不正确的——一个Port-Channel可以处理1~8之间的任意数量的链路。然而,如前所述,如果链路数量不是2的倍数,总体流量在链路上的分布可能不平均。
 
 
 

STP-18-Port-Channl上的负载均衡的更多相关文章

  1. 使用Nginx在自己的电脑上实现负载均衡

    我其实早就想弄这个负载均衡了,但是总觉得这玩意肯定不简单,今天星期六闲着没事终于下定决心来搞一搞他了,但是没想到这玩意这么简单,真的是出乎我的意料的简单(我现在陪的是最简单的那种).额是没有我想象中的 ...

  2. 云计算之路-阿里云上:负载均衡错误修改Cookie造成用户无法登录

    最近陆续有用户反馈在我们网站上登录时遇到登录死循环问题.输入用户名与密码提交后,显示登录成功,但跳转到目标网址后(由于依然处于未登录状态)又跳转回登录页面,再次登录,再次这样...就这样一直循环,怎么 ...

  3. Nginx + Tomcat 在 Windows7 上搭建负载均衡集群

    一.安装Tomcat和Nginx 首先安装两个apache-tomcat-8.0.41,下载地址:http://tomcat.apache.org 并安装一个nginx-1.13.0,下载地址http ...

  4. WEB 集群与负载均衡(一)基本概念-上

    Web集群是由多个同时运行同一个web应用的服务器组成,在外界看来就像一个服务器一样,这多台服务器共同来为客户提供更高性能的服务.集群更标准的定义是:一组相互独立的服务器在网络中表现为单一的系统,并以 ...

  5. rabbitmq3.6.5镜像集群搭建以及haproxy负载均衡

    一.集群架构 后端75.103.69分别是3台rabbitmq节点做镜像集群,前端103用haproxy作为负载均衡器 二.安装rabbitmq节点 参照 https://www.cnblogs.co ...

  6. Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程

    人原创,一个字一个字地码的,尊重版权,转载请注明出处! http://blog.csdn.net/chaijunkun/article/details/6987443 最近在开发的项目需要承受很高的并 ...

  7. SpringCloud 源码系列(4)—— 负载均衡 Ribbon

    一.负载均衡 1.RestTemplate 在研究 eureka 源码上篇中,我们在 demo-consumer 消费者服务中定义了用 @LoadBalanced 标记的 RestTemplate,然 ...

  8. nginx + tomcat配置负载均衡

    目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Ng ...

  9. linux负载均衡总结性说明(四层负载/七层负载)

    在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同?废话不多说,详解如下: 一,什么是负载均衡1)负载均衡(Load Balance)建立在现有网络结 ...

随机推荐

  1. C语言小程序(二)、计算第二天日期

    输入一个日期,判断下一个日期是哪一天,如果日期输入错误,则调用Linux下的cal命令显示输入的月份. #include <stdio.h> #include <stdlib.h&g ...

  2. CQOI2018做题记录

    T1.破解D-H协议 传送门 这个题就是BSGS的板子题-- 然后这里补充一点嘛,就是第二重循环的枚举范围.我们是在枚举\(a^{tm-y}\),把tm换成i,这个的最大值就是\(i - (m - 1 ...

  3. Operating System-Kickoff:什么是操作系统&&操作系统的核心概念

    接下来会写一系列Operating System(操作系统)的文章,今天先开个头.本文主要内容: 什么是操作系统 操作系统的核心概念 程序=数据结构+算法 一.什么是操作系统 1.1 操作系统是对硬件 ...

  4. 三、使用maven创建scala工程(scala和java混一起)

    本文先叙述如何配置eclipse中maven+scala的开发环境,之后,叙述如何实现spark的本地运行.最后,成功运行scala编写的spark程序. 刚开始我的eclipse+maven环境是配 ...

  5. Mybaits整合Spring自动扫描 接口,Mybaits配置文件.xml文件和Dao实体类

    1.转自:https://blog.csdn.net/u013802160/article/details/51815077 <?xml version="1.0" enco ...

  6. 【java并发编程艺术学习】(二)第一章 java并发编程的挑战

    章节介绍 主要介绍并发编程时间中可能遇到的问题,以及如何解决. 主要问题 1.上下文切换问题 时间片是cpu分配给每个线程的时间,时间片非常短. cpu通过时间片分配算法来循环执行任务,当前任务执行一 ...

  7. linux日常管理-screen

    假如一个任务要执行好几天,为了防止中途中断的情况, 在让后台运行的命令后面加一个 nohup会生成一个 .nohup.out文件,会搜集在运行过程中所产生的日志. 比直接后台运行任务的好处是,万一断电 ...

  8. [java] bug经验 Unable to locate Spring NamespaceHandler for XML schema namespace解决办法

    报错关键字: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration probl ...

  9. mysql主从服务器复制原理

    在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的.譬如服务器发生故障,没有备份服务器来提供服务的话,业务就得停止.介于这种情况,我们来学习一下mysql主从复制. 将Mysql的 ...

  10. Blast 如何使用Blast+(Linux)转载

    下载数据 #此处下载对应物种的数据库ftp://ftp.ncbi.nih.gov/genomes/,下载fna格式的即可   wget ftp://ftp.ncbi.nih.gov/genomes/A ...