实验目的
1、初步认识Open vSwitch,了解Open vSwitch的背景、功能和基本组成结构。
2、学会安装部署Open vSwitch,能够独立解决安装部署中遇到的问题。
任务环境
设备名称 | 软件环境 | 硬件环境 |
---|---|---|
主机 | Ubuntu 14.04命令行版 | CPU:1核 内存:2G 磁盘:20G |
注:系统默认的账户为root/root@openlab,openlab/user@openlab。
任务内容
1、了解Open vSwitch的版本信息以及安装需求,为安装Open vSwitch做好充分的准备工作,然后按照教程实现源码安装Open vSwitch。
2、配置、运行Open vSwitch。其中主要配置的就是Open vSwitch的核心组件,包括ovsdb-Server、ovs-vswitchd和ovs kernel module。
实验原理
Open vSwitch是由Nicira Networks主导,运行在虚拟化平台(例如KVM,Xen)上的虚拟交换机。Open vSwitch基于C语言开发,遵循Apache 2.0许可证,能同时支持多种标准的管理接口和协议(比如NetFlow、sFlow、SPAN、RSPAN、CLI、LACP、802.1ag等)。Open vSwitch通过OpenFlow协议由统一的控制器管理,从而实现对接入的虚拟机(或设备)的网络联通。整体组网结构如下图:
Open vSwitch内部架构图如下所示:
Open vSwitch各模块简要介绍如下:
1、ovs-vswtichd:主要模块,实现vswitch的守候进程daemon,包括一个支持流交换的Linux内核模块。
2、ovsdb-server:轻量级数据库服务器,保存配置信息,ovs-vswitchd通过这个数据库获取配置信息。
3、ovs-dpctl:用来配置vswitch内核模块的一个工具。
4、ovs-vsctl:主要是获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库。
5、ovs-appctl:一个向ovs-vswtichd的守护进程发送命令的的程序。
6、datapath:内核模块,根据流表匹配结果做相应处理。
7、ovs-ofctl:查询和控制OpenFlow虚拟交换机的流表。
Open vSwitch版本及其相应的内核要求如下,请根据自己的内核版本选择相应的Open vSwitch版本。
Open vSwitch | Linux kernel |
---|---|
1.4.x | 2.6.18 to 3.2 |
1.5.x | 2.6.18 to 3.2 |
1.6.x | 2.6.18 to 3.2 |
1.7.x | 2.6.18 to 3.3 |
1.8.x | 2.6.18 to 3.4 |
1.9.x | 2.6.18 to 3.8 |
1.10.x | 2.6.18 to 3.8 |
2.0.x | 2.6.18 to 3.8 |
2.1.x | 2.6.18 to 3.10 |
2.2.x | 2.6.18 to 3.11 |
2.3.x | 2.6.18 to 3.14 |
2.4.x | 2.6.18 to 4.0 |
2.5.x | 2.6.18 to 4.3 |
2.6.x | 3.10 to 4.7 |
2.7.x | 3.10 to 4.9 |
实验步骤
由上图可知,Open vSwitch安装包在“/home/openlab/lab”目录下。
# cd /home/openlab/lab
# tar -zxvf openvswitch-2.3.2.tar.gz
# cd openvswitch-2.3.2
# ./configure --with-linux=/lib/modules/3.2.0-29-generic-pae/build
使用—with-linux参数指定内核源码编译目录,不同环境的Linux版本不一样,“3.2.0-29-generic-pae”是通过命令“ls /lib/modules/”查看得到的,请根据实际查询情况修改。
# make
# make install
说明:这个过程有点漫长,请耐心等待,并注意打印出的错误提示。
# insmod ./datapath/linux/openvswitch.ko
说明:注意以上命令使用的是相对路径,默认处于openvswitch-2.3.2目录下。加载内核模块如果出现“File exists“错误请忽略,如果提示“unknown symbol in module“,解决方法参见异常处理。
# mkdir -p /usr/local/etc/openvswitch
# ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema
# 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
说明:默认Open vSwitch版本为2.3.2,与Open vSwitch2.0.0之前的版本的启动命令有所出入。
# ps -ef|grep ovsdb-server
# ovs-vsctl --no-wait init
# ovs-vswitchd --pidfile --detach
# ps –ef|grep ovs
加载Open vSwitch内核模块openvswitch.ko时,可能会出现如下问题。
这个问题是由于openvswitch.ko依赖的模块没有加载,首先查找openvswitch.ko的依赖模块:
# modinfo ./datapath/linux/openvswitch.ko |grep depends
然后,根据查找结果加载这些依赖模块:
# modprobe libcrc32c
# modprobe gre
当依赖模块都加载后,就可以加载openvswitch.ko模块了。
# insmod ./datapath/linux/openvswitch.ko