在Ubuntu中安装openvswitch的时候,找了好多教程和资料,有英文有中文,有些文章不太清晰,导致安装了好久都没搞好,这次终于搞定,分享出来给大家。Ubuntu 及其衍生系统一样,博文只是做参考,还要视具体环境而定。
Open vSwitch是一个高质量的、多层虚拟交换机,使用开源Apache2.0许可协议,由Nicira Networks开发,主要实现代码为可移植的C代码。它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。此外,它被设计位支持跨越多个物理服务器的分布式环境,类似于VMware的vNetwork分布式vswitch或Cisco Nexus 1000 V。Open vSwitch支持多种linux 虚拟化技术,包括Xen/XenServer, KVM和VirtualBox。
内核模块实现了多个“数据路径”(类似网桥),每个inerface都可以有多个“vport”(类似于桥内的端口)。每个数据路径也通过关联一下流表(flow table)来设置操作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport。当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息。当有一个匹配的流时它执行对应的操作。如果没有匹配,它会将数据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流用于以后碰到相同类型的数据包可以在内核中执行操作)。
安装openvswitch
首次按到官网下载最新源码包:http://openvswitch.org/releases/openvswitch-2.1.2.tar.gz
接下来将其解压到/home目录下。
在终端中以root权限执行以下内容:
1. cd 到 /openvswitch-2.1.2.tar.gz 目录下,执行
# ./boot.sh
2.通过配置程序配置脚本,可以没有任何参数
# ./configure
默认情况下所有文件都在/usr/local目录下,也可以修改安装目录,如:
# ./configure --preficx=/usr --localstatedir=/var
3.在openvswitch-2.1.2.tar.gz/目录下运行GNU make :
# make
4.若构建内核模块,可以安装和加载:
# make modules_install
# /sbin/modprobe openvswitch
5.使用ovsdb-tool初始化数据库:
# mkdir -p /usr/local/etc/penvswitch
# ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
6.启动
开始0vs-vswitchd之前,需要启动它的配置数据库,ovsdb服务器。
# ovsdb-server --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
7.第一次安装后,需要初始化ovs-vsctl数据库
# ovs-vsctl --no-wait init
8.然后启动ovs守护进程告诉它连接在同一个UNIX域套接字
# ovs-vswitchd --pidfile --detach
3open vswitch常用操作
以下操作都需要root权限运行,在所有命令中br0表示网桥名称,eth0为网卡名称。
添加网桥:
# ovs-vsctl add-br br0
列出open vswitch中的所有网桥:
# ovs-vsctl list-br
判断网桥是否存在:
# ovs-vsctl br-exists br0
将物理网卡挂接到网桥:
# ovs-vsctl add-port br0 eth0
列出网桥中的所有端口:
# ovs-vsctl list-ports br0
列出所有挂接到网卡的网桥:
# ovs-vsctl port-to-br eth0
查看open vswitch的网络状态:
# ovs-vsctl show
删除网桥上已经挂接的网口:
# ovs-vsctl del-port br0 eth0
删除网桥:
# ovs-vsctl del-br br0