安装OpenvSwitch (ovs)
简介
搭建SDN环境少不了SDN交换机,SDN交换机跟普通交换机最大的区别就是将普通交换机的数据平面和控制平面相分离,SDN交换机只负责数据的转发,而控制指令则由更上一级的控制器下发。
Open vSwitch(下面简称OVS)是一个高质量的、多层虚拟交换机。OVS遵循开源Apache2.0许可,通过可编程扩展,OVS可以实现大规模网络的自动化(配置、管理、维护),同时支持现有标准管理接口和协议(比如NetFlow、sFlow、SPAN、RSPAN、CLI、LACP、802.1ag等)。此外OVS支持多种linux虚拟化技术,包括Xen/XenServer, KVM,和 VirtualBox等。
本文通过Ubuntu平台安装部署OVS,并介绍OVS上的一些常用操作,让读者进一步了解OpenFLow交换机。
实验环境
1. 本文基于下列环境安装:
- 虚拟机Vmware Workstation 10.0.3;
- Ubuntu13.10(内核版本3.11);
- OVS选择截稿前最新的Open vSwitch 2.3.0版本(2014年8月14日发布)。
2. OVS2.3.0版本最新特性及改进如下:
- OpenFlow 1.1,1.2,和1.3协议现在在OVS vswitchd中默认启用。
- Linux内核数据面现在提供一个优化的流匹配过程的精确匹配缓存。
- 数据面流现在有部分通配符tranport端口匹配字段。这减少了用户空间的向上调用,但会增加数据面中不同的掩模数。
- 提供megaflows在Linux内核下数据平面的操作。
- 添加IPFIX支持SCTP流和模板ICMPv4 / V6流。
- Linux内核支持到3.14。
- 添加dpdk实验支持。
3. OVS各版本支持的Linux内核如下,可以根据下表选择适合的Linux系统安装。
表1. OVS与Linux内核版本对应关系

