《实战录》导语
云端卫士《实战录》栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益。本期分享人为云端卫士SDN工程师宋飞虎,宋工出品,质量保证,欢迎火速围观。
简介
OVS是一个高质量的,多层虚拟交换机(网络分层的层),其目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议。Dpdk是X86平台报文快速处理的库和驱动的集合,不是网络协议栈,不提供二层,三层转发功能,不具备防火墙ACL功能,但通过DPDK可以轻松的开发出上述功能。Dpdk的优势是可以将用户态的数据,不经过内核直接转发到网卡,实现加速目的。本文向大家展示了DPDK和OVS环境搭建的过程,同时针对功能进行了测试。
实验环境
1、ONOS环境
环境依赖
DPDK环境:Kernel version >= 2.6.34
glibc >= 2.7
memory >= 1024
vcpu = 2
检查环境的网卡是否被DPDK支持,可以从下面的官网查询:http://www.dpdk.org/doc/nics
OVS环境:OVS各版本支持的Linux内核如下,可以根据下表选择适合的Linux系统安装。
本文实验环境
DPDK版本: dpdk-stable-16.07.1
Ovs版本: Open vSwitch 2.6.1
Linux版本: 3.10.0-123.el7.x86_64
Red Hat版本: 4.8.2-16
2、DPDK和OVS编译安装
如果安装环境有OVS,需要卸载重新编译,因为安装OVS+DPDK,OVS编译时需要使用DPDK的库。
安装DPDK
打开安装目录: cd /home/sdn/
下载安装包: wget http://dpdk.org/browse/dpdk/snapshot/dpdk-16.07.zip
解压安装包: unzip dpdk-16.07.zip
设置全局变量:
export DPDK_DIR=/usr/src/dpdk-16.07
export DPDK_TARGET=x86_64-native-linuxapp-gcc
export DPDK_BUILD=$DPDK_DIR/$DPDK_TARGET
安装DPDK:make install T=$DPDK_TARGET DESTDIR=install
安装OVS
打开安装目录:cd /home/sdn
下载安装包: wget http:// openvswitch.org/ releases/ openvswitch-2.6.1.tar.gz
解压安装包:tar -zxvf openvswitch-2.6.1.tar.gz
设置全局变量: export OVS_DIR=/home/sdn/openvswitch-2.6.1
安装OVS: cd $OVS_DIR
./boot.sh
./configure --with-dpdk=$DPDK_BUILD
make install
配置hugepage
1)修改hugepage的页数为2048
echo 'vm.nr_hugepages=2048' > /etc/sysctl.d/hugepages.conf
2)查看设置的hugepage配置
grep HugePages_ /proc/meminfo
3)挂载hugepage
mount -t hugetlbfs none /dev/hugepages
使用DPDK绑定网卡
1)设置驱动为VFIO
modprobe vfio-pci
2)绑定物理网卡
$DPDK_DIR/tools/dpdk-devbind.py --bind=vfio-pci 06:00.1
3)查看网卡绑定状态
$DPDK_DIR/tools/dpdk-devbind.py –status
启动OVS和DPDK
1)创建数据库
mkdir -p /usr/local/etc/openvswitch
mkdir -p /usr/local/var/run/openvswitch
rm /usr/local/etc/openvswitch/conf.db
ovsdb-tool create /usr/local/etc/openvswitch/conf.db \
/usr/local/share/openvswitch/vswitch.ovsschema
2)启动ovsdb-server
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--pidfile --detach
3)首次运行时要创建初始化数据库
ovs-vsctl --no-wait init
4)启动ovs和dpdk
export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-vswitchd unix:$DB_SOCK --pidfile –detach
添加OVS网桥和端口
配置流程
1)增加网桥
ovs-vsctl add-br br4 -- set bridge br4 datapath_type=netdev
2)创建两个DPDK类型的端口(这两个端口与之前添加的DPDK网口顺序一致,是一一对应的)
ovs-vsctl add-port br4 dpdk0 -- set Interface dpdk0 type=dpdk
ovs-vsctl add-port br4 dpdk1 -- set Interface dpdk1 type=dpdk
3)创建完DPDK端口之后,就会创建一个轮询线程,循环监测DPDK端口,因此ovs-vswitchd进程的CPU利用率会一直保持100%,通过top命令可以查看
4)创建完可以使用ovs-vsctl show查看
注意事项
添加网桥之前最好使用ifconfig命令查看一下主机已有的网桥,OVS创建的网桥不能和已有的重复,不然网桥的逻辑端口状态一直在up/down之间跳转。要创建”netdev” 类型的网桥,否则创建完网桥会报错:could not open network device br0 (Invalid argument)。
环境测试
环境搭建
1)使用OVS连接controller
ovs-vsctl set-controller br4 tcp:192.168.6.253:6653
2)创建host,下发group和flow表项
Topo图:
Group表:
Flow表:
3)查看网桥端口流量情况