OVS集中控制集成指南

本文描述了如何将Open vSwitch 集成到新平台上,并开放现交换机的状态,及连接设备以进行集中控制。(如果你在寻找将Open vSwitch的组件移植到新的平台的信息,请参阅OVS官方文档porting)。本指南的重点是Hypervisor,但许多接口对硬件交换机也很有用。XenServer集成是最成熟的实现,因此多数的例子有它而来。

此集成的外部可见的接口是不分平台的。我们鼓励集成Open vSwitch的任何人使用相同的接口,因为保持统一的接口意味着控制器需要更少的针对特定平台的定制(可能根本没有定制)。

集成围绕着Open vSwitch数据库展开,主要涉及几个表中的external_ids列。这些列不是由Open vSwitch本身来解析的。相反,它们为控制器提供允许其将数据库记录与更有意义的实体关联的信息。对比的,other_config列用于配置交换机的行为。那么,集成器的主要工作就是确保正确填充和维护这些值。

集成器通过与ovsdb-server守护进程通信来设置数据库中的列。一些列可以在启动过程中通过在启动脚本中调用ovs-ctl工具进行设置。xenserver/etc_init.d_openvswitch脚本提供了使用示例,ovs-ctl(8)手册页包含完整的说明。在运行时,可以使用ovs-vsctl工具设置数据库的列。脚本xenserver/etc_xensource_scripts_vif包含其使用示例,ovs-vsctl(8)手册页包含完整的介绍。

如果需要与程序进行深度集成,需要提供Python和C到数据库的绑定。XenServer 的守护进程 ovs-xapi-sync(xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync)提供了一个使用Python绑定的示例。关于Python绑定的更多信息在文档“python/ovs/db/idl.py”上提供。有关C语言绑定的信息可在“lib/ovsdb idl.h”文件中获取。

下图显示了集成脚本如何嵌入Open vSwitch架构:

         +----------------------------------------+
         |           Controller Cluster           +
         +----------------------------------------+
                             |
                             |
+----------------------------------------------------------+
|                            |                             |
|             +--------------+---------------+             |
|             |                              |             |
|   +-------------------+           +------------------+   |
|   |   ovsdb-server    |-----------|   ovs-vswitchd   |   |
|   +-------------------+           +------------------+   |
|             |                              |             |
|  +---------------------+                   |             |
|  | Integration scripts |                   |             |
|  | (ex: ovs-xapi-sync) |                   |             |
|  +---------------------+                   |             |
|                                            |   Userspace |
|----------------------------------------------------------|
|                                            |      Kernel |
|                                            |             |
|                                 +---------------------+  |
|                                 |  OVS Kernel Module  |  |
|                                 +---------------------+  |
+----------------------------------------------------------+

下面是对集成中最相关字段的描述。通过设置这些值,控制器能够理解网络并能够对其进行动态和精准的管理。更多有关数据库和单独列的详细信息,请参阅ovs-vswitchd.conf.db(5)的手册页。

Open_vSwitch表

Open_vSwitch表将交换机做为一个整体描述。system_typesystem_version列为控制器提供平台标识。external_ids:system-id键唯一标识物理主机。在XenServer中,system-id可能与xe host-list返回的UUID相同。此键允许控制器区分不同的Hypervisor。

大多数配置可以在启动时使用ovs-ctl命令完成。例如:

$ ovs-ctl --system-type="XenServer" --system-version="6.0.0-50762p" \
    --system-id="${UUID}" "${other_options}" start

或者,可以使用ovs-vsctl命令在运行时设置某个特定的值。例如:

$ ovs-vsctl set open_vswitch . external-ids:system-id='"${UUID}"'

other_config:enable-statistics项可以设置为true以便OVS生成统计信息(如CPU数量、内存、系统符合)供控制器使用。

Bridge 表

Bridge表描述了Open vSwitch实例中每个单独的网桥。external-ids:bridge-id键唯一标识特定的网桥。在XenServer中,这可能与xe network-list返回的此网桥的UUID相同。

例如,要设置网桥“br0”的标识符,可以使用以下命令:

$ ovs-vsctl set Bridge br0 external-ids:bridge-id='"${UUID}"'

网桥的MAC地址可以通过other_config:hwaddr键手动配置键。例如:

$ ovs-vsctl set Bridge br0 other_config:hwaddr="12:34:56:78:90:ab"

Interface 表

Interface表描述了Open vSwitch控制下的接口。external_ids列包含为接口提供额外信息的键key:

attached-mac

此字段包含连接到接口的设备的MAC地址。在Hypervisor上,这是在VM内部可见的接口MAC地址。它不一定与主机端MAC地址相关。例如,在XenServer上,Hypervisor中VIF上的MAC地址总是fe:ff:ff:ff:ff:ff,但是在虚拟机中可以看到一个正常的MAC地址。

