ovs 架构介绍

作者: 分享放大价值 | 来源:发表于2021-01-03 11:22 被阅读0次

    接触ovs时间也不短了,之前一直限于使用层面,最近打算深入源码看看其实现,下面是经过分析源码后总结出来的架构图


    image.png

    下面分别介绍下各个组件的作用,其中ovsdb-server和ovs-vswitchd是ovs的两个后台进程,其他的*ctl是命令行工具,用来和这两个进程通信。

    ovsdb:定义了ovs中的bridge,port,interface等多种数据库表,及每种表的格式和字段的类型,可以参考ovs官网对于db的定义.

    ovsdb-tool: 启动ovs后台进程前,需要通过此工具创建ovsdb格式的文件,用来存放相关配置。命令如下:

    ovsdb-tool create /usr/local//etc/openvswitch/conf.db
    /usr/local/share/openvswitch/vswitch.ovsschema

    ovsdb-server: 用来操作db的服务端后台进程,客户端可以通过ovsdb-mgmt协议和服务端通信,协议的详细信息可以参考这里.客户端可以请求创建bridge,port等表项,还可以监听数据库,一旦数据库有变化,服务端就会将变化内容通知给客户端。

    ovsdb-client:ovsdb-server的客户端,用来查看和监听数据库。

    ovs-vsctl:ovsdb-server的客户端,用来创建bridge,port等表项。

    ovs-vswitchd:ovs的另一个后台进程,用来实现bridge的转发逻辑,接收openflow信息,下发流表到openvswitch内核模块。启动后会发送monitor消息给ovsdb-server来监听数据库变化。

    ovs-appctl:ovsdb-server和ovs-vswitchd提供了很多debug命令,可以通过ovs-appctl触发这些命令的执行。可以通过参数 -t 指定具体目标进程,默认目标进程为ovs-vswitchd。

    -t ovsdb-server 指定目标进程为 ovsdb-server
    -t ovs-vswitchd 指定目标进程为 ovs-vswitchd

    ovs-ofctl:每创建一个bridge,就会默认生成并监听一个unix socket,路径一般为 /usr/local/var/run/openvswitch/br1.mgmt。ovs-ofctl命令行工具可以使用此socket承载openflow协议和ovs-vswitchd交互,添加/删除流表等信息。

    controller:上面说到的ovs-ofctl可以通过本地unix socket和ovs-vswitchd通信,也可以通过ip:port的tcp socket和远端的controller通信,之间协议也是openflow。

    ovs-dpctl:直接和openvswitch内核模块通过netlink交互,用于查看内核中真正的转发流表。

    openvswitch kernel module:ovs提供的内核模块,用来根据流表进行转发。

    相关文章

      网友评论

        本文标题:ovs 架构介绍

        本文链接:https://www.haomeiwen.com/subject/ciduoktx.html