ovn Southbound DB

这个数据库包含了OVN的逻辑和物理的配置和状态。它位于OVN架构的核心位置,南向通过ovn-controller和hypervisor通信,北向通过ovn-northd和CMS通信。

数据库结构
根据数据属性,大致分为如下几类:

  1. 物理网络
    物理网络相关的表主要包含chassis节点信息,比如节点的hostname,ip地址和隧道类型。由节点上的ovn-controller来更新这些表,相当于向集群注册自己的信息。同时也可以获取到其他节点的连接信息。
    物理网络数据量一般比较小,不会频繁更新,所以可将这些数据复制到所有节点。
    物理网络相关的表主要包含Chassis and Encap两张表。
  2. 逻辑网络
    逻辑网络相关的表包含逻辑交换机,逻辑路由器,acl,防火墙规则等逻辑拓扑和用于报文在逻辑网络转换到逻辑流表。
    逻辑网络数据量可能很大,因为它包含逻辑端口,acl规则等信息。为了提高扩展性,每个节点应该只接收和本节点相关的数据。
    逻辑网络相关的表有Logical_Flow, Multicast_Group, Address_Group, DHCP_Options, DHCPv6_Options, and DNS tables。
  3. 逻辑-物理网络绑定
    这些表用来绑定逻辑和物理网络。并且变化很频繁,比如在vm开始,关机或者迁移时,或者在容器环境中,变化更快。
    主要有Port_Binding and Datapath_Binding。
  4. mac地址绑定
    用来绑定ip和mac地址。表为MAC_Binding。

数据库表介绍

  1. Chassis : 每行代表物理网络中的一个hypervisor节点。在每个节点上,由ovn-controller进程在chassis表中增加一行用来更新本节点的信息,包括本节点的hostname,ip地址和隧道类型(ip和类型引用另一个table encap),同时保存一份Chassis中其他行的信息,根据这些信息创建到其他节点的连接。
  2. Encap : Chassis 表中的encaps指向Encap表中的一行,用来保存本节点的ip地址和隧道类型。
  3. Logical_Flow : 每行代表一条逻辑流表。这些流表由ovn-northd进程更新,用来实现Northbound DB中指定的二层和三层拓扑。在每个节点上,再由ovn-controller进程将这些逻辑流表中和本节点相关的流表转换成openflow流表,安装到ovs中。
    逻辑流表使用OVN-specific格式。逻辑流表和openflow流表很像,但是逻辑流表中用的是逻辑端口和逻辑datapath,而openflow流表用的是物理端口和物理datapath。逻辑流表的默认动作是丢包。
    在这里Architectural Logical Life Cycle of a Packet描述了一个数据包的逻辑处理。
  4. Datapath_Binding : 每行代表一个逻辑datapath,比如一个逻辑交换机或者逻辑路由器。主要是为逻辑datapath提供物理绑定。逻辑datapath实际上没有物理位置,即不会绑定到某个chassis上,所以这里说的物理绑定仅仅指的是和tunnel_key绑定。
    此表中的一些重要字段如下:
    tunnel_key: 一个整数,范围是1 到 16,777,215。每个datapath会对应唯一的tunnel_key,报文跨节点转发时,会将tunnel_key封装到隧道报文中,以便另一个节点接收报文后,知道应该哪个datapath来处理。
    logical-switch和logical-router :在Northbound DB中的UUID。 一个逻辑交换机或者逻辑路由器都会对应一个Datapath_Binding,所以使用者两个字段指定这个datapath属于哪个交换机或路由器。
  5. Port_Binding : 每行代表一个逻辑端口的具体实现。对于大部分逻辑端口来说,通常指绑定到指定的物理位置,比如将逻辑端口绑定到一个VIF,此VIF为某个hypervisor上的VM的端口。
    此表中的一些重要字段如下:
    datapath: 指向Datapath_Binding表中的行,表示此端口属于哪个datapath。
    logical_port: 表示哪个逻辑端口。对于逻辑交换机端口,它是Logical_Switch_Port 表中的name,对于逻辑路由器端口,它是Logical_Router_port 的name。
    type: 逻辑端口类型,含义如下
a. 空字符串: 表示VM接口;
b. patch: 用来连接两个逻辑datapath;
c. l3gateway: 用来连接逻辑交换机和网关路由器(在指定chassis上);
d. localnet: 用来连接到外部网络(可能多个chassis);
e. l2gateway: 用来连接到外部网络(指定chassis);
f. chassisredirect: 用来实现分布式网关端口。

chassis : 此字段依赖type字段,含义如下

a. type为空字符串时,表示chassis字段表示逻辑端口的物理位置。由ovn-controller更新此字段。
b. type为localnet时,chassis字段为空,因为localnet端口可能存在于所有节点上。
c. type为l3gateway时,chassis表示l3网关的物理位置。由ovn-controller根据选项l3gateway-chassis来更新此字段。
d. type为l2gateway时,chassis表示l2网关的物理位置。由ovn-controller根据选项l2gateway-chassis来更新此字段。

gateway_chassis: Gateway_Chassis的集合,用来实现分布式网关端口。
ha_chassis_group: 指向HA_Chassis_Group,也是用来实现分布式网关端口。
tunnel_key: 表示逻辑端口的唯一标识,范围1 to 32,767。

命令行示例
可参考ovn-sbctl
查看端口绑定信息

ovn-sbctl list port_binding

查看逻辑流表信息

ovn-sbctl list logical_flow 或者 ovn-sbctl lflow-list

你可能感兴趣的:(ovn Southbound DB)