openvswitch升级到2.8.1

在实验中有使用meter表的需求,ovs2.8之前的版本是不支持meter的。所以我们要把ovs升级到2.8以上。
查看当前ovs的版本可以用ovs-vsctl show或者ovs-vsctl --version
我现在的ovs版本是2.3.0,系统是ubuntu17.04,mininet版本2.3.0。ryu版本4.15。
注意:我们现在说的是升级,这表明我们已经安装了相关依赖,并且ovs能够正常使用。以上是基础。
我们一般安装的OVS都是内核版本的,并且系统中还装有ovs的服务,这意味着我们要先删除原有的ovs。
我们先把ovs的服务停掉,我的系统里只有这一个ovs的服务,如果有多个,都停掉:

/etc/init.d/openvswitch-switch stop

删除OVS相关包:

apt-get remove openvswitch-common openvswitch-datapath-dkms openvswitch-controller openvswitch-pki openvswitch-switch

Note:openvswitch-controller在OVS2.1之后不再默认安装,所以如果系统里没有这个包也不要慌,上面这条命令只是确保删除所有的包,读者可以自行查看并删除自己已经安装的包。

首先到OVS的官网上下载openvswitch2.8.1的源码,
用wget下载压缩包,然后tar解压缩到到当前目录:

wget http://openvswitch.org/releases/openvswitch-2.8.1.tar.gz
tar -zxvf openvswitch-2.8.1.tar.gz

然后进入源码的主目录:

cd openvswitch-2.8.1

构建Linux内核模块,以便可以运行基于内核的交换机,传递内核构建目录的位置--with-linux。例如,要构建一个正在运行的Linux实例:

./configure --prefix=/usr --with-linux=/lib/modules/`uname -r`/build

然后构建OVS(这个步骤比较花时间):

make

然后安装ovs到系统中:

make install

如果刚刚我们构建了内核模块,这时候需要把模块安装到系统里:

make modules_install

查看是否有ovs的模块,成功的话应该有多个ovs的模块。

lsmod | grep openvswitch

查看ovs模块.PNG

如果没有相关模块,就加载openvswitch模块。

modprobe openvswitch

设置环境变量(仅限本次登陆),启动ovs-ctl。

export PATH=$PATH:/usr/share/openvswitch/scripts
ovs-ctl start

Note:这一步是很重要的,关键在于后面这个目录到底是哪一个,如果目录出现问题,可以用locate命令查看ovs-ctl所在的目录,把目录改为显示的目录:

locate ovs-ctl

查看ctl目录.PNG

启动完ovs,我们可以查看进程:

ps -el |grep ovs

现在应该有两个守护进程ovsdb-server和ovs-vswitchd。
查看ovs进程.PNG

同时,ovs-ctl允许使用特定选项单独启动/停止守护进程。要启动ovsdb-vswitchd:

ovs-ctl --no-ovs-vswitchd start

同样,要启动ovs-server:

ovs-ctl --no-ovsdb-server start

下面需要配置ovs需要使用的数据库,如果构建OVS时没有支持SSL,可以省略--private-key,--certificate和--bootstrap-ca-cert,--log-file表示启动日志,--detach表示后台方式运行:

mkdir -p /usr/var/run/openvswitch
ovsdb-server --remote=punix:/usr/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

然后启动主要的ovs的守护进程vswitchd:

ovs-vswitchd --pidfile --detach --log-file

至此,安装过程就结束了。

如果我们想停止OVS,可以使用如下命令:

kill `cd /usr/var/run/openvswitch && cat ovsdb-server.pid ovs-vswitchd.pid`

查看ovs的版本,已经变成了2.8.1。
下面创建一个拓扑进行meter测试:
meter表是of1.3之后才支持的,所以在使用的时候需要加上-O OpenFlow.
使用meter需要注意的是datapath类型要指定为netdev,band type暂时只支持drop,还不支持DSCP REMARK。

ovs-vsctl set bridge s1 datapath_type=netdev
ovs-ofctl -O OpenFlow13 add-meter s1 meter=1,kbps,band=type=drop,rate=20

限速类型以kbps(kilobits per second)计算,超过20kb/s则丢弃

有关meter表的使用可以参考ovs命令手册也可以看看这个博客
有关安装和升级的详细过程可以参考github上OVS给出的教程github上mininet给出的更新教程


发表评论

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠(ᐛ」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • (งᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ°Д°;)っ
  • ╮(╯▽╰)╭
  • o(*
  • >﹏<
  • (。•ˇ‸ˇ•。)
  • 泡泡
  • 颜文字

*

已有 3 条评论
  1. 請問 作者我的版本也是ovs2.8.1
    ovs-ofctl add-meter s1 meter=1,kbps,bands=type=drop,rate=3000,type=drop,rate=6000 -O OpenFlow13
    我確定meter表有一個band兩個type 然後rate分別是3000和6000
    但是我用iperf測試不管打到多少的bandwidth 他都是鎖3M左右 沒辦法到6M(我打8m也一樣 請問大大是2.8.1還不支援多個type嗎

    1. @SDN_求知者我在我的环境里也确实复现了这个现象,可能是由于ovs的用户态对用户态不太友好。我正在尝试换DPDK试试