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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

初衷:

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


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


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



     本文转自杨云1028 51CTO博客,原文链接:http://blog.51cto.com/yangrong/1330594,如需转载请自行联系原作者



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
14天前
|
数据采集 机器学习/深度学习 算法
|
10天前
|
前端开发 算法 JavaScript
React原理之Diff算法
【8月更文挑战第24天】
|
11天前
|
负载均衡 算法 调度
负载均衡原理分析与源码解读
负载均衡原理分析与源码解读
|
12天前
|
负载均衡 算法 微服务
基于gRPC的注册发现与负载均衡的原理和实战
基于gRPC的注册发现与负载均衡的原理和实战
|
21天前
|
机器学习/深度学习 算法 搜索推荐
【机器学习】机器学习的基本概念、算法的工作原理、实际应用案例
机器学习是人工智能的一个分支,它使计算机能够在没有明确编程的情况下从数据中学习并改进其性能。机器学习的目标是让计算机自动学习模式和规律,从而能够对未知数据做出预测或决策。
26 2
|
22天前
|
机器学习/深度学习 算法 数据可视化
决策树算法介绍:原理与案例实现
决策树算法介绍:原理与案例实现
|
12天前
|
存储 负载均衡 监控
自适应负载均衡算法原理和实现
自适应负载均衡算法原理和实现
|
15天前
|
算法 安全 网络安全
Diffie-Hellman (DH) 算法的工作原理
【8月更文挑战第23天】
58 0
|
15天前
|
负载均衡 网络协议 Linux
在Linux中,负载均衡的原理是什么?
在Linux中,负载均衡的原理是什么?
|
17天前
|
数据采集 搜索推荐 算法
【高手进阶】Java排序算法:从零到精通——揭秘冒泡、快速、归并排序的原理与实战应用,让你的代码效率飙升!
【8月更文挑战第21天】Java排序算法是编程基础的重要部分,在算法设计与分析及实际开发中不可或缺。本文介绍内部排序算法,包括简单的冒泡排序及其逐步优化至高效的快速排序和稳定的归并排序,并提供了每种算法的Java实现示例。此外,还探讨了排序算法在电子商务、搜索引擎和数据分析等领域的广泛应用,帮助读者更好地理解和应用这些算法。
14 0
下一篇
DDNS