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