注:本文是参照了一些其他文章,原文地址点击这里

链路聚合


本文学习的是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

请输入图片描述

最后修改:2021 年 08 月 20 日 03 : 40 PM