EVPN VxLAN 流量负载均衡考虑 Underlay和Overlay两个层面,
Underlay是指网络中的Spine和Leaf组成一张Fabric,提供3层路由可达。
Overlay是被封装的流量跑在Underlay之上。EVPN VxLAN 所指的被封装流量也就是基于UDP的VxLAN封装。
以Juniper为例
先说Underlay,实现Underlay流量负载均衡需要应用两个命令:
- set protocols bgp group underlay multipath multiple-as
multipath multiple-as 允许注入多条等价路由。 - set policy-options policy-statement LB then load-balance per-packet
set routing-options forwarding-table export LB
load-balance per-packet影响FIB表的装载
注: 配置上是逐包,但是实际上是逐流的,JUNOS命令行的问题。
参考下图,第一个命令是作用在RIB表,第二个命令是作用在FIB表。
测试一下命令:
以这个EBGP Fabric为例:
从Leaf1看一下到Border1(10.0.0.3)的路径。
没有配置multipath multiple-as时,到10.0.0.3的下一跳是 10.0.0.20
配置了multipath multiple-as后,到10.0.0.3的下一跳是 10.0.0.20和10.0.0.12
配置了multipath multiple-as,但是没有配置 load-balance per-packet,转发表里仍然只有一个下一跳
同时配置了multipath multiple-as和load-balance per-packet,转发表也是两个下一跳,状态就对了。
再说Overlay
上图ESI场景中,
Border1和Border2都学到了H2的Mac
Leaf1会收到Border1和Border2发来的Type2路由,记录了H2的Mac地址。于是Leaf1就知道了去往H2可以通过Border1和Border1这就形成了Overlay负载均衡。当然Leaf1到Border1或Border2还有Underlay层面的负载均衡。
还有一种情况,只有Border1学到了H2的Mac,其实Border2也是可以到达H2的
这时就需要Aliasing别名了。Border1和Border2都会发布Type1到Leaf1,Type1里有ESI(例子中:00:02:00:00:00:00:01:00:00:01),Leaf1知道了Border1和Border2是有同样的ESI。因为ESI一样,这时虽然Leaf1只学到了Border1发过来的H2 Mac,但是Leaf1也会认为Border1和Border2都可以到H2。
从Juniper的交换机上show一下,Leaf1学到Mac 6d:c1 下一跳esi.1784
再继续找esi.1784的下一跳VTEP,分别Border1&2 loopback 10.0.0.3和10.0.0.4
再往Underlay看,到loopback 10.0.0.3和10.0.0.4的出口被负载到两个物理出口。
总结一下,EVPN VxLAN的流量负载均衡要考虑Underlay和Overlay两个层面。Underlay主要是到VTEP的路径如何负载均衡;Overlay主要是在Multihoming场景中,如何利用ESI产生两个下一跳VTEP。