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. linux命令学习笔记(12):more命令

    more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便 使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就 ...

  2. NOI2018网络同步赛游记

    Day1 t1是一道NOI选手眼中的送分题,对于我来说还是有难度的,用了个把小时想了出来可持久化并查集的做法,最后一个点被卡常.赛后才发现Kruskal重构树是这样的简单.t2.t3由于我真的是太弱了 ...

  3. 强烈建议使用国外DNS解析域名,解决访问速度和某些访问故障!

    域名解析的基本原理是把域名翻译成IP地址,以便计算机能够进一步通信,传递网址和内容等. 域名劫持就是在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则直接返回假的IP ...

  4. python 3中使用getattr和*args时, 出现传入参数不一致的问题

    今天在用python3的getattr时遇到一个问题, 就是老提示传入参数和函数前面不一致, 代码为: class Test:      def __init__(self, name):       ...

  5. Erlang generic standard behaviours -- gen_server terminate

    gen_server 主体 module 已经分析完了(http://www.cnblogs.com/--00/p/4271982.html),接着,分析下gen_server 中的terminate ...

  6. 【转】 Pro Android学习笔记(七三):HTTP服务(7):AndroidHttpClient

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csdn.net/flowingflying/ 不知道此文是否是这个系列中最短的一篇.我们 ...

  7. 【转】Pro Android学习笔记(二四):用户界面和控制(12):Style和Theme

    目录(?)[-] 静态格式 代码中设定 Style Theme 静态格式 在res/values中设置静态的Style,在资源中设置静态Style可使用的HTML格式有<i> <u& ...

  8. ES6学习之数组扩展

    扩展运算符(...将数组分割为用逗号分割的参数序列) console.log(...[1,2,3]) //1 2 3 可替换数组的apply写法: function test(x,y,z){ cons ...

  9. .net wcf调用java的需要认证的接口

    1.wcf直接添加java的webservice地址,这都是常规操作,没必要好说 2.修改config配置文件,添加headers消息头节点,这个需要注意 3.OK直接调用里面的方法即可,全部搞定 & ...

  10. Asp.net Core学习笔记

    之前记在github上的,现在搬运过来 变化还是很大的,感觉和Nodejs有点类似,比如中间件的使用 ,努力学习ing... 优点 不依赖IIS 开源和跨平台 中间件支持 性能优化 无所不在的依赖注入 ...