SDN 技术指南(四):Open vSwitch

  • Open vSwitch 安装
  • Open vSwitch 命令行
  • Open vSwitch 运行原理
  • Open vSwitch 性能监控

前言

由之前发布的文章知道 Open vSwitch(Open Source Virtual Switch) 是一款基于软件实现的开源虚拟交换机。

Open Source Virtual Switch:Community-Based, Open Source,. Full-Featured Network Operating System.

一、Open vSwitch 安装

# 第一步:Getting the Code
git clone https://git.openswitch.net/openswitch/ops-build

# 第一步:选择编译模式

# 模式一:To a supported white box switch ( 例如 VMware vSwitch、vDS、Nexus 1000V)
make configure genericx86-64

# 模式二:OVA (可以直接导入虚拟机,例如 Oracle Virtual box )
make configure appliance

# 第三步:打包
make

二、Open vSwitch 命令行

2.1 核心概念

  • Bridge :网桥,对应一个以太网交换机(Switch),一个主机中可以创建一个或者多个 Bridge 设备。
  • Port :Port 与物理交换机的端口概念类似, 每个 Port 都属于一个特定的 Bridge 。端口类型:Normal、Internal、Patch、Tunnel。
  • Interface:接口,对应网卡,即可以是 ovs 生成的虚拟网卡,也可能是挂载在 ovs 的物理网卡。在通常情况下,Port 和 Interface 是一对一的关系, 只有在配置 Port 为 bond 模式后,Port 和 Interface 是一对多的关系。

2.2 基本操作

  • ovs-vsctl : 查询和更新 ovs-vswitchd 的配置;
  • ovs-appctl :发送命令消息,运行相关 daemon;
  • ovsdbmonitor : GUI工具,可以远程获取 OVS 数据库和 OpenFlow 的流表。
# 创建一个新的交换机
$ ovs-vsctl add-br ovs-switch
# 创建一个端口 设置端口
# 如果在创建端口的时候没有指定 OpenFlow 端口编号,会自动生成一个
$ ovs-vsctl add-port ovs-switch p0 -- set Interface p0 ofport_request=100
# 设置接口类型
$ ovs-vsctl set Interface p0 type=internal
$ ethtool -i p0
# 查看交换机的端口信息
$ ovs-ofctl show ovs-switch
# 查看 datapath 的信息
$ ovs-dpctl show

三、Open vSwitch 运行原理

3.1 Open vSwitch 内部结构

Open vSwitch 内部分为用户态和内核态。用户层(态)为守护程序实现了交换机和流表,是 Open vSwitch 的核心,提供了一些组件去管理交换机,实现数据库,对内核进行直接管理。主要包含三个守护进程:

  • ovs-vswitched : 主要模块,守护进程,包括一个 Linux 内核模块。
  • ovsdb-server : 数据库服务,保存相关配置信息
  • ovs-brcompatd

数据流(flow) 通过 Open vSwitch 转发的流程。每收到一个包之后,OVS Kernel Module 将检查它是否能能命中内核模块的缓存(flow cache) ,如果命中缓存则交由 kernel 处理;如果不能命中缓存则先发送到用户空间(ovs-vswitchd process )进行转发决策 ——— 基于一系列已经安装配置的规则库(OpenFlow rulues);如果没有命中任何一条规则,则将包发送给 OpenFlow 控制器处理。一旦做出转发决策,这个包和转发动作将传回 OVS Kernel Module 缓存起来。这条 flow 接下来的包就将命中缓存并直接由 kernel 转发处理。

  • openvswitch_mod.ko 是内核态(kernel)的主要模块 完成数据包的查找、转发、修改等操作,一条 flow 的后续数据包到达 OVS 后将直接交由内核态,使用 openvswitch_mod.ko 中的处理函数对数据包进行处理。
OVS Flow Processing
OVS包含一个Linux内核

3.2 Open vSwitch 的协议支持情况

  • GRE-tunneled mirrors: 远程监控
  • LACP、VLAN、IGMP、LLDP、BFD、STP、RSTP、QoS、HFSC
  • Complete IPv6 (Internet Protocol version 6) support
  • Support for multiple tunneling protocols, including GRE、VXLAN 、STT、IPsec
  • Multi-table forwarding pipeline with a flow-caching engine

