一、Database Structurenode
二、SB_Global TABLE编程
其中的nb_cfg是配置的序号。当CMS或者ovn-nbctl更新northbound database时,它会更新其中的NB_Global table的nb_cfg列。接着当ovn-northd更新southbound database和northbound database同步时,它也会同步SB_Global中的nb_cfg网络
三、Chassis TABLE并发
这个表中的每一行都表明了物理网络中的一个hypervisor或者gateway(a chassis)。每一个chassis都经过ovn-controller/ovn-controller-vtep来添加或者更新它本身对应的行,而且保留其余行的拷贝用于确认如何到达其余hypervisor。component
四、Encap TABLErouter
Chassis table中的encap column会引用这个table中的某行,用于标识OVN应该怎样将logical dataplane packets传输到该chassis。递归
五、Logical_Flow TABLE生命周期
这个表中的每一行都表明了一个logical flow。ovn-northd用logical flow填充本表,用以实现OVN_Northbound中的L2和L3拓扑逻辑。每一个hypervisor再经过ovn-controller将logical flow转换成OpenFlow flows并将其装入Open vSwtich。ip
logical flow和OpenFlow flow很像,主要区别在于logical flow使用的是logical ports和logical datapaths,而不是physical ports和physical datapaths。logical flow和physical flow之间的转换有助于确保logical datapaths间的隔离性。(同时logical flow这一抽象模型有助于减轻OVN中心组件的负担,由于它们再也不须要为每一个chassis单独计算并安装physical flow了)rem
若是没有匹配的flow,默认的行为是drop packet
Architectural Logical Lift Cycle of a Packet
下文的描述可能让人产生都是OVN本身执行的这些操做,事实上OVN(利用ovn-controller)经过OpenFlow和OVSDB对Open vSwitch进行编程,让它来代替执行的。
OVN首先将packet传入logical datapath的logical ingress pipeline,接着它会将packet输出到一个或多个logical port或者logical multicast groups中。对于每一个logical output port,OVN将packet传输给datapath中的logical egress pipeline,它可能会drop the packet或者将它送往目的地。在两个pipeline之间,OVN可能会将packet封装到tunnel中并传输到remote hypervisor。
更详细的说,首先,OVN会对Logical_Flow table进行搜索,寻找一条正确的logical_datapath,它的pipeline为ingress,table_id为0,以及和该packet匹配。若是没有找到,OVN会drop the packet。若是OVN找到了不少条,则选择其中具备最高优先级的一条。接着OVN会以规定的顺序执行该行对应的action。其中的next和output action比较特殊。
next action会让上述的执行过程重复递归地执行,不一样的是OVN会查询table_id 1而不是0。当递归结束时,会接着执行next以后的action。
output action一样会引入递归。它的具体做用取决于output field当前的value。假设ouput指向一个logical port。首先OVN会比较inport和outport,若是二者相等,默认output不作任何操做。通常来讲,二者是不一样的,packet会进入egress pipeline,而且丢弃reg0 ... reg9,这些寄存器信息和connection tracking state,从而不管egress pipeline是否在不一样的hypervisor中都可以保持一致的行为。
当执行egress pipeline时,OVN会再次对Logical_Flow进行搜索,找寻正确的logical_datapath,一样table_id为0,匹配该packet,不一样的是,此时寻找的是egress类型的pipeline。若是没要找到匹配的flow,那么output不作任何操做。不然OVN执行matching flow中的action。
在egress pipeline中,next action和ingress pipeline中的相同,而output action则直接将packet传输到output port。
六、Port_Binding TABLE
该表中的每一行都绑定了一个logical port和它的具体实现。对于大多数的logical ports,这意味着和某个physical location绑定,例如绑定一个logical port到运行在某个hypervisor中的某个虚拟机的VIF。其余的logical ports,例如logical patch port,没有具体的physical location,可是它们的binding依然能够在这个表中出现。
对于OVN_Northbound database中的每一个Logical_Switch_Port记录,ovn-northd都会在这个表中建立一条记录。而且ovn-northd填充而且维护除了chassis column中的每一列。
ovn-controller/ovn-controller-vtep会填充chassis column,当它经过监听本地的Open_vSwitch database发现logical port就位于本身所在的hypervisor中。
七、MAC_Binding TABLE
该表中的每一行表明一个IP地址以及经过ARP(对于IPv4)或者ND(对于IPv6)发现的Ethernet address。这个表主要用于发现和physical network的绑定关系,由于虚拟机的IP-to-MAC一般是静态绑定到Port_Binding table中的。
概况来讲,logical router的MAC binding的生命周期以下所示:
八、Datapath_Binding TABLE
这个表中的每一行表明了一个logical datapath,它实现了和它相关的Port_Binding中的ports之间的logical pipeline。事实上,给定的logical datapath中的pipeline实现的不是一个logical switch就是一个logical router。
这个表的主要目的是为logical datapath提供physical binding。一个logical datapath没有physical location,所以它的physical binding信息是有限的:只有tunnel_key。该表中的其余数据并不影响packet的转发