一、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的轉發