安装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.0
# make clean
# ./configure --with-linux=/lib/modules/`uname -r`/build 2>/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

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

2.首次用ovsdb-tool创建数据库时需用ovs-vsctl命令初始化下数据库。

# ovs-vsctl --no-wait init

3. 启动OVS主进程

# ovs-vswitchd --pidfile --detach

4. 查看OVS进程是否启动。

[email protected]:/home/chulk/sdn/openvswitch-2.3.1# ps aux|grep ovs
root       1719  0.0  0.2  21212  2092 ?        Ss   02:53   0:00 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
root       1724  0.3  0.2 243068  2452 ?        Ssl  02:53   0:12 ovs-vswitchd --pidfile --detach
root       2640  0.0  0.0  21072   572 ?        S<s  03:53   0:00 ovsdb-server: monitoring pid 2641 (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的网桥即启动成功。

[email protected]:/home/chulk/sdn/openvswitch-2.3.1# ifconfig -a
br0       Link encap:Ethernet  HWaddr a6:0c:7f:2e:0a:47
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 00:50:56:2c:4f:1d
          inet addr:172.16.26.136  Bcast:172.16.26.255  Mask:255.255.255.128
          inet6 addr: fe80::250:56ff:fe2c:4f1d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21635 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3669 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3550892 (3.5 MB)  TX bytes:536821 (536.8 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:6197 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6197 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1925113 (1.9 MB)  TX bytes:1925113 (1.9 MB)

ovs-system Link encap:Ethernet  HWaddr fa:6e:dd:da:2e:a7
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (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:6653

查看OVS是否连接上控制器。

[email protected]:/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. 交换机相关操作

查看虚拟交换机的信息。

[email protected]:/home/chulk/sdn/openvswitch-2.3.1# ovs-ofctl show br0
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000a60c7f2e0a47
n_tables:254, n_buffers:256
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:47
     config:     PORT_DOWN
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

查看br0上各交换机端口的状态。

[email protected]:/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上所有的流规则

[email protected]:/home/chulk/sdn/openvswitch-2.3.1# ovs-ofctl dump-flows br0
NXST_FLOW reply (xid=0x4):
 cookie=0xb, duration=423.374s, table=0, n_packets=0, n_bytes=0, idle_age=423, priority=122,dl_dst=00:00:00:00:00:02 actions=LOCAL
 cookie=0x0, duration=1629.020s, table=0, n_packets=0, n_bytes=0, idle_age=1629, priority=3,dl_dst=00:00:00:00:00:00 actions=drop
 cookie=0xa, duration=1530.457s, table=0, n_packets=0, n_bytes=0, idle_age=1530, priority=123,dl_dst=00:00:00:00:00:01 actions=LOCAL
 cookie=0x9, duration=1628.981s, table=0, n_packets=0, n_bytes=0, idle_age=1628, priority=65535,ip,nw_proto=2 actions=CONTROLLER:65535
 cookie=0x0, duration=1629.097s, table=0, n_packets=0, n_bytes=0, idle_age=1629, priority=0 actions=drop
 cookie=0x0, duration=1628.981s, table=0, n_packets=0, n_bytes=0, idle_age=1628, priority=3,dl_src=00:00:00:00:00:00 actions=drop
 cookie=0x0, duration=1628.981s, table=0, n_packets=0, n_bytes=0, idle_age=1628, priority=3,dl_src=ff:ff:ff:ff:ff:ff actions=drop
 cookie=0x0, duration=1629.061s, table=1, n_packets=0, n_bytes=0, idle_age=1629, priority=0 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

时间: 2024-10-08 08:15:58

安装OpenvSwitch (ovs)的相关文章

Centos7.4安装openvswitch

openvSwitch是一种基于开源Apache 2许可证的多层软件交换机.openvSwitch非常适合在VM环境中用作虚拟交换机.除了将标准控制和可视化接口暴露给虚拟网络层之外,它还旨在支持跨多个物理服务器的分发.Open vSwitch支持多种基于Linux的虚拟化技术,包括Xen / XenServer,KVM和VirtualBox. 其主要组成部分是: ovs-vswitchd,一个实现交换机的守护程序,以及用于基于流的切换的配套Linux内核模块. ovsdb-server是一个轻量

CentOS7安装Openvswitch 2.3.1 LTS

CentOS7安装Openvswitch 2.3.0 LTS,centos7openvswitch 一.环境: 宿主机:windows 8.1 update 3 虚拟机:vmware 11 虚拟机操作系统:CentOS7-1406 Openvswitch 2.3.1 二.安装 1.安装依赖包:yum -y install openssl-devel wget kernel-devel 2.安装开发工具:yum groupinstall "Development Tools" 3.添加用

安装 openstack-ocata OVS+VLAN(归档修改中)

一.基础环境 yum install vim wget lrzsz unzip python-openstackclient openstack-utils openstack-selinux chrony mariadb mariadb-server python2-PyMySQL rabbitmq-server memcached python-memcached -y yum upgrade 二.创建数据库 CREATE DATABASE keystone; CREATE DATABASE

centos7安装openvswitch虚拟交换机

What is Open vSwitch? Open vSwitch is a production quality, multilayer virtual switch licensed under the open source Apache 2.0 license.  It is designed to enable massive network automation through programmatic extension, while still supporting stand

CentOS7安装Openvswitch 2.3.0 LTS

一.环境: 宿主机:mac os 10.10 虚拟机:virtualbox 4.3.20 虚拟机操作系统:CentOS7-1406 Openvswitch 2.3.0 二.安装 1.安装依赖包:yum -y install openssl-devel wget kernel-devel 2.安装开发工具:yum groupinstall "Development Tools" 3.添加用户:adduser ovswitch,切换用户并跳转至用户文件夹:su - ovswitch 4.下

centos7 安装 openvswitch

1.安装依赖包: yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config yum -y install python-devel openssl-devel kernel-devel kernel-debug-devel libtool wget 2.预处理: mkdir -p ~/rpmbuild/SOURCES wget http://openvswitch.org/release

Centos安装OpenVSwitch历程

工作需要,要在公司的虚拟机Centos系统上安装部署openvswitch,前前后后忙了两天才安装成功,下面记录一下安装过程和发现的问题及最后的解决方法. 操作系统: [[email protected] RPMS]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) openvswitch版本: [[email protected] ovswitch]# ll openvswitch-2.11.1.tar.gz -rw-r

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

主要用到openvswitch和netns网络名称空间的相关知识还有ip命令的使用. 实验环境的结构图如下: 思路如下: 安装openvswitch ovs创建br0,br1,并启动两个不加载网络的docker容器 将容器关联网桥br0,并设置ip.vlan 创建veth0与veth1网卡对 创建netns名称空间,并添加veth0.0和veth1.0接口,并配置相关信息 将veth0.1和veth1.1分别桥接至br0,br1,并配置相关信息 添加SNAT和DNAT规则 给br1配置ip测试连

OVS + kernel datapath 的安装

***kernel datapath的OVS编译安装 下载源代码 $ git clone https://github.com/openvswitch/ovs.git 准备工具:生成configure文件 GNU make $ make --version 一个C语言编译器,GCC 4.6以上,Clang 3.4以上 $ gcc --version libssl $ apt-get isntall libssl1.0.0 libcap-ng0 $ apt-get install libcap-n