1. 程式人生 > >OVS DB介紹及在OpenDaylight中的呼叫

OVS DB介紹及在OpenDaylight中的呼叫

前言

OVS是一種開源的軟體交換機,可安裝於通用的虛擬伺服器環境中,在虛擬環境中單個、多個物理機上的不同虛擬主機都需要通過OVS實現資料交換。

 

 

OVS包含三個重要的元件:ovsdb-server、ovs-vswitchd、以及OVS核心模組,
ovsdb-server:OVS的資料庫服務程序,用於儲存虛擬交換機的配置資訊(比如網橋、埠等),為控制器和ovs-vswitchd提供OVSDB操作介面。
ovs-vswitchd:OVS的核心元件,負責儲存和管理控制器下發的所有流表,為OVS的核心模組提供流表查詢功能,併為控制器提供OpenFlow協議的操作介面。
OVS核心模組:快取某些常用流表,並負責資料包轉發,當遇到無法匹配的報文,該模組將向ovs-vswitchd傳送pack-in請求,獲取報文處理指令。
其架構為:


OVS提供的命令:

  • ovs-dpctl 管理OVS核心模組,提供快取流表的操作方法
  • ovs-vsctl 管理ovsdb-server的配置,提供OVSDB的配置方法,包括建立和刪除網橋、埠等
  • ovs-appctl 管理ovs-vswitchd的日誌輸出
  • ovs-ofctl 管理ovs-vswitchd的流表配置方法
  • ovs-pki 建立和管理公鑰
  • ovs-tcpundump 抓取並解析OpenFlow訊息
  • ovsdb-tool 建立和管理ovsdb

一、OVSDB介紹

開放虛擬交換機資料庫(OpenvSwitch Database,OVSDB)是開放虛擬交換機中儲存的各種配置資訊(如網橋、埠)的資料庫,是針對OpenvSwitch開發的輕量級資料庫。
OVSDB資料庫由兩個主要部分構成,即ovsdb-server和ovsdb-client,Ovsdb-server是OVS的資料庫伺服器端,位於Open vSwitch本地。Ovsdb-client則為OVS資料庫客戶端,其通過OVSDB 管理協議(Open vSwitch Database Management Protocol)向ovsdb-server端傳送資料庫配置和查詢的命令,即ovs-vsctl命令。因此,ovs-client又被稱為管理者。ovsdb-client通常執行在Open vSwitch 本地,即管理員可以在OVS本地以命令列方式輸入資料庫配置和查詢命令。另外,ovsdb-client也可以部署在遠端,從而實現對ovsdb-server的遠端配置。目前在Opendaylight控制器中也有一個單獨的子專案實現此管理協議,即OVSDB(比如ovsdb-release-lithium-sr3)。
OVSDB是一個輕量級的資料庫,其實它只是一個JSON檔案,預設路徑為/etc/openvswitch/conf.db。記錄的網橋、埠、QOS等網路配置資訊是以JSON格式(schema)儲存的,通常schema在/usr/share/openvswitch/vswitch.ovsschema中。

1.1 OVSDB管理協議

OVSDB管理協議(OVSDB management protocol)是VMware公司提出的負責管理OVS資料庫的協議,OVSDB管理協議定義了一套RPC介面,使用者可通過遠端呼叫的方式管理OVSDB。

其中transact是OVSDB管理協議中比較重要的操作方法,它是RPC請求的引數中提供資料庫的增、刪、改、查等常用操作:

二、ODL中的OVSDB外掛

ODL中包括三個OVSDB外掛,OVSDB southbound、northbound、openstack,他們的邏輯關係如下圖所示:

2.1 OVSDB的不相容性

These 2 ovsdb features cannot be installed at the same time: odl-ovsdb-plugin and odl-ovsdb-southbound-impl that is so, because they will instantiate their own ovsdb-library, which listens on port 6640 (by default).
When odl-ovsdb-openstack is used, it assumes no other application in odl is managing network-virt. In other words, it is assumed that if ovsdb is using odl-neutron-service, no other feature in odl is providing the same net-virt service.

2.2 OVSDB南向外掛的使用

1、安裝南向外掛

Shell

 

1

2

feature:install odl-ovsdb-southbound-impl-ui

log:display  | grep SouthboundProvider   //檢視是否已安裝好

ovsdb外掛的被動連線方式下(也就是控制器的ovsdb外掛當做伺服器,裝置當做客戶端),md-sal de operational 資料庫的OVS的node-id格式為ovsdb://uuid//{{uuid of OVS}};主動連線模式下,OVS的node-id格式為 ovsdb: //{{ip : port}}

2、測試ovsdb外掛的被動連線方式,在終端執行

Shell

 

1

2

ovs-vsctl set-manager tcp:192.168.7.103:6640      //192.168.7.103是控制器的IP

curl -u admin:admin http://localhost:8181/restconf/operational/network-topology:network-topology/

通過curl能夠看到ovsdb節點資訊。

Shell

 

1

2

ovs-vsctl del-manager  刪除連線

ovs-vsctl add-br br01    增加br01 橋

3、測試ovsdb外掛的主動連線方式,在終端執行

Shell

 

1

2

ovs-vsctl set-manager ptcp:6640

ovs-vsctl show  可以看到ovsdb在監聽控制器的連線(裝置是伺服器)


此時通過postman設定odl控制器來連線ovsdb:


可以通過web看到:

參考資料

OpenDaylight OVSDB架構:
https://wiki.opendaylight.org/view/OVSDB:Developer_Guide#OpenDaylight_OVSDB_Architecture
OVSDB MDSAL南向:https://wiki.opendaylight.org/view/OVSDB:MDSAL_Southbound
基於OpenDaylight和OVSDB搭建VxLAN網路:https://www.sdnlab.com/15030.html
OVSDB與ODL Lithium版本整合測試:
https://wiki.opendaylight.org/view/OpenDaylight_OVSDB:Lithium_Integration_Test