本文主要参考了官方的安装文档,但也加入了一些个人理解。
从github上克隆openvswitch的仓库
$ git clone https://github.com/openvswitch/ovs.git
checkout相应的版本或分支
$ git checkout v2.7.0
或者
$ git checkout origin/branch-2.7
直接从github克隆仓库的需要自己构建configure文件,下载release版本的原本就包含configure文件,不用这一步。
$ ./boot.sh
执行完后会在目录下生成configure文件。
通常情况下运行configure不需要加参数
$ ./configure
默认情况下,所有文件都会安装在/usr/local
目录下,ovs默认也会去/usr/local/etc/openvswitch
目录下寻找数据库。当然你也可以手动指定参数,来改变这些默认的配置。比如将文件都安装在/usr
目录下而非/usr/local
,将运行时的一些文件放在/var
,配置文件和数据库放在/etc
,命令如下:
$ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
编译
$ make
安装
$ make install
将可执行文件和帮助文档安装到本机,默认安装到/usr/local
目录。
经过以上步骤的安装,在/usr/local/share/openvswitch/scripts
目录下安装一些常用的管理脚本,可以将它们添加到路径中,方便以后的时候
$ export PATH=$PATH:/usr/local/share/openvswitch/scripts
无脑式启动,需要root权限
$ ovs-ctl start
ovs-ctl
命令顺序执行以下步骤:
ovs-ctl start
命令会先检查/usr/local/etc/openvswitch/conf.db
是否存在,如果不存在则创建一个空的数据库(这个路径和你之前安装时的配置有关系)。ovsdb-server
现在在命令行里执行ovs-vsctl
,就会显示ovs的情况。
$ sudo ovs-vsctl show
虽然可以通过ovs-ctl start
命令一键启动ovs,但因为启动工作有些步骤需要root权限,导致所有的启动工作都是在root权限下完成的,一些通信和配置用的sock文件也会变为root所有。这就是为什么最后运行ovs-vsctl show
的时候也需要root权限。其实ovs支持将启动的步骤分开来执行(其实就是分别启动几个进程,本来程序就是几个不同分工的进程协作来完成工作的嘛)。
创建数据库
ovsdb-tool
创建数据库的时候可以指定数据库的schema,例子里的schema在安装文件的根目录下的vswitchd/vswitch.ovsschema
,当然也可以不指定。
$ mkdir -p /usr/local/etc/openvswitch
$ ovsdb-tool create /usr/local/etc/openvswitch/conf.db \
vswitchd/vswitch.ovsschema
启动ovsdb-server
(如果编译的时候没有包含SSL的支持,请省略 --private-key
, --certificate
, and --bootstrap-ca-cert
这几个参数)
$ mkdir -p /usr/local/var/run/openvswitch
$ 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 --log-file
初始化数据库
$ ovs-vsctl --no-wait init
插入内核模块
$ sudo /sbin/modprobe openvswitch
$ /sbin/lsmod | grep openvswitch
启动Open vSwitch守护进程
$ ovs-vswitchd --pidfile --detach --log-file
使能远程OVSDB managers
$ ovs-appctl -t ovsdb-server ovsdb-server/add-remote db:Open_vSwitch,Open_vSwitch,manager_options
现在就可以通过ovs-vsctl
添加bridge了
$ ovs-vsctl add-br br0
$ ovs-vsctl show