注:本文是参照了一些其他文章,原文地址点击这里
链路聚合
本文学习的是ovs-dpdk自带的bond,但是需要留意的是自带的bond和我们之前Linux理解的bond还是有区别的,在ovs时,因为物理端口不用添加到ovs,所以bond口也不用管,其实就算添加到ovs中也是一个端口;而现在ovs-dpdk添加bond口之后,几个物理口依然能暴露到ovs-dpdk中,如果我们需要流表配置的话可能需要多份流表了。我现在会先这样使用,如果后续有问题的话也会修改这部分的代码,暴露一个端口给ovs-dpdk。
BOND模式
- Active-Backup 主备模式,MAC地址使用Active的端口MAC
- balance-slb 根据源MAC和VLAN的HASH来负载均衡流量
- balance-tcp 根据五元组的HASH来负载均衡流量
测试
这次我们使用两台宿主机,每个宿主机分别两个物理端口进行绑定。
测试场景
硬件:Intel® Xeon® processor E5-2695 V3 product family, Intel® Server Board S2600WT2, and Intel® 82599ES 10-G SFI/SFP+ (rev NIC
软件: Ubuntu* 16.04, Kernel version 4.2.0-42-generic, OVS 2.6, DPDK 16.07, and QEMU2.6
配置
添加桥
ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
添加bond口
ovs-vsctl add-bond br0 dpdkbond1 dpdk0 dpdk1
-- set Interface dpdk0 type=dpdk \
-- set Interface dpdk1 type=dpdk
添加vhostuser端口
ovs-vsctl add-port br0 vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser
添加流表
ovs-ofctl del-flows br0
ovs-ofctl add-flow br0 actions=NORMAL
启动虚拟机
测试结果
Active-Backup
配置
配置宿主机
ovs-vsctl set port dpdkbond1 bond_mode=active-backup
配置vm
ip addr flush eth0
//分别配置两个vm的ip,分别为10.0.0.1/24和10.0.0.5/24
ip addr add <ip-addr> dev eth0
ip link set dev eth0 up
iperf -s -p 8080
iperf -c 10.0.0.1 -p 8080
测试结果
上图可以看出连通性没有问题。
上图可以看出所有的流量都走的是dpdk1,即端口2。
balance-slb
配置
配置宿主机
ovs-vsctl set port dpdkbond1 bond_mode=balance-slb
配置vm
ip link add link eth0 name eth0.10 type vlan id 10
ip link add link eth0 name eth0.20 type vlan id 20
ip addr flush eth0
ip addr flush eth0.10
//分别配置两个vm的ip,分别为10.0.0.1/24和10.0.0.5/24
ip addr add <ip-addr> dev eth0.10
ip addr flush eth0.20
//分别配置两个vm的ip,分别为20.0.0.1/24和20.0.0.5/24
ip addr add <ip-addr> dev eth0.20
ip link set dev eth0.10 up
ip link set dev eth0.20 up
iperf -s -u -p 8080
iperf -c 10.0.0.5 -u -p 8080 -b 1G
iperf -c 20.0.0.5 -u -p 8080 -b 1G
测试结果
上图可以看出所有的流量都走的是两个端口。
balance-tcp
配置
配置宿主机
ovs-vsctl set port dpdkbond1 bond_mode=balance-tcp
//一下2选1,启动LACP
ovs-vsctl set port dpdkbond1 lacp=active
//关闭LACP会回退到主备模式
ovs-vsctl set port dpdkbond1 lacp=passive
配置vm
ip addr flush eth0
//分别配置两个vm的ip,分别为10.0.0.1/24和10.0.0.5/24
ip addr add <ip-addr> dev eth0
ip link set dev eth0 up
iperf -s -p 9000
iperf -c 10.0.0.5 -p 9000
iperf -c 10.0.0.5 -p 9000
测试结果
上图可以看到两条TCP流的端口分别为43129和43130。
上图可以看出两条流走的两个端口。
其他的配置
设置LACP模式为passive/off
ovs-vsctl set port dpdkbond1 lacp=passive
ovs-vsctl set port dpdkbond1 lacp=off
支持LACP能回退到Active-Backup模式
ovs-vsctl set port dpdkbond1 other_config:lacp-fallback-ab=true
设置LACP协商时间,快的30ms,慢的1s,默认是慢的
ovs-vsctl set port dpdkbond1 other_config:lacp-time=fast
ovs-vsctl set port dpdbond1 other_config:lacp-time=slow
端口up之后多少ms能够激活bond接口
ovs-vsctl set port dpdkbond1 other_config:bond_updelay=1000
重新负载均衡bond端口之间的流量间隔时间ms,设置为0表示禁止
ovs-vsctl set port dpdkbond1 other_config:bond-rebalance-interval=10000
展示bond接口的信息
ovs-appctl bond/show
ovs-appctl bond/show dpdkbond0