一、應用環境
目前大部分網關或服務器設備常采用雙鏈路同時接入多條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中采用默認流表,不需要流表配置