4. OVS各模块简要介绍如下:
- ovs-vswitchd:主要模块,实现switch的daemon,包括一个支持流交换的Linux内核模块;
- ovsdb-server:轻量级数据库服务器,提供ovs-vswitchd获取配置信息;
- ovs-dpctl:用来配置switch内核模块;
- 一些Scripts and specs 辅助OVS安装在Citrix XenServer上,作为默认switch;
- ovs-vsctl:查询和更新ovs-vswitchd的配置;
- ovs-appctl:发送命令消息,运行相关daemon。
此外,OVS也提供了支持OpenFlow的特性实现,包括:
- ovs-ofctl:查询和控制OpenFlow交换机和控制器;
- ovs-pki:OpenFlow交换机创建和管理公钥框架;
- ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息。
准备工作
在正式下载安装OVS之前我们需要安装一些系统组件及库文件以作为OVS正确运行的环境依赖。请切换至root用户进行操作。
# apt-get update
# apt-get install -y build-essential
注:正常运行使用OVS只需要安装上述依赖即可,如果需要进一步开发OVS可能需要其他环境依赖,可以自行度娘。
部署Open vSwitch 2.3.0
1.下载OVS 2.3.0安装包。
2. 解压OVS 2.3.0安装包。
# wget http://openvswitch.org/releases/openvswitch-2.3.0.tar.gz
# tar -xzf openvswitch-2.3.0.tar.gz
3. 构建基于Linux内核的交换机。
# cd openvswitch-2.3.
# make clean
# ./configure --with-linux=/lib/modules/`uname -r`/build >/dev/null
4. 编译并安装OVS 2.3.0。
# make && make install
5. 如果需要OVS支持VLAN功能,还需要加载openvswitch.ko模块,如果不需要,此步可以忽略。
# modprobe gre
# insmod datapath/linux/openvswitch.ko
6. 我们需要安装并加载构建的内核模块。
# make modules_install
# /sbin/modprobe openvswitch
注:若重启机器导致openvswitch没有启动(lsmod |grep openvswitch),如果重新加载。
7. 使用ovsdb工具初始化配置数据库。
# mkdir -p /usr/local/etc/openvswitch
# ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
注:vswitchd/vswitch.ovsschema 指的是当前openvswitch工程目录下的。
至此,如果没有报错的话OVS的部署已经成功完成。如果中间步骤出现问题,请仔细检查是否按步骤进行或有无单词拼写错误。
启动Open vSwitch 2.3.0
1.在启动OVS之前,我们需要先启动ovsdb-server配置数据库。注意后面的命令大部分是由两个短“-”组成的。
# ovsdb-server -v --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach --log-file
2.首次用ovsdb-tool创建数据库时需用ovs-vsctl命令初始化下数据库。
# ovs-vsctl --no-wait init
3. 启动OVS主进程
# ovs-vswitchd --pidfile --detach --log-file
4. 查看OVS进程是否启动。
root@ubuntu:/home/chulk/sdn/openvswitch-2.3.# ps aux|grep ovs
root 0.0 0.2 ? Ss : : ovsdb-server -v --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach --log-file
root 0.3 0.2 ? Ssl : : ovs-vswitchd --pidfile --detach --log-file
root 0.0 0.0 ? S<s : : ovsdb-server: monitoring pid (healthy)
5. 我们可以通过如下命令查看所安装OVS的版本号。
# ovs-vsctl --version
如果到这步你都没有问题,那么恭喜,你已经成功安装并启动了OVS 2.3.0。下面我们会介绍一些常用的操作命令。
Open vSwitch基本操作
1. OVS连接控制器
如果我们想让启动好的OVS连接一个控制器,我们可以按如下步骤做。相关控制器的安装部署可以参考之前的技术专栏相关文章:《常用SDN控制器安装部署之Floodlight篇》,《SDN常用控制器安装部署之POX篇》,《OpenDaylight与Mininet应用实战之基本环境搭建(一)》。这里我们以Floodlight控制器为例。
首先添加一个名为br0的网桥。
# ovs-vsctl add-br br0
列出所有网桥。
# ovs-vsctl list-br
启用该网桥。
# ifconfig br0 up
此时再用ifconfig命令能在网络设备列表里看到名为br0的网桥即启动成功。
root@ubuntu:/home/chulk/sdn/openvswitch-2.3.# ifconfig -a
br0 Link encap:Ethernet HWaddr a6:0c:7f:2e:0a:
BROADCAST MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 B) TX bytes: (0.0 B) eth0 Link encap:Ethernet HWaddr :::2c:4f:1d
inet addr:172.16.26.136 Bcast:172.16.26.255 Mask:255.255.255.128
inet6 addr: fe80:::56ff:fe2c:4f1d/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (3.5 MB) TX bytes: (536.8 KB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (1.9 MB) TX bytes: (1.9 MB) ovs-system Link encap:Ethernet HWaddr fa:6e:dd:da:2e:a7
BROADCAST MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 B) TX bytes: (0.0 B)
我们可以用下面的命令将br0网桥连接至一个指定的控制器。
# ovs-vsctl set-controller br0 tcp:<controller IP>:<port>
这里本文使用的控制器地址为172.16.26.136,端口为6653。即:
# ovs-vsctl set-controller br0 tcp:172.16.26.136:
查看OVS是否连接上控制器。
root@ubuntu:/home/chulk/sdn/openvswitch-2.3.1# ovs-vsctl show
b784c584-f000-49c9-9c54-3b599cc8ad41
Bridge "br0"
Controller "tcp:172.16.26.136:6653"
is_connected: true
Port "br0"
Interface "br0"
type: internal
ovs_version: "2.3.1"
2. 交换机相关操作
查看虚拟交换机的信息。
root@ubuntu:/home/chulk/sdn/openvswitch-2.3.# ovs-ofctl show br0
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000a60c7f2e0a47
n_tables:, n_buffers:
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
LOCAL(br0): addr:a6:0c:7f:2e:0a:
config: PORT_DOWN
state: LINK_DOWN
speed: Mbps now, Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=
查看br0上各交换机端口的状态。
root@ubuntu:/home/chulk/sdn/openvswitch-2.3.1# ovs-ofctl dump-ports br0
OFPST_PORT reply (xid=0x2): 1 ports
port LOCAL: rx pkts=0, bytes=0, drop=0, errs=0, frame=0, over=0, crc=0
tx pkts=0, bytes=0, drop=0, errs=0, coll=0
查看br0上所有的流规则
root@ubuntu:/home/chulk/sdn/openvswitch-2.3.# ovs-ofctl dump-flows br0
NXST_FLOW reply (xid=0x4):
cookie=0xb, duration=.374s, table=, n_packets=, n_bytes=, idle_age=, priority=,dl_dst=::::: actions=LOCAL
cookie=0x0, duration=.020s, table=, n_packets=, n_bytes=, idle_age=, priority=,dl_dst=::::: actions=drop
cookie=0xa, duration=.457s, table=, n_packets=, n_bytes=, idle_age=, priority=,dl_dst=::::: actions=LOCAL
cookie=0x9, duration=.981s, table=, n_packets=, n_bytes=, idle_age=, priority=,ip,nw_proto= actions=CONTROLLER:
cookie=0x0, duration=.097s, table=, n_packets=, n_bytes=, idle_age=, priority= actions=drop
cookie=0x0, duration=.981s, table=, n_packets=, n_bytes=, idle_age=, priority=,dl_src=::::: actions=drop
cookie=0x0, duration=.981s, table=, n_packets=, n_bytes=, idle_age=, priority=,dl_src=ff:ff:ff:ff:ff:ff actions=drop
cookie=0x0, duration=.061s, table=, n_packets=, n_bytes=, idle_age=, priority= actions=drop
3. 网桥管理
之前已经添加了一个名为br0的网桥。
现在可以将网络接口eth0挂接到网桥br0上。
ovs-vsctl add-port br0 eth0
列出挂接到网桥br0上的所有网络接口。
ovs-vsctl list-ports br0
查看结果,如图所示:
ovs-vsctl show

