Solar

openstack-- Open vSwitch 安装以及常用操作

引出

openvswitch,简称ovs, 是一个开源的分布式虚拟多层交换机,随着云计算的崛起,它逐渐成为网络虚拟化的基石。在openstack 中,默认也是采用ovs作为二层网络实现的组件。本篇博客即是对ovs安装,以及框架,常用命令的一个记录。

在CentOS 7 上安裝 Open vSwitch

确定linux核心版本,以安装对应版本OVS

1
$ uname -r

根据下图查看需要安装哪一个版本,一般来说,如果kernel支持的话,最好下载2.5.1版,也就是目前的LTS(Long Term Support)版。
ovs-kernal

安装 toolchain 以及一些依赖包

目前ovs安装还是需要自己编译,所以需安装toolchain。

1
2
3
$ yum groupinstall "Development Tools"
$ yum install openssl-devel wget kernel-devel

下载源文件并打包为rpm包

1
2
3
4
5
6
7
8
9
$ wget http://openvswitch.org/releases/openvswitch-2.5.1.tar.gz #下载
$ tar xzvf openvswitch-2.5.1.tar.gz #解压缩
$ mkdir -p ~/rpmbuild/SOURCES & cp openvswitch-2.5.1.tar.gz ~/rpmbuild/SOURCES/ #创建一个打包目录并复制源文件
$ sed 's/openvswitch-kmod, //g' openvswitch-2.5.1/rhel/openvswitch.spec > openvswitch-2.5.1/rhel/openvswitch_no_kmod.spec # 修改spec文件
$ rpmbuild -bb --nocheck ~/openvswitch-2.5.1/rhel/openvswitch_no_kmod.spec # 打包

完成后我们在~/mbuild/RPMS/x86_64/目录下有两个rpm包,其中,openvswitch-2.5.1-1.x86_64.rpm就是我们需要的rpm包。

安装rpm包

1
2
3
4
5
6
7
$ yum localinstall /root/rpmbuild/RPMS/x86_64/openvswitch-2.5.1-1.x86_64.rpm
$ ovs-vsctl -V #查安装是否成功
$ systemctl start openvswitch.service #启动ovs service(即守护进程)
$ chkconfig openvswitch on #设置开机自启动

OpenvSwitch的架构以及基本概念

ovs架构

ovs-arc

主要由三个组件组成:

  • ovs-vswitchd :ovs的守护进程。
  • ovsdb-server :ovs的轻量数据库服务。
  • openvswitch_mod.ko :ovs的内核模块,主要是利用datapath将flow的match结果缓存起来。

ovs 基本概念

因为ovs最常用到的场景是neutron,所以这里以neutron vxlan为例子讲下,下图就是一个neutron vxlan的示意图:

neutron-vxlan

  • bridge: ovs中的网桥可以理解为现实世界中的物理交换机,作用就是根据一定流规则(如openflow),把从某个端口(port)收到的数据包转发到另一个或多个端口。图中br-int与br-tun就是两个bridge。
  • port: ovs 中的port是收发数据包的单元,每个端口都附属于某一个bridge。图中qvoxxx,以及patch-tun,patch-int等都是port。
  • interface: 接口是ovs与外部交换数据包的组件。一个接口就是操作系统的一块网卡,这块网卡可能是ovs生成的虚拟网卡,也可能是物理网卡挂载在ovs上,也可能是操作系统的虚拟网卡(TUN/TAP)挂载在ovs上。
  • flowtable: 上文讲过,ovs会根据流表进行包的转发,最常用的就是openflow协议,下图为openflow的流表匹配顺序:首先按照从小到大的顺序匹配流表,表内按照优先级匹配表项,示例参见openstack– neutron 二/三层网络实现探究

    openflow-match

OpenvSwitch的常用命令

ovs的操作命令大致有如下四种:

  • ovs-vsctl用于控制ovs db
  • ovs-ofctl用于管理OpenFlow switch 的 flow
  • ovs-dpctl用于管理ovs的datapath
  • ovs-appctl用于查询和管理ovs daemon

ovs的常用子命令如下,直接引用自OVS常用操作总结

  • ovs-dpctl show -s
  • ovs-ofctl show, dump-ports, dump-flows, add-flow, mod-flows, del-flows
  • ovsdb-tools show-log -m
  • ovs-vsctl
    • show 显示数据库内容
    • 关于桥的操作 add-br, list-br, del-br, br-exists.
    • 关于port的操作 list-ports, add-port, del-port, add-bond, port-to-br.
    • 关于interface的操作 list-ifaces, iface-to-br
    • ovs-vsctl list/set/get/add/remove/clear/destroy table record column [value], 常见的表有bridge, controller,interface,mirror,netflow,open_vswitch,port,qos,queue,ssl,sflow.
  • ovs-appctl list-commands, fdb/show, qos/show

OpenvSwitch实践

参考基于 Open vSwitch 的 OpenFlow 实践

参考文章

CentOS 7 安裝 Open vSwitch

Open vSwitch and OpenStack Neutron troubleshooting

ovs wiki

Open vSwitch的ovs-vsctl命令详解

OVS常用操作总结

本篇文章由pekingzcc采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,转载请注明。

END