| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> Eth-Trunk负载分担不均怎么办,如何通过Hash算法实现负载分担? -> 正文阅读 |
|
[区块链]Eth-Trunk负载分担不均怎么办,如何通过Hash算法实现负载分担? |
什么是负载分担在网络部署当中,当存在多条转发路径的时候,常常会部署负载分担功能。通过部署负载分担,设备可以基于报文内容等进行逐流转发,或者基于随机数、轮转方式进行逐包转发,以达到充分利用链路,提高转发效率的目的。 基于逐包负载分担方式的实际部署较少,因为该方式可能导致同一个用户的流量经过网络的不同路径传输后,到达目的设备出现报文乱序或多份的情况。常见的负载分担方式一般选择基于逐流进行负载分担。 逐流负载分担即按照一定的规则,如根据五元组(源IP地址、目的IP地址、协议号、源端口号、目的端口号),将报文分成不同的流。同一条流的报文,经过Hash计算后,会在同一条链路上转发。 如图1-1所示,假设DeviceA上有6个报文要通过DeviceA和DeviceB之间的LinkA和LinkB进行负载分担,其发送顺序为P1、P2、P3、P4、P5、P6,其中P2、P3和P5去往DeviceC,P1、P4、P6去往DeviceD。假设负载分担采用逐流方式,则去往DeviceC的报文都通过LinkA发送,去往DeviceD的报文都通过LinkB发送;或者去往DeviceC的报文都通过LinkB发送,去往DeviceD的报文都通过LinkA发送。 图1-1 逐流负载分担示意图如何通过Hash算法实现负载分担常见的负载分担处理过程包含输入(流量、报文的有效字段)、处理(通过Hash算法进行计算)和输出(根据计算结果将流量通过相应的出接口转发)。其中,通过Hash计算的结果会直接影响负载分担的效果,因此如何利用好Hash算法进行计算,在负载分担部署当中就显得尤为重要。 图1-2 Hash算法流程如图1-2所示,Hash计算的流程如下:
其中,Hash算法是芯片提供固定种类的算法,不同的算法对于不同的流量模型计算的效果不同,有多种算法以供选择,可以通过hash-mode hash-mode-id参数选择Hash算法。 另外,Seed是一个数值,用于参与计算。在相同Hash因子的情况下,Seed值会影响计算出的Hash Key的值,通过命令seed seed-data设置Seed值。
如何处理Eth-Trunk负载分担不均正常情况下,流量在Eth-Trunk负载分担后,会被分配到多条链路上传输。Eth-Trunk负载分担不均是指流量通过负载分担后,仅被集中分配到一条或者某几条链路上传输,而其他链路无流量或者流量较少的情况。如果单条链路的流量较大,可能会影响业务的正常运行。 成员数量是否为2的N次方Eth-Trunk每个发送周期有16个发送报文的时隙,Eth-Trunk成员口轮流使用这16个时隙发送报文。 当Eth-Trunk成员口数量是2的N次方时,可以使得负载分担更均匀。例如,如果Eth-Trunk成员口数量是2、4或8(可以整除16),每个接口得到的发送报文的时隙是整数,负载分担就均匀;如果成员口数量不是2的N次方(比如3个),在16个时隙里有1个接口得到了6次发送报文的机会,另外两个接口只得到5次发送报文的机会,负载分担就不均匀。因此,Eth-Trunk成员口数量最好是2的N次方,保证负载分担更均匀。 是否存在跨设备堆叠CE交换机在堆叠场景下默认开启Eth-Trunk本地优先转发功能,即从本设备进入的流量,优先从本设备的出接口转发出去。本地优先转发可以降低转发延时,降低堆叠链路的利用率。 如图1-3所示,SwitchA与SwitchB组成堆叠,上下行加入到Eth-Trunk。如果没有本地优先转发,则从SwitchA进入的流量,会有一部分经过堆叠线缆,从SwitchB的物理接口转发出去。设备启用本地优先转发之后,从SwitchA进入的流量,优先从SwitchA的接口转发。 图1-3 流量本地优先转发示意图默认开启本地优先转发的情况下,同框的Eth-Trunk成员口负载分担均匀,不同框的Eth-Trunk成员口负载分担不均匀。要解决跨设备堆叠场景中的不同设备的成员口负载分担不均问题,可以按照以下步骤处理。
是否存在Hash极化问题Hash极化,也被称为Hash不均,是指流量经过2次或2次以上Hash后出现的负载分担不均匀的现象。常见于跨设备的多次Hash场景,即第一级进行Eth-Trunk Hash,第二级再进行ECMP Hash或者Eth-Trunk Hash。在同一设备上,若存在ECMP的出接口为多个Eth-Trunk也可能会出现Hash极化。 图1-4 Hash极化示意图如图1-4所示,Switch A的入接口有4种流量,出接口为2条等价链路,经Hash计算,流量1和流量2走上面的链路到Switch B;流量3和流量4走下面的链路到Switch C。在Switch B出接口同样为2条等价链路,若采用与Switch A相同或者类似的Hash算法,其Hash的结果将为流量1和流量2走上面的链路,而下面的链路没有流量。Switch C的情况类似。这种经过多次Hash后,ECMP或者Eth-Trunk各成员口之间流量极度不均匀的现象称为Hash极化。 实际上,交换机Hash功能的实现很大程度上取决于芯片,所以当使用同类型芯片的交换机位于网络中相邻的层级时,就可能会出现Hash极化问题。因此,在多级网络中部署ECMP或者Eth-Trunk负载分担,需要考虑出现Hash极化问题的风险。 解决两级负载分担场景下的哈希极化问题,就是要避免两级设备使用相同的负载分担参数。
第一级Eth-Trunk使用源IP进行哈希。
第二级Eth-Trunk使用目的IP进行哈希。
流量类型与负载分担模式是否匹配判断Eth-Trunk接口转发的报文特征和配置的负载分担方式是否匹配。如果不匹配,例如转发报文的MAC地址变化,而设置的负载分担方式为src-ip,则无法负载分担。 识别报文类型
确定报文为IP报文、MPLS报文、TRILL报文、FCoE报文等。
针对不同类型的报文,可以分别配置负载分担模式。以CE6856HI为例,负载分担方式如表1 不同报文的负载分担方式所示。例如,对于IPv4报文,默认情况下根据源IP、目的IP、目的端口号、源端口号进行负载分担,也可以通过命令行配置负载分担模式。需要获取其他款型的负载分担方式,请参考配置负载分担方式进行配置。 表1-1 不同报文的负载分担方式配置负载分担方式
用户可以根据流量模型设置不同的负载分担方式来选择各种负载分担模式,流量中该参数变化越频繁,选择此负载分担模式的流量就越均衡。例如,在网络中,如果报文的IP地址变化较频繁,那么选择基于dst-ip、src-ip或src-dst-ip的负载分担模式更有利于流量在各物理链路间合理的负载分担;如果报文的MAC地址变化较频繁,IP地址比较固定,那么选择基于dst-mac、src-mac或src-dst-mac的负载分担模式更有利于流量在各物理链路间合理的负载分担。
在网络中,对于未知单播,如果IP报文的源MAC地址或者目的MAC变化较频繁,而IP地址比较固定,那么选择参数mac对未知单播进行负载分担;如果IP报文的源IP地址或者目的IP地址变化较频繁,而MAC地址比较固定,那么选择参数enhanced对未知单播进行负载分担。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:21:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |