摘要
- 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 安装
1 | # 第一步:Getting the Code |
二、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 的流表。
1 | # 创建一个新的交换机 |
三、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 中的处理函数对数据包进行处理。
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 为例)
1 | $ cd sflow-rt |
- Connect Normal Switch to sFlow Analyzer
1 | // 指定 analyzer |
- Connect Open vSwitch to sFlow Analyzer
1 | // e.g. connect Open vSwitch to sFlow analyzer |
4.2 Connect Open vSwitch to OpenFlow controller
1 | // e.g. connect Open vSwitch to OpenFlow controller |
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
应用案例
News
Open vSwitch: Enable OpenFlow 1.5 by default | 25 Apr 2017
1 | ===================== ===== ===== ===== ===== ===== ===== |
前沿
扩展阅读
SDN技术专题
- SDN 技术指南(一): 架构概览
- SDN 技术指南(二):OpenFlow
- Preview SDN 技术指南(三):SDN Controller
- SDN 技术指南(四):Open vSwitch
- Preview SDN 技术指南(五):NFV
- Preview SDN 技术指南(六):OpenStack or Kubernetes ?
- Preview SDN 技术指南(七):标准化组织
- Preview SDN 技术指南(八):案例教学
- SDN技术指南(十):在线课程推荐
网络编程专题
网络安全专题
云计算专题
参考文献
- An Introduction to OVS Architecture | YY哥
- OVS 流表原理 | YY哥
- kontrolissues:Installing OpenSwitch
- OVS初级教程:使用Open vSwitch构建虚拟网络
- 基于 Open vSwitch 的 OpenFlow 实践 | IBM@developerworks,2014
- Offloading OVS Flow Processing using eBPF | William (Cheng-Chun) Tu VMware | OVS Conference 2016
- Traffic visibility and control with sFlow | Peter Phaal InMon Corp. November 2014
- Accelerating Open vSwitch to “Ludicrous Speed” | Network Heresy , 2014
- Open Virtual Network (OVN) | sflow.com ,2015
- Open vSwitch 2014 Fall Conference
- Open vSwitch 2015 Fall Conference
- Open vSwitch 2016 Fall Conference