当前位置: 首页 > 科技观察

数据中心网络等效多路径ECMP技术

时间:2023-03-17 12:16:32 科技观察

目前,大量的ECMP(Equal-CostMultipathRouting,简称ECMP)将应用在数据中心网络广泛使用的Fabric架构中。其优势主要体现在网络冗余度和可靠性的提高,同时也提高了网络资源的利用率;大量的ECMP链路会在某些场景的运行过程中引起其他问题。例如,当一条ECMP链路断开时,ECMP组内的所有链路流量将被重新HASH,这将导致有状态服务器区域(如LVS)出现雪崩现象,或者出现多级ECMPHASH极点.造成链路拥塞等问题,本文将基于ECMP的运行原理对上述问题进行分析,并探讨如何优化ECMP的应用。等价多路径路由等价多路径路由是指有多条等价路径到达同一个目的地址。当设备支持等价路由时,发往目的IP或目的网段的三层转发流量可以通过不同的路径分担,实现网络链路的负载均衡和链路故障时的快速切换。ECMP实现过程:图1:ECMP流程图Step1:HASH因子的选取首先转发数据包查询路由表,确认存在多条等价路由,然后提取key参与HASH根据当前用户配置的流量均衡算法字段计算,即HASH因子。ECMP流量均衡可选择的HASH因子如下:图表1:流量均衡模式对应的HASH因子表选择源IP作为HASH因子。另外,在选择提取HASH因子作为目的IP时,ECMP会默认选择源IP和目的IP作为HASH因子。步骤2:HASH计算是根据步骤1提取的HASH因子,根据HASH算法计算得到对应的HASHlb-key(load-balancekey)。ECMP流量均衡支持的HASH算法有XOR、CRC、CRC+加扰等,HASH算法有很多种,我们以XOR算法为例进行说明。XOR算法当两个输入位相同时为0,不同时为1。哈希因子不同,运算结果也不同。1.HASH因子为IP地址源(SIP):a)SIP异或0得到32位值ab)值a与高16位和低16位异或得到16位值bc)15~的值b的12bit和11~8bit然后异或计算得到一个4bit的值cd)值c替换值b的11~8bit得到值de)值d截取低10位为lbkey2,HASH因子为SIP+DIP/DIP:a)DIPXORSIP得到一个32位的值ab)其余操作步骤与SIP操作一致3.HASH因子为SIP+DIP+SP+DP:a)SIP异或DIP得到一个32位值ab)值a的低16位异或SP得到32bit值bc)值b的低16bit异或DP得到32bit值cd)值c的高16bit异或低16bit得到16bitvaluede)valued的15~12bitXOR11~8bit得到4bitvalueef)valuee替换valued的11~8bits得到valuefg)valuef截取低10位,即磅键。第三步:确认下一跳数据报文的转发,找到对应的ECMP基值(base-ptr),根据HASH因子通过HASH算法计算出HASHlb-key后,进行ECMP的余数计算下一跳链路号(Member-count),再与ECMP基值相加得到转发下一跳索引,决定下一跳转发路由。计算公式:Next-hop=(lb-key%Member-count)+base-ptr以上过程是ECMP正常的转发过程,但是在特定的网络环境下运行过程中会出现问题。接下来继续分析ECMP遇到的数据中心网络2常见问题。问题1.单条链路故障导致ECMP组内所有数据流重新HASH。当Leaf交换机向LVS服务器发送6条数据流时,Leaf进行HASH计算,负载均衡到各个LVS服务器。正常流量转发如图2所示:图2:ECMP转发示意图当LVS服务器网卡故障或链路故障时,Leaf交换机会对ECMP组中的数据流进行重新HASH,然后进行负载均衡剩余的有效链接,这将导致TCP会话断开并发生雪崩。比如在一些支付服务中,同一个用户的一个支付流程会调用多个业务服务。业务方要求支付过程全部落在同一个处理服务器上。之后不仅影响该链路所在LVS承载的用户,还会影响ECMP组下其他LVS承载的用户,如图3所示:图3:ECMP转发图失败后优化方案:为避免单个LVS服务器故障或单个链路故障导致整个ECMP组内的所有流量重新进行HASH,可以使用弹性HASH算法对ECMP进行优化。采用弹性HASH算法后,仅将故障链路的流量重新HASH到其他活跃链路上,非故障链路上的数据流不需要改变下一跳。实现效果如图4:图4:ECMPelasticHASH算法ElasticHASH具体实现原理:图5:elasticHASH过程在交换机上生成索引表(RHFlowSetTable),用于存储相关索引values对应下面的One-hoproutingaddress。数据报文通过路由查找表找到对应的ECMP基值,提取HASH因子,进行HASH运算。在对HASHKey和ECMP数进行取余时,无论是否存在链路故障,均以原数进行取余运算,因此运算结果是一致的,非故障链路数据仍按原链路转发。如下图所示,链路3发生故障后,软CPU会及时更新RH流表,将故障链路平均替换为正常链路。图6:弹性HASH索引表替换示意图问题2HASH极化问题如图7所示,当Leaf设备和Spine设备都使用偶数个上行链路且ECMP算法和HASH因子相同时,数据flow是在Leaf设备上经过HASH计算后,数据流负载由两个Spine分担。均衡后,数据流1、2、3转发给Spine-1,数据流4、5、6转发给Spine-2。然后,HASH计算负载由两个DCI核心分担。由于spine层使用的HASH算法与leaf的HASH算法一致,所以Spine-1的1、2、3数据流最终无负载转发给DCI-1。分发到DCI-2上的任意数据流,Spine-2的4、5、6数据流转发到DCI-2,没有数据流负载分担到DCI-1。Leaf-2发送的数据是一样的。流也是如此,导致hash极化问题,导致SPINE和DCI之间出现空闲链路,极大地浪费网络资源,甚至导致流量拥塞。图7:HASH极化优化方案:在同一厂商的Leaf设备和Spine设备使用相同上行链路数的场景下,应避免在相邻的两台设备上使用相同的负载均衡算法;设备在运行HASH计算时,除了传统的五元组外,还可以加入一个扰动因子,避免出现相同的HASH计算结果。HASH扰动计算过程中,仍正常提取HASH因子,并加入用户自定义的随机扰动因子。HASH算法运行后,不同交换机的HASH计算结果会不一致,避免HASH极化的发生。图8:HASH扰动计算过程中的动态负载均衡技术在数据中心网络中实现,这里存在大量突发流量,存在大象流和老鼠流并存的现象。本文介绍的基于数据流五元组的HASH算法,结合HASH扰动因子技术实现了流量负载均衡,但在大象流量和老鼠流量并存的网络中无法实现多链路间的流量负载均衡。锐捷网络新一代25G数据中心网络解决方案采用的先进芯片已经可以支持DLB(Dynamicloadbalance,动态链路负载)特性,可以根据流量负载情况实现动态HASH负载均衡。具体实现方法是交换机为每条负载均衡的数据流创建流表,根据流表记录流量统计,并根据流量统计动态调整链路负载均衡。