众所周知,OpenvSwitch 以其丰富的功能和不错的性能,已经成为 Openstack 部署中最受欢迎的虚拟交换机。由于 Openstack Neutron 的架构引入了一些性能问题,比如 neutron-server 要与非常多的 agent 通信,RPC 就是一个性能瓶颈,还有 neutron 里面用到非常多的 namespace,namespace 资源有限而且系统开销比较大,这也是一个性能瓶颈。OVS 社区觉得从长远来看,Neutron 应该让一个其它的项目来做虚拟网络的控制平面,Neutron 只需要提供 API 的处理,于是 OVS 社区推出了 OVN(Open Virtual Switch)这个项目,OVN 是 OVS 的控制平面,它给 OVS 增加了对虚拟网络的原生支持,大大提高了 OVS 在实际应用环境中的性能和规模。
虽然 OVN 是 OVS 社区在 2015 年 1 月份才宣布的一个子项目,但是到目前为止 OVN 已经支持了很多功能,
OVN 对于运行平台没有额外的要求,只要能够运行 OVS,就可以运行 OVN,所以 OVN 可以和 Linux,Docker,DPDK 还有 Hyper-V 兼容,从 OVS 升级到 OVN 是非常容易的。
另外 OVN 可以和很多 CMS(Cloud Management System)集成到一起,比如 Openstack neutron,这些 CMS 只需要添加一个 plugin 来配置 OVN 即可。
图 1 是 OVN 架构概览,最上面 Openstack/CMS plugin 是 CMS 和 OVN 的接口,它把 CMS 的配置转化成 OVN 的格式写到 Nnorthbound DB 里面。
Northbound DB 里面存的都是一些逻辑的数据,大部分和物理网络没有关系,比如 logical switch,logical router,ACL,logical port,和传统网络设备概念一致。
OVN-northd 类似于一个集中的控制器,它把 Northbound DB 里面的数据翻译一下,写到 Southbound DB 里面。
Southbound DB 里面存的数据和 Northbound DB 语义完全不一样,主要包含 3 类数据,一是物理网络数据,比如 HV(hypervisor)的 IP 地址,HV 的 tunnel 封装格式;二是逻辑网络数据,比如报文如何在逻辑网络里面转发;三是物理网络和逻辑网络的绑定关系,比如逻辑端口关联到哪个 HV 上面。
ovn-controller 是 OVN 里面的 agent,类似于 neutron 里面的 ovs-agent,它也是运行在每个 HV 上面,北向,ovn-controller 会把物理网络的信息写到 Southbound DB 里面,南向,它会把 Southbound DB 里面存的一些数据转化成 Openflow flow 配到本地的 OVS table 里面,来实现报文的转发。
ovs-vswitchd 和 ovsdb-server 是 OVS 的两个进程。