赵占旭的博客

OVS-DPDK 链路聚合

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

链路聚合


本文学习的是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来负载均衡流量

测试


这次我们使用两台宿主机,每个宿主机分别两个物理端口进行绑定。

测试场景

avatar

硬件: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

配置

添加桥

1
ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev

添加bond口

1
2
3
ovs-vsctl add-bond br0 dpdkbond1 dpdk0 dpdk1
-- set Interface dpdk0 type=dpdk \
-- set Interface dpdk1 type=dpdk

添加vhostuser端口

1
ovs-vsctl add-port br0 vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser

添加流表

1
2
ovs-ofctl del-flows br0
ovs-ofctl add-flow br0 actions=NORMAL

启动虚拟机

测试结果

Active-Backup

配置

配置宿主机

1
ovs-vsctl set port dpdkbond1 bond_mode=active-backup

配置vm

1
2
3
4
5
6
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

测试结果

avatar

上图可以看出连通性没有问题。

avatar

上图可以看出所有的流量都走的是dpdk1,即端口2。

balance-slb

配置

配置宿主机

1
ovs-vsctl set port dpdkbond1 bond_mode=balance-slb

配置vm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

测试结果

avatar

上图可以看出所有的流量都走的是两个端口。

balance-tcp

配置

配置宿主机

1
2
3
4
5
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

1
2
3
4
5
6
7
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

测试结果

avatar

上图可以看到两条TCP流的端口分别为43129和43130。

avatar

上图可以看出两条流走的两个端口。

其他的配置


设置LACP模式为passive/off

1
2
ovs-vsctl set port dpdkbond1 lacp=passive
ovs-vsctl set port dpdkbond1 lacp=off

支持LACP能回退到Active-Backup模式

1
ovs-vsctl set port dpdkbond1 other_config:lacp-fallback-ab=true

设置LACP协商时间,快的30ms,慢的1s,默认是慢的

1
2
ovs-vsctl set port dpdkbond1 other_config:lacp-time=fast
ovs-vsctl set port dpdbond1 other_config:lacp-time=slow

端口up之后多少ms能够激活bond接口

1
ovs-vsctl set port dpdkbond1 other_config:bond_updelay=1000

重新负载均衡bond端口之间的流量间隔时间ms,设置为0表示禁止

1
ovs-vsctl set port dpdkbond1 other_config:bond-rebalance-interval=10000

展示bond接口的信息

1
2
ovs-appctl bond/show
ovs-appctl bond/show dpdkbond0

avatar

注意:所有文章非特别说明皆为原创。为保证信息与源同步,转载时请务必注明文章出处!谢谢合作 :-)

原始链接:http://zhaozhanxu.com/2016/12/13/SDN/OVS/2016-12-13-bond/

许可协议: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。