关于VXLAN的认识-----ovs+vxlan多链路负载分担的实现方法
一、应用环境
目前大部分网关或服务器设备常采用双链路同时接入多条ISP链路的方式来满足网络的负载均衡和主备切换等,实现该功能常用的方法是利用策略路由技术,根据链路的网络状况和权重配置在路由时动态选择不同的链接发送数据,从而实现多路的负载分担。
针对于点到点隧道模式的连接如vxlan,由于其采用四层UDP封装的方式,在端口和IP地址固定的情况下,采用策略路由无法有效的散列到不同链路上。
本文描述了在具有双物理链路的设备上,如何在Openvswitch中针对vxlan隧道实现负载均衡策略的实现方法,并搭建测试环境进行方案有效性的验证。
Open vSwitch(Open Source Virtual Switch) 是一款基于软件实现的开源虚拟交换机。
二、实验组网
两台设备server1和server2通过交换机相互通信,分别在两台设备上运行Openvswitch,通过建立vxlan隧道对接入的VM1和VM2进行二层跨域组网,其中server1上存在两个物理链路和serve2进行通信,通过本文的负载均衡方案,能够使vxlan隧道报文负载分担到两条物理链路上,组网如下图所示:
三、实验原理
在OVS中建立两个vxlan端口,每个vxlan端口绑定对应的链路出接口,并建立group table,类型设置为select,把两个vxlan端口加入group中的bucket中,通过流表建立其它端口和group的转发关系,通过group对数据流的随机散列,从而实现对物理链路的负载均衡,下图给出了OVS中的网络结构:
四、实验过程
在server1上的配置
1、安装openvswitch软件
yum install openvswitch
systemctl enable openvswitch.service
systemctl start openvswitch.service
systemctl status openvswitch.service
查看ovs运行情况 ps -ea | grep ovs
查看ovs版本 ovs-appctl --version
查看 OVS 支持的 OpenFlow 协议的版本 ovs-appctl --version
2、创建ovs桥(即ovs交换机)
ovs-vsctl add-br br-local
列出所有网桥 ovs-vsctl list-br
3、设置ovs桥支持的openflow版本
ovs-vsctl set bridge br-local protocols=OpenFlow13
4、把if1接口加入桥端口中,用于VM1接入ovs桥中
ovs-vsctl add-port br-local if1
5、创建vxlan0和vxlan1,并分别绑定两个链路接口
ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=10.1.80.14 option:local_ip=10.1.80.13 options:key=100
ovs-vsctl add-port br-local vxlan2 -- set interface vxlan2 type=vxlan options:remote_ip=10.1.80.14 option:local_ip=10.1.80.15 options:key=100
其中option:local_ip用于绑定对应IP的网络接口,对端地址option:remote_ip为server2的IP地址,查看vxlan端口配置:
6、创建group,并把vxlan1和vxlan2加入group中
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的配置:
7、创建入口为if1转发到group的流表
在server2上的配置
1、2中不需要负载均衡,主要是vxlan的配置需要和server1中的两条链路对应:
ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=10.1.80.13 options:key=100
ovs-vsctl add-port br-local vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=10.1.80.15 options:key=100
server2中采用默认流表,不需要流表配置