iface-id

此字段唯一标识接口。在Hypervisor中,这允许当虚拟机迁移时,控制器能够跟踪虚拟机的网络接口。精心挑选的标识符还应允许管理员或控制器将接口与虚拟机管理系统中相应对象关联。例如,默认情况下,与XenServer集成的Open vSwitch使用XenServer赋予VIF接口的UUID作为iface-id。

iface-status

在Hypervisor中,一些情况下,VM内部的单个虚拟以太网接口存在多个可选择的接口。有效值是"active" 和 “inactive”。完整的描述可在ovs-vswitched.conf.db(5)手册页查看。

vm-id

此字段唯一标识此接口所属的虚拟机。单个虚拟机可以有多个接口连接到它。

与前面的表一样,可以使用ovs-vsctl命令配置数值。例如,要在eth0上设置iface-id,请执行以下命令:

$ ovs-vsctl set Interface eth0 external-ids:iface-id='"${UUID}"'

HA for OVN DB servers using pacemaker

ovsdb服务器可以在活动模式或备份模式下工作。在备份模式下,db服务器将连接到活动服务器并复制活动服务器的内容。在任何时候,数据只能从活动服务器进行传输。当活动服务器因某种原因死亡时,整个OVN操作将停止。

Pacemaker是一个集群资源管理器,用于在一组集群节点管理定义的资源。Pacemaker在资源agent的帮助下管理资源。其中一个资源agent是OCF

OCF只是一个shell脚本,它接受一组操作并返回适当的状态码。

在OCF资源agent:ovn/utilities/ovndb-servers.ocf的帮助下,可以为Pacemaker定义资源,这样Pacemaker将始终维护一个正在运行的活动服务器。

创建Pacemaker集群后,使用以下命令为OVN数据库创建一个活动的和多个备份的服务器:

$ pcs resource create ovndb_servers ocf:ovn:ovndb-servers \
     master_ip=x.x.x.x \
     ovn_ctl=<path of the ovn-ctl script> \
     op monitor interval="10s" \
     op monitor role=Master interval="15s"
$ pcs resource master ovndb_servers-master ovndb_servers \
    meta notify="true"

master_ipovn_ctl是OCF脚本要使用的参数。ovn_ctl是可选的,如果没有给定,则假定默认值为/usr/share/openvswitch/scripts/ovn-ctl。master_ip是活动数据库服务器期望正其上侦听的IP地址,slave节点使用它连接到主节点。你可以添加可选参数’nb_master_port’、‘nb_master_protocol’、‘sb_master_port’、'sb_master_protocol’设置协议和端口。

当活动服务器死亡时,Pacemaker负责提升备份服务器进入活动状态。ovn-controller 和 ovn-northd都需要活动服务器正在侦听的IP地址。随着pacemaker改变活动服务器运行的节点,没有有效的方法指示所有的ovn-controllers 和 ovn-northd来监听最新的活动服务器IP地址。

此问题有两种解决方案:

  1. 通过使用原生的OCF资源agent代理**ocf:heartbeat:IPaddr2解决。IPAddr2资源agent只是具有IP地址的资源。当我们把它与活动服务器相关联后,Pacemaker将使活动服务器始终使用单一的IP地址。这是当创建ovndb_servers**资源时,传入的ip-address参数。

使用以下命令创建IPAddr2资源,并将其与活动服务器关联:

$ pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=x.x.x.x \
    op monitor interval=30s
$ pcs constraint order promote ovndb_servers-master then VirtualIP
$ pcs constraint colocation add VirtualIP with master ovndb_servers-master \
    score=INFINITY
  1. 使用负载均衡器(Load Balancer)的VIP IP地址作为master_ip。为了使用此功能,需要设置listen_on_master_ip_only为no。 当前负载均衡器的代码已进行过TCP协议的测试,对SSL的测试和改进需要进行。使用负载均衡器,备用节点将不会监听NB和SBDB的端口,以便负载均衡器始终与活动的节点通信,所有流量将只发送到活动节点。在这种情况下,备用节点继续使用负载均衡器的 VIP IP进行同步。

使用以下命令创建使用LB VIP IP地址的pcs资源:

$ pcs resource create ovndb_servers ocf:ovn:ovndb-servers \
     master_ip="<load_balance_vip_ip>" \
     listen_on_master_ip_only="no" \
     ovn_ctl=<path of the ovn-ctl script> \
     op monitor interval="10s" \
     op monitor role=Master interval="15s"
$ pcs resource master ovndb_servers-master ovndb_servers \
    meta notify="true"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章