删除网桥br0上挂接的eth0网络接口。
ovs-vsctl del-port br0 eth0
删除名为br0的网桥。
ovs-vsctl del-br br0
4. OVS其它常用命令及选项如下表所示:
表2. ovs-vsctl常用命令及选项

表3. ovs-ofctl常用命令及选项

参考:http://www.sdnlab.com/3166.html
编译安装或升级 :源代码目录 INSTALL
ubuntu apt-get 安装及操作: http://blog.csdn.net/sdnexplorer/article/details/26053713
安装OpenvSwitch (ovs)的更多相关文章
- (原创)openvswitch实验连载1-fedora 17下安装openvswitch
1 软件安装 1.1测试环境和网络拓朴 大部分朋友估计也没有一个真实环境来完全整个的测试,所以我也是使用了在一台PC机上使用Vmware Workstation的方式来进行实验.总体结构是在PC机上安 ...
- ubuntu 14.04 安装 openvswitch
安装 openvswitch (这里以openvswitch lib 分支为例) 如果没有安装git,如果有请跳过 $ sudo apt-get install git install ovs $ g ...
- CentOS7安装Openvswitch 2.3.1 LTS
CentOS7安装Openvswitch 2.3.0 LTS,centos7openvswitch 一.环境: 宿主机:windows 8.1 update 3 虚拟机:vmware 11 虚拟机操作 ...
- centos7安装openvswitch虚拟交换机
What is Open vSwitch? Open vSwitch is a production quality, multilayer virtual switch licensed under ...
- centos7 安装openvswitch
安装 1.安装依赖包:yum -y install openssl-devel wget kernel-devel 2.安装开发工具:yum groupinstall "Developmen ...
- [ovs] openvswitch ovs ovs-vsctl ovs-appctl 命令行参数自动补全 bash bash-completion
1, 安装bash_completion: [root@vrouter1 ~]# yum install bash-completio 2, 找到你的ovs的补全脚本装在了哪里 [root@vrou ...
- centos7 安装 openvswitch
1.安装依赖包: yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config yum - ...
- docker+openvswitch实现主机与容器的网络通信
主要用到openvswitch和netns网络名称空间的相关知识还有ip命令的使用. 实验环境的结构图如下: 思路如下: 安装openvswitch ovs创建br0,br1,并启动两个不加载网络的d ...
- qemu-kvm和openvswitch安装部署-qemu-kvm和openvswitch原型环境部署和基本测试 (1)
qemu-kvm和openvswitch安装部署 本文包含两个部分: qemu-kvm的安装部署 openvswitch的安装部署 参考文档: kvm官网:http://www.linux-kvm.o ...
随机推荐
- [翻译] TSMessages
TSMessages https://github.com/KrauseFx/TSMessages This library provides an easy to use class to show ...
- [翻译] iOSSharedViewTransition
iOSSharedViewTransition iOS 7 based transition library for View Controllers having a Common View 基于i ...
- 基于scrapyd爬虫发布总结
一.版本情况 python以丰富的三方类库取得了众多程序员的认可,但也因此带来了众多的类库版本问题,本文总结的内容是基于最新的类库版本. 1.scrapy版本:1.1.0 D:\python\Spid ...
- Linux 软硬链接详解
软链接 软链接: 类似于windows的快捷方式,—>文本文件,但是包含了真实文件的地址 源文件删除,则软连接也删除 软链接可以放在任何文 ...
- Linux 系统的/usr目录
/usr不是user的缩写,其实usr是Unix Software Resource的缩写, 也就是Unix操作系统软件资源所放置的目录,而不是用户的数据:所有系统默认的软件都会放置到/usr, 系统 ...
- Beanstalkd 的理解
Beanstalkd 的理解 Beanstalkd 是一个轻量级的内存型队列,利用了和Memcache 类似的协议.其官网beanstakkd官网 下方的感谢语说: Many thanks to me ...
- 缓存知识整理(包含Redis)
一.缓存知识 1.buffer和cache的区别 Buffer 缓冲 写操作 写缓冲 Cache 缓存 读操作 读缓存 磁盘-->内存-->CPU 2.PHP的缓存方案 官方文档:h ...
- ZT 计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48
计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48 分类: C/C++ [转]计算一个无符整数中1Bit的个数(1) Count the number of bits ...
- 将一个文件中的内容,在另一个文件中生成. for line in f1, \n f2.write(line)
将一个文件中的内容,在另一个文件中生成. 核心语句: for line in f1: f1中的所有一行 f2.write(line) ...
- Java 的字符串,String、StringBuffer、StringBuilder 有什么区别?
String 是 Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑.它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的.也由于 ...