简介

搭建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. 使用UISearchDisplayController

    使用UISearchDisplayController 虽然UISearchDisplayController名字中带有controller,可他不是一个UIView相关的controller,因为, ...

  2. Celery学习--- Celery 最佳实践之与django结合实现异步任务

    django 可以轻松跟celery结合实现异步任务,只需简单配置即可 同步执行和异步执行 注意:即使Celery的任务没有执行完成,但是已经创建了任务ID.可以利用前台的定时任务发送Ajax异步请求 ...

  3. September 12th 2017 Week 37th Tuesday

    Failure is the fog through which we glimpse triumph. 失败是迷雾,穿过它,我们就可以瞥见光明. Sometimes the fog may be t ...

  4. AOP-Pointcut-笔记

    一.Pointcut 这是切点的抽象.一个切点由一个的类过滤器和一个方法匹配器组成. 将整个代码贴上来 /** * Core Spring pointcut abstraction. * * < ...

  5. python第二十五课——闭包

    满足闭包的三个条件: 1).有外部函数和内部函数这样的结构 2).外部函数中定义的变量被内部函数所使用 3).内部函数对象作为返回值被外部函数返回 演示闭包的定义和使用: def outer(): a ...

  6. Oracle学习(十一):PL/SQL

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/v123411739/article/details/30231659 1.知识点:能够对照以下的录屏 ...

  7. 1015. [JSOI2008]星球大战【并查集】

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...

  8. 【转】使用URL SCHEME启动天猫客户端并跳转到某个商品页面的方法

    在项目中遇到了这样一个需求:让用户在手机应用中,点击一个天猫的商品链接(知道商品在PC浏览器里的地址),直接启动天猫的客户端并显示这个商品.以前曾经实现过类似的功能,不过那次是淘宝的商品,天猫和淘宝的 ...

  9. Hive学习之路 (八)Hive中文乱码

    Hive注释中文乱码 创建表的时候,comment说明字段包含中文,表成功创建成功之后,中文说明显示乱码 create external table movie( userID int comment ...

  10. ES6新特性6:模块Module

    本文摘自ECMAScript6入门,转载请注明出处. 一.Module简介 ES6的Class只是面向对象编程的语法糖,升级了ES5的构造函数的原型链继承的写法,并没有解决模块化问题.Module功能 ...