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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章