SDN 技術指南(四):Open vSwitch 頂 原 薦

前言

由之前發佈的文章知道 Open vSwitch(Open Source Virtual Switch) 是一款基於軟件實現的開源虛擬交換機。

Open Source Virtual Switch:Community-Based, Open Source,. Full-Featured Network Operating System.

一、Open vSwitch 安裝

# 第一步:Getting the Code
git clone https://git.openswitch.net/openswitch/ops-build

# 第一步:選擇編譯模式

# 模式一:To a supported white box switch ( 例如 VMware vSwitch、vDS、Nexus 1000V)
make configure genericx86-64

# 模式二:OVA (可以直接導入虛擬機,例如 Oracle Virtual box )
make configure appliance

# 第三步:打包
make

二、Open vSwitch 命令行

2.1 核心概念

  • Bridge :網橋,對應一個以太網交換機(Switch),一個主機中可以創建一個或者多個 Bridge 設備。
  • Port :Port 與物理交換機的端口概念類似, 每個 Port 都屬於一個特定的 Bridge 。端口類型:Normal、Internal、Patch、Tunnel。
  • Interface:接口,對應網卡,即可以是 ovs 生成的虛擬網卡,也可能是掛載在 ovs 的物理網卡。在通常情況下,Port 和 Interface 是一對一的關係, 只有在配置 Port 爲 bond 模式後,Port 和 Interface 是一對多的關係。

2.2 基本操作

  • ovs-vsctl : 查詢和更新 ovs-vswitchd 的配置;
  • ovs-appctl :發送命令消息,運行相關 daemon;
  • ovsdbmonitor : GUI工具,可以遠程獲取 OVS 數據庫和 OpenFlow 的流表。
# 創建一個新的交換機
$ ovs-vsctl add-br ovs-switch
# 創建一個端口 設置端口
# 如果在創建端口的時候沒有指定 OpenFlow 端口編號,會自動生成一個
$ ovs-vsctl add-port ovs-switch p0 -- set Interface p0 ofport_request=100
# 設置接口類型
$ ovs-vsctl set Interface p0 type=internal
$ ethtool -i p0
# 查看交換機的端口信息
$ ovs-ofctl show ovs-switch
# 查看 datapath 的信息
$ ovs-dpctl show

三、Open vSwitch 運行原理

3.1 Open vSwitch 內部結構

Open vSwitch 內部分爲用戶態和內核態。用戶層(態)爲守護程序實現了交換機和流表,是 Open vSwitch 的核心,提供了一些組件去管理交換機,實現數據庫,對內核進行直接管理。主要包含三個守護進程:

  • ovs-vswitched : 主要模塊,守護進程,包括一個 Linux 內核模塊。
  • ovsdb-server : 數據庫服務,保存相關配置信息
  • ovs-brcompatd

數據流(flow) 通過 Open vSwitch 轉發的流程。每收到一個包之後,OVS Kernel Module 將檢查它是否能能命中內核模塊的緩存(flow cache) ,如果命中緩存則交由 kernel 處理;如果不能命中緩存則先發送到用戶空間(ovs-vswitchd process )進行轉發決策 ——— 基於一系列已經安裝配置的規則庫(OpenFlow rulues);如果沒有命中任何一條規則,則將包發送給 OpenFlow 控制器處理。一旦做出轉發決策,這個包和轉發動作將傳回 OVS Kernel Module 緩存起來。這條 flow 接下來的包就將命中緩存並直接由 kernel 轉發處理。

  • openvswitch_mod.ko 是內核態(kernel)的主要模塊 完成數據包的查找、轉發、修改等操作,一條 flow 的後續數據包到達 OVS 後將直接交由內核態,使用 openvswitch_mod.ko 中的處理函數對數據包進行處理。

OVS Flow Processing OVS包含一個Linux內核

3.2 Open vSwitch 的協議支持情況

  • GRE-tunneled mirrors: 遠程監控
  • LACP、VLAN、IGMP、LLDP、BFD、STP、RSTP、QoS、HFSC
  • Complete IPv6 (Internet Protocol version 6) support
  • Support for multiple tunneling protocols, including GRE、VXLAN 、STT、IPsec
  • Multi-table forwarding pipeline with a flow-caching engine

3.3 Open vSwitch 的 OpenFlow 支持情況

  • ovs-openflowd:一個簡單的 OpenFlow 交換機;
  • ovs-controller:一個簡單的 OpenFlow 控制器;
  • ovs-ofctl 查詢和控制 OpenFlow 交換機和控制器;
  • ovs-pki :OpenFlow 交換機創建和管理公鑰框架;
  • ovs-tcpundump:tcpdump 的補丁,解析 OpenFlow 的消息;

Open vSwitch support for OpenFlow 1.1 and beyond is a work in progress.>>> OpenFlow Support in Open vSwitch

四、Open vSwitch 性能監控

“If you can’t measure it, you can’t improve it” —— Lord Kelvin

4.1 sFlow 監控示例

  • 啓動分析器 sFlow Analyzer (以 sFlow-RT 爲例)
$ cd sflow-rt
$ ./start.sh
bash-3.2$ ./start.sh
信息: Listening, sFlow port 6343
信息: Listening, HTTP port 8008
信息: app/ovs/scripts/status.js started
警告: app/ovs/scripts/status.js app/ovs/scripts/status.js
信息: app/ovs/scripts/status.js stopped
$ ps -ef | grep 6343
  501 30565 30431   0  2:45下午 ttys002    0:03.90 /usr/bin/java -Xms200M -Xmx200M 
-XX:+UseG1GC -XX:MaxGCPauseMillis=100 
-Dsflow.port=6343 -Dhttp.port=8008 -jar ./lib/sflowrt.jar
  • Connect Normal Switch to sFlow Analyzer
// 指定 analyzer
switch(root)# sflow collector 10.0.0.1
// 數據包採樣: 1-in-4096
// 常規參考值:[100 Mb/s: 1 in 500]、[1 Bb/s: 1 in 1000]、[10 Gb/s: 1 in 2000]
switch(root)# sflow sampling 4096
// 輪詢計數器 polling counters every 20 seconds
switch(root)# sflow polling 20
switch(root)# sflow enable
  • Connect Open vSwitch to sFlow Analyzer
// e.g. connect Open vSwitch to sFlow analyzer
ovs-vsctl — –id=@sflow create sflow agent=eth0 \target=\”10.0.0.1:6343\” sampling=1000 polling=20 \
— set bridge br0 sflow=@sflow

4.2 Connect Open vSwitch to OpenFlow controller

// e.g. connect Open vSwitch to OpenFlow controller
ovs-vsctl set-controller br0 tcp:10.0.0.1:6633

4.3 Traffic analytics : sFlow vs NetFlow

  • sFlow does not use flow cache, so realtime charts more accurately reflect traffic trend
  • NetFlow spikes caused by flow cache active-timeout for long running connections

專題合輯:Network Engineering

更多精彩內容掃碼關注公衆號:RiboseYim's Blog:https://riboseyim.github.io/2017/10/13/SDN-OpenvSwitch/

微信公衆號

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