交换机链路聚合负载的均衡算法原理

初衷:

在2011年初我学习交换机链路聚合技术的时候,心中一直有一个疑问:

交换机收到一个报文,到达聚合口的时候,是怎么选择成员口出去的呢?

是随机选的吗?还是按成员编号从小到大或从大到小轮循?如果选择源IP算法,是怎么实现不同源IP就走不同的端口的呢?那时网上也找不到介绍,这个疑问,直到2011年底做测试工程师时,才得到研发兄弟的回答,一直记在心里,总想找个时间发布到网上,让更多人知道,原来负载均衡算法其实是这么的简单!

链路聚合的主要作用是增加带宽,增加可靠性,防止二层环路。在这儿,我不讨论这技术为何而来与作何而用了,只说说报文到达聚合口时,是怎么选择出端口的。

感叹:

2012年底测试一个交换机项目时,和另一家公司(是大企业)是竞争关系,我负责测试本公司交换机(中小企业),名称就都不说了。

在进行入网测试时,工信部测试人员引入真实流量,分光成两份,分别进入两家厂商的交换机,交换机上配置同样的负载分担算法(如:都是SIP hash),同样的聚合组成员数(如:32个)。测试结果是:真实流10G两分钟,两家厂商各成员接口输出报文一模一样(判断出两家厂商负载均衡算法一模一样)。由此我才深深感叹,原来牛逼的厂商用的算法也不过如此而已(以前一直觉得大企业肯定很牛逼,事实最后的测试结果报告还不如我们)。

HASH表介绍:

在交换机内部,每创建一个聚合组时,底层同时创建对应该聚合组的一个hash表,该表存在于交换芯片上,hash表内容如下(简化):

左列index为芯片的硬性支持,现在一般是256,512,1024,更高的未见过。index数量越高,负载分担越均衡。

这儿以3个成员为例:

index interface
0 eth0_0
1 eth0_1
2 eth0_2
3 eth0_0
4  eth0_1
5 eth0_2
. .
. .
. .
1022 eth0_0
1023 eth0_1

HASH表维护:

交换机里有专门的线程,实时检测聚合组有效成员,一旦成员状态发生变化,立即刷新hash表项。

顺便谈谈刷新HASH表这个技术。

工程师up/down成员口,底层就必须实时的刷新成员(这儿比较考验厂商技术),刷新速度越慢,成员状态变动时丢包越多。技术最强的如cisco,可以做到up/down成员口时,不丢包。而我公司最初会丢一秒钟的包(研发设计思路问题)。后来优化后才达到up/down成员端口,有0.0几秒的丢包,无法做到不丢包。

up/down分析:当工程师在命令行up/down聚合组成员时,底层表项会有那么一丁点儿的响应时间刷新表项,这丁点儿时间,已经down掉的接口还存在hash表里,而报文是一直都有的,正好被hash到这个无效的出端口的报文都会被丢弃!)

交换机负载均衡转发原理:

虽然底层有了一张HASH表,那么到底是怎么利用这张表的呢?

1)工程师设定端口成员与HASH算法,如SIP、DIP、SIP+DIP、SIP+DIP+SP+DP等。

2)交换机根据成员生成HASH表,根据算法提取报文中相应内容。

3)使用特定HASH值的计算方法,把提取的内容计算出一个10bits的值。

4)找到底层HASH表项中该值对应的出端口。

5)把报文从这个出端口转发出去。

HASH值的计算方法:

xor是异或运算,即两个值不相同,则异或结果为真;反之,为假。不同为1,相同为0。

1、SIP(源IP)

1)SIP xor 0 得到一个32bit的值.

2)然后作高16bits和低16bits的xor.

3)再用16bits的15-12bits与11-8bitsxor,将得到的4bits替换到11-8bits,得到12bits右移2位得到10bits的hash值

注:10bits的值必然是0-1023里的一个数,该index对应的interface是多少,就从该接口转发出去。(相同的IP必然是相同的hash值)

时间: 2024-09-28 03:51:50

交换机链路聚合负载的均衡算法原理的相关文章

交换机基础知识:链路聚合技术

交换机基础:链路聚合定义 链路聚合技术亦称主干技术(Trunking)或捆绑技术(Bonding),其实质是将两台设备间的数条物理链路"组合"成逻辑上的一条数据通路,称为一条聚合链路,如Figure1示意.交换机之间物理链路Link1.Link2和Link3组成一条聚合链路.该链路在逻辑上是一个整体,内部的组成和传输数据的细节对上层服务是透明的. ▲ 链路聚合示意图 聚合内部的物理链路共同完成数据收发任务并相互备份.只要还存在能正常工作的成员,整个传输链路就不会失效.仍以上图的链路聚合

多种负载均衡算法及其Java代码实现

首先给大家介绍下什么是负载均衡(来自百科) 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展 网络设备和 服务器的带宽.增加 吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web 服务器. FTP服务器. 企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. 本文讲述的是"将外部发送来的请求均匀分配到对称结构中的某一台服务器上"的各种算法,并以Java代

多种负载均衡算法及其 Java 代码实现

首先给大家介绍下什么是负载均衡(来自百科) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展 网络设备和 服务器的带宽.增加 吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web 服务器. FTP服务器. 企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. 本文讲述的是"将外部发送来的请求均匀分配到对称结构中的某一台服务器上"的各种算法,并以Java代码

交换机基础知识:分布式链路聚合技术

交换机基础:IRF架构下的聚合技术IRF技术将多台交换设备组合成一个高性能的整体,目的是以尽可能少的开销,获得尽可能高的网络性能和网络可用性.支持IRF技术的设备都具备三个重要特性:分布式设备管理DDM.分布式链路聚合DLA和分布式弹性路由DRR.这三项技术是完成IRF技术目标不可 缺少的环节.其中,DLA用于提高传输链路的可用性和容量.多台IRF交换机堆叠后,端口的数量增加了,要求DLA能支持更多的聚合组,每组能有更多的链路聚合成员.更多的聚合组意味着交换设备可提供更多的高速链路,而更多的聚合

什么是交换机的“链路聚合”功能?

链路聚合(LinkAggregation)是指将具有相同传输介质类型.相同传输速率的物理链路段"捆绑"在一起,在逻辑上看起来好像是一条链路.链路聚合又称中继(trunking),它允许交换机之间或交换机和服务器之间的对等的物理链路同时成倍地增加带宽.因此,它在增加链路的带宽.创建链路的传输弹性和冗余等方面是一种很重要的技术. 聚合的链路又称干线(trunk).如果trunk中的一个端口发生堵塞或故障,那么数据包会被分配到该trunk中的其他端口上进行传输.如果这个端口恢复正常,那么数据

azure-Azure的负载均衡的原理是啥

问题描述 Azure的负载均衡的原理是啥 大家好 谁知道Azure的负载均衡的原理是啥?? 求解答!!! 解决方案 云计算-Azure-3.负载均衡集http://blog.chinaunix.net/uid-10565106-id-4359112.html 解决方案二: 四层负责均衡:是通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器与请求客户端建立TCP连接,然后发送Client请求的数据. 由上图可知:在四层负载设备中,把client发送的报文目

Nginx几种负载均衡算法及配置实例

Nginx负载均衡(工作在七层"应用层")功能主要是通过upstream模块实现,Nginx负载均衡默认对后端服务器有健康检测的能力,仅限于端口检测,在后端服务器比较少的情况下负载均衡能力表现突出. Nginx的几种负载均衡算法: 1.轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,则自动剔除故障机器,使用户访问不受影响. 2.weight:指定轮询权重,weight值越大,分配到的几率就越高,主要用于后端每台服务器性能不均衡的情况. 3.ip_ha

云计算环境下的负载均衡算法的研究与设计

云计算环境下的负载均衡算法的研究与设计 北京邮电大学  冯秀玲 本文研究了云计算及集群的负载均衡机制和算法,提出了云计算环境下的集群负载均衡问题,并且基于两种不同的云计算场景:私有云和公有云,分别设计了两种不同的算法,对集中式和分布式的负载均衡算法进行了相应的改进,本文的主要内容包括: 第一,分析对比现有集中式算法的性能优劣,着重对典型的算法. 第二,研究分析现有的分布式负载均衡算法,并针对文献中随机游走算法的低效和不足问题进行了改进,改进后的分组随机游走算法属于分布式的,适合使用在公有云环境中

云存储系统中动态负载均衡算法研究

云存储系统中动态负载均衡算法研究 田浪军 陈卫卫 陈卫东 李涛 针对分布式哈希表(DHT)云存储系统中的存储负载不均问题,提出一种基于节点动态前移(NDF)的负载均衡算法.通过过载节点动态前移,缩小节点存储分区,进而降低节点的存储负载.同时,过载节点向第3个后继节点复制相关数据,保证系统中数据的副本数量稳定.在NDF算法执行过程中,只需过载节点与第3个后继节点进行简单协调,多个过载节点可以并发地进行负载转移,适合在大规模集群中部署. 云存储系统中动态负载均衡算法研究