基于vxlan的多链路负载分担的实现方法

作者简介:刘成天,就职于赛特斯信息科技股份有限公司,高级工程师,目前工作地点南京,主要从事vCPE和路由器相关的研发工作

一、应用场景

目前大部分网关或服务器设备常采用双链路同时接入多条ISP链路的方式来满足网络的负载均衡和主备切换等,实现该功能常用的方法是利用策略路由技术,根据链路的网络状况和权重配置在路由时动态选择不同的链接发送数据,从而实现多路的负载分担。

针对于点到点隧道模式的连接如vxlan,由于其采用四层UDP封装的方式,在端口和IP地址固定的情况下,采用策略路由无法有效的散列到不同链路上。本文描述了在具有双物理链路的设备上,如何在Openvswitch中针对vxlan隧道实现负载均衡策略的实现方法,并搭建测试环境进行方案有效性的验证。

二、实验组网

两台设备server1和server2通过交换机相互通信,分别在两台设备上运行Openvswitch,通过建立vxlan隧道对接入的VM1和VM2进行二层跨域组网,其中server1上存在两个物理链路和serve2进行通信,通过本文的负载均衡方案,能够使vxlan隧道报文负载分担到两条物理链路上,组网如下图所示:

三、实现原理

在OVS中建立两个vxlan端口,每个vxlan端口绑定对应的链路出接口,并建立group table,类型设置为select,把两个vxlan端口加入group中的bucket中,通过流表建立其它端口和group的转发关系,通过group对数据流的随机散列,从而实现对物理链路的负载均衡,下图给出了OVS中的网络结构:

四、实验配置

4.1 OVS1配置

创建ovs桥

设置ovs桥支持的openflow版本

把if1接口加入桥端口中,用于VM1接入ovs桥中

创建vxlan0和vxlan1,并分别绑定两个链路接口

其中option:local_ip用于绑定对应IP的网络接口,对端地址为server2的IP地址,查看vxlan端口配置:

创建group,并把vxlan1和vxlan2加入group中

其中bucket表示加入group的端口号,vxlan1和vxlan2在br-local中的端口号分别为2和3(ovs-ofctl show br-local -O OpenFlow13命令可以查看,也可以在创建vxlan端口时通过ofport_request指定),查看group的配置:

创建入口为if1转发到group的流表

创建入口为vxlan的数据转发到if1的流表

查看流表配置如下:

4.2 OVS2配置

OVS2中不需要负载均衡,主要是vxlan的配置需要和OVS1中的两条链路对应:

OVS2中采用默认流表,不需要流表配置

4.2 测试方法

首先在VM1上ping对端VM2的地址,查看是否网络可达;

然后通过发包工具从VM1发送报文到VM2,本文采用了龙卷风工具发送UDP报文进行测试,如下图所示,这里把MAC地址、IP地址和端口号采用散列的方式(递增),这样group中才能把数据散列到不同的vxlan端口,如果是固定地址和端口的报文,group会把报文固定送入到其中一个vxlan口,可以看出group是根据地址和端口进行负载分担的。

五、测试结果

通过命令ovs-ofctl dump-ports br-local -O OpenFlow13查看各个端口的报文流量,可以看到端口中的tx报文变化,通过vxlan1和vxlan2端口的流量变化证实了group将不同的流随机散列到了buckets里面的端口中,通过vxlan和接口的绑定关系,从而把不同的流随机散列到了不同的链路上,实现了负载均衡的效果。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/19551.html
分享到:
相关文章
条评论

登录后才可以评论

certusnet-sky 发表于17-07-10
1