简介

搭建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. 使用GPUImage渲染图片教程

    使用GPUImage渲染图片教程 Prepare - 准备 GPUImage开源库并不像普通的开源库那样子,拖进你的工程中就可以用.以下将详细的告诉你如何将GPUImage导入到你的工程当中. 首先上 ...

  2. 2018年阿里巴巴关于java重要开源项目汇总

    1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务的 ...

  3. docker及服务器遇到的坑

    目录 DNS不可用 修改docker查找源 容器保持固定ip 查看docker连接 容器间通信 容器拷贝数据 php连接docker mysql 8.0出错authentication method ...

  4. windows命令行大全

    命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一 ...

  5. right here waiting的歌词

    right here waiting的歌词 2006-12-30 17:36 匿名 | 分类:音乐 | 该问题已经合并到>> right here waiting的歌词有吗?   扫描二维 ...

  6. [转] 29个你必须知道的Linux命令

    总结: 1. find  查找文件 2. grep 查找某个文件或者文件夹里面文件的内容 29个你必须知道的Linux命令 虽然Linux发行版支持各种各样的GUI(graphical user in ...

  7. codeforces 17D Notepad

    codeforces 17D Notepad 题意 题解 TBD 更新模板(phi.欧拉降幂) 代码 #include<bits/stdc++.h> using namespace std ...

  8. 我在德国做SAP CRM One Order redesign工作的心得

    时间过得很快,今天是我到德国工作的第四周,刚好一个月.Prototype的框架已经搭起来了,现在Order能够在新的框架下正常读写,能跑一些简单的scenario,这些scenario对于end us ...

  9. java Date日期类和SimpleDateFormat日期类格式

    ~Date表示特定的时间,精确到毫秒~构造方法:public Date()//构造Date对象并初始化为当前系统的时间public Date(long date) //1970-1-1 0:0:0到指 ...

  10. Day6 jQuery

    元素的操作 dom对象和jQuery对象 dom对象:原生js获取节点 jQuery对象:通过jQuery获取节点对象 //dom对象 var oP = document.getElementById ...