3.3 Open vSwitch 的 OpenFlow 支持情况

  • ovs-openflowd:一个简单的 OpenFlow 交换机;
  • ovs-controller:一个简单的 OpenFlow 控制器;
  • ovs-ofctl 查询和控制 OpenFlow 交换机和控制器;
  • ovs-pki :OpenFlow 交换机创建和管理公钥框架;
  • ovs-tcpundump:tcpdump 的补丁,解析 OpenFlow 的消息;

Open vSwitch support for OpenFlow 1.1 and beyond is a work in progress.>>> OpenFlow Support in Open vSwitch

四、Open vSwitch 性能监控

“If you can’t measure it, you can’t improve it” —— Lord Kelvin

4.1 sFlow 监控示例

  • 启动分析器 sFlow Analyzer (以 sFlow-RT 为例)
$ cd sflow-rt
$ ./start.sh
bash-3.2$ ./start.sh
信息: Listening, sFlow port 6343
信息: Listening, HTTP port 8008
信息: app/ovs/scripts/status.js started
警告: app/ovs/scripts/status.js app/ovs/scripts/status.js
信息: app/ovs/scripts/status.js stopped
$ ps -ef | grep 6343
  501 30565 30431   0  2:45下午 ttys002    0:03.90 /usr/bin/java -Xms200M -Xmx200M -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Dsflow.port=6343 -Dhttp.port=8008 -jar ./lib/sflowrt.jar
  • Connect Normal Switch to sFlow Analyzer
// 指定 analyzer
switch(root)# sflow collector 10.0.0.1
// 数据包采样: 1-in-4096
// 常规参考值:[100 Mb/s: 1 in 500]、[1 Bb/s: 1 in 1000]、[10 Gb/s: 1 in 2000]
switch(root)# sflow sampling 4096
// 轮询计数器 polling counters every 20 seconds
switch(root)# sflow polling 20
switch(root)# sflow enable
  • Connect Open vSwitch to sFlow Analyzer
// e.g. connect Open vSwitch to sFlow analyzer
ovs-vsctl — –id=@sflow create sflow agent=eth0 \target=\”10.0.0.1:6343\” sampling=1000 polling=20 \
— set bridge br0 sflow=@sflow

4.2 Connect Open vSwitch to OpenFlow controller

// e.g. connect Open vSwitch to OpenFlow controller
ovs-vsctl set-controller br0 tcp:10.0.0.1:6633

4.3 Traffic analytics : sFlow vs NetFlow

  • sFlow does not use flow cache, so realtime charts more accurately reflect traffic trend
  • NetFlow spikes caused by flow cache active-timeout for long running connections

应用案例

专题合辑:Network Engineering

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏钱塘大数据

理工男图解零维到十维空间,烧脑已过度,受不了啦!

让我们从一个点开始,和我们几何意义上的点一样,它没有大小、没有维度。它只是被想象出来的、作为标志一个位置的点。它什么也没有,空间、时间通通不存在,这就是零维度。

28430
来自专栏腾讯高校合作

【倒计时7天】2018教育部-腾讯公司产学合作协同育人项目申请即将截止!

15420
来自专栏腾讯社交用户体验设计

ISUX Xcube智能一键生成H5

50920
来自专栏Ken的杂谈

【系统设置】CentOS 修改机器名

17830
来自专栏怀英的自我修炼

考研英语-1-导学

英二图表作文要重视。总体而言,英语一会比英语二难点。不过就写作而言,英语二会比英语一有难度,毕竟图表作文并不好写。

11510
来自专栏FSociety

SQL中GROUP BY用法示例

GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类...

5.1K20
来自专栏前端桃园

知识体系解决迷茫的你

最近在星球里群里都有小伙伴说道自己对未来的路比较迷茫,一旦闲下来就不知道自己改干啥,今天我这篇文章就是让你觉得一天给你 25 个小时你都不够用,觉得睡觉都是浪费...

20140
来自专栏haifeiWu与他朋友们的专栏

复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负...

27640
来自专栏微信公众号:小白课代表

不只是软件,在线也可以免费下载百度文库了。

不管是学生,还是职场员工,下载各种文档几乎是不可避免的,各种XXX.docx,XXX.pptx更是家常便饭,人们最常用的就是百度文库,豆丁文库,道客巴巴这些下载...

44030
来自专栏钱塘大数据

中国互联网协会发布:《2018中国互联网发展报告》

在2018中国互联网大会闭幕论坛上,中国互联网协会正式发布《中国互联网发展报告2018》(以下简称《报告》)。《中国互联网发展报告》是由中国互联网协会与中国互联...

13450

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励