设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 1142|回复: 4
收起左侧

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

[复制链接]
发表于 2017-8-29 17:04:43 | 显示全部楼层 |阅读模式
一、应用场景
目前大部分网关或服务器设备常采用双链路同时接入多条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桥
               
                                                                Java

                                                ovs-vsctl add-br br-local
                                                       
                                        1

                               
ovs-vsctl add-br br-local

                       
               

设置ovs桥支持的openflow版本
               
                                                                Java

                                                ovs-vsctl set bridge br-local protocols=OpenFlow13
                                                       
                                        1

                               
ovs-vsctl set bridge br-local protocols=OpenFlow13

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

                                                ovs-vsctl add-port br-local if1
                                                       
                                        1

                               
ovs-vsctl add-port br-local if1

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

                                                ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan  options:remote_ip=172.16.25.147 option:local_ip=172.16.25.129  options:key=100ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan  options:remote_ip=172.16.25.147 option:local_ip=172.16.25.169  options:key=100
                                                       
                                        1
2

                               
ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan  options:remote_ip=172.16.25.147 option:local_ip=172.16.25.129  options:key=100
ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan  options:remote_ip=172.16.25.147 option:local_ip=172.16.25.169  options:key=100

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

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

                                                ovs-ofctl -O OpenFlow13 add-group br-local  group_id=5566,type=select,bucket=output:2,bucket=output:3
                                                       
                                        1

                               
ovs-ofctl -O OpenFlow13 add-group br-local  group_id=5566,type=select,bucket=output:2,bucket=output:3

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

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

                                                ovs-ofctl -O OpenFlow13 add-flow br-local in_port=1,actions=group:5566
                                                       
                                        1

                               
ovs-ofctl -O OpenFlow13 add-flow br-local in_port=1,actions=group:5566

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

                                                ovs-ofctl -O OpenFlow13 add-flow br-local in_port=2,actions=output:1ovs-ofctl -O OpenFlow13 add-flow br-local in_port=3,actions=output:1
                                                       
                                        1
2

                               
ovs-ofctl -O OpenFlow13 add-flow br-local in_port=2,actions=output:1
ovs-ofctl -O OpenFlow13 add-flow br-local in_port=3,actions=output:1

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

                                                ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan  options:remote_ip=172.16.25.129  options:key=100ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan  options:remote_ip=172.16.25.169  options:key=100
                                                       
                                        1
2

                               
ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan  options:remote_ip=172.16.25.129  options:key=100
ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan  options:remote_ip=172.16.25.169  options:key=100

                       
               
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和接口的绑定关系,从而把不同的流随机散列到了不同的链路上,实现了负载均衡的效果。
                                                                       
                       

发表于 2017-8-29 21:43:24 | 显示全部楼层
感谢楼主分享!
沙发 2017-8-29 21:43:24 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2024-3-29 22:33 , Processed in 0.074945 second(s), 8 queries , Redis On.  

  Powered by Discuz!

  © 2001-2024 HH010.COM

快速回复 返回顶部 返回列表