ovs 架构介绍

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

ovs 架构介绍_第1张图片

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 架构介绍 - 简书 

你可能感兴趣的:(OVS,架构,ovs,ovs-vswitchd,ovsdb-server)