简介

搭建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)的更多相关文章

  1. (原创)openvswitch实验连载1-fedora 17下安装openvswitch

    1 软件安装 1.1测试环境和网络拓朴 大部分朋友估计也没有一个真实环境来完全整个的测试,所以我也是使用了在一台PC机上使用Vmware Workstation的方式来进行实验.总体结构是在PC机上安 ...

  2. ubuntu 14.04 安装 openvswitch

    安装 openvswitch (这里以openvswitch lib 分支为例) 如果没有安装git,如果有请跳过 $ sudo apt-get install git install ovs $ g ...

  3. CentOS7安装Openvswitch 2.3.1 LTS

    CentOS7安装Openvswitch 2.3.0 LTS,centos7openvswitch 一.环境: 宿主机:windows 8.1 update 3 虚拟机:vmware 11 虚拟机操作 ...

  4. centos7安装openvswitch虚拟交换机

    What is Open vSwitch? Open vSwitch is a production quality, multilayer virtual switch licensed under ...

  5. centos7 安装openvswitch

    安装 1.安装依赖包:yum -y install openssl-devel wget kernel-devel 2.安装开发工具:yum groupinstall "Developmen ...

  6. [ovs] openvswitch ovs ovs-vsctl ovs-appctl 命令行参数自动补全 bash bash-completion

    1, 安装bash_completion: [root@vrouter1 ~]# yum install bash-completio 2,  找到你的ovs的补全脚本装在了哪里 [root@vrou ...

  7. centos7 安装 openvswitch

    1.安装依赖包:   yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config yum - ...

  8. docker+openvswitch实现主机与容器的网络通信

    主要用到openvswitch和netns网络名称空间的相关知识还有ip命令的使用. 实验环境的结构图如下: 思路如下: 安装openvswitch ovs创建br0,br1,并启动两个不加载网络的d ...

  9. qemu-kvm和openvswitch安装部署-qemu-kvm和openvswitch原型环境部署和基本测试 (1)

    qemu-kvm和openvswitch安装部署 本文包含两个部分: qemu-kvm的安装部署 openvswitch的安装部署 参考文档: kvm官网:http://www.linux-kvm.o ...

随机推荐

  1. mysql-sql-standard

    https://github.com/zhishutech/mysql-sql-standard

  2. Xcode 5.1 编译模拟器以及真机都能使用的静态库

    Xcode 5.1.dmg 下载地址 http://pan.baidu.com/s/1jGJpKm6 1.新建 Framework & Library 工程 我起名叫ShowInfo,下面为其 ...

  3. [翻译] UIImageView-Letters

    UIImageView-Letters https://github.com/bachonk/UIImageView-Letters An easy, helpful UIImageView cate ...

  4. mysql 创建数据数据库 (避免新建的库名已经存在、设置编码)

    1.创建数据库的 create database 数据库名 eg: Create database mydatabase 查看已创建的数据: show databases; 结果: 2.数据库名所对应 ...

  5. AppHangB1:explorer进程停止与Windows交互

    现象:Windows 7,打开 “计算机” 的时候,资源管理器卡死,如图所示. 解决方法:卸载 CAD迷你看图软件,利用 CCleaner 清除注册表.

  6. css实现梯形

    使用伪元素before和after分别在矩形元素前后加三角形或者直接设置border 使用3d旋转矩形,使之看起来像矩形 <html> <head> <meta char ...

  7. (1)I/O流 (2)线程

    1.I/O流1.1 ObjectOutputStream类(重点)(1)基本概念 java.io.ObjectOutputStream类主要用于将Java对象整体写入到输出流中. 只能将支持 java ...

  8. 第二次作业:找Bug

    引子 我真的想了一个小时,上哪里去找bug.我昨天还留意到一个bug,今天就不见了.灵光不断,我想起来了.我就要找大公司的产品的bug... 第一部分 调研, 评测 体验. <腾讯桌球>是 ...

  9. JAVA反射机制教程-获取类对象

    1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...

  10. 用python解析word文件(二):table

    太长了,我决定还是拆开三篇写.   (一)段落篇(paragraph) (二)表格篇(table)(本篇) (三)样式篇(style) 选你所需即可.下面开始正文. 上一篇我们讲了用python-do ...