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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 初衷:在2011年初我学习交换机链路聚合技术的时候,心中一直有一个疑问:交换机收到一个报文,到达聚合口的时候,是怎么选择成员口出去的呢?是随机选的吗?还是按成员编号从小到大或从大到小轮循?如果选择源IP算法,是怎么实现不同源IP就走不同的端口的呢?那时网上也找不到介绍,这个疑问,直到2011年底做测试工程师时,才得到研发兄弟的回答,一直记在心里,总想找个时间发布到网上,让更多人知道,原来负载均衡算法其实是这么的简单!链路聚合的主要作用是增加带宽,增加可靠性,防止二层环路。

初衷:

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算法,如SIPDIPSIP+DIPSIP+DIP+SP+DP等。

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

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

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

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



HASH值的计算方法:

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

1SIP(源IP

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

 2)然后作高16bits和低16bitsxor.

 3)再用16bits15-12bits11-8bitsxor,将得到的4bits替换到11-8bits,得到12bits右移2位得到10bitshash

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


2DIP(目的IP

SIP


3SIP+DIP(源IP+目的IP

1DIP xor SIP得到一个32bits的值。

2)然后作高16bits和低16bitsxor

3)再用16bits15-12bits11-8bitsxor,将得到的4bits替换到11-8bits,得到12bits右移2位得到10bitshash值。



4SIP+DIP+SP+DP(源地址 + 目的地址 + 源端口 + 目的端口)

1SIP xor DIP得到32bit的值value1

2hashtemp1的低16bits xor SP 得到32bithashtemp2

3hashtemp2 的低 16bit xor DP 得到 32bit hashtemp3

4)然后作高16bits和低16bitsxor

5)再用16bits1512bits118bits xor,将得到的4bits替换到118bits,得到12bits右移2位得到10bitshash


看完之后,是否发现,原来负载均衡算法是如此的容易!


很多看起来高端的技术,不是做不到,而是想不到。



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
11天前
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
105 59
|
15天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
35 3
|
4天前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
3天前
|
负载均衡 算法
SLB-Backend的负载均衡算法
【10月更文挑战第19天】
17 5
|
7天前
|
负载均衡 算法 应用服务中间件
Nginx 常用的负载均衡算法
【10月更文挑战第22天】不同的负载均衡算法各有特点和适用场景。在实际应用中,需要根据具体的业务需求、服务器性能和网络环境等因素来选择合适的算法。
19 3
|
10天前
|
算法 数据库 索引
HyperLogLog算法的原理是什么
【10月更文挑战第19天】HyperLogLog算法的原理是什么
15 1
|
16天前
|
机器学习/深度学习 人工智能 算法
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
52 0
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
|
15天前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
16天前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
21 0
|
21天前
|
安全 网络安全 数据安全/隐私保护
Cisco-交换机配置聚合端口
Cisco-交换机配置聚合端口