2012年2月13日 星期一

以Virtual Switch建置雲端虛擬網路交換機制(轉)

虛擬交換(Virtual Switch)顧名思義就是建立於虛擬平台上,透過軟體模擬出網路交換器的功能,其提供管理員能夠不依賴於實體網路和硬體,動態地重新配置虛擬環境中的網路架構。也由於其變動性較小,因此可減少網路和虛擬平台管理人員的負擔。  

本文中將介紹一套以開放原始碼(Open Source)技術為基礎的虛擬交換器OpenvSwitch,透過實際部署安裝於Xen虛擬平台上的方式,針對虛擬交換機制作深入的分析與探討。 

運作流程說明

在Xen的虛擬平台中,傳統上其內部網路主要由虛擬網卡與虛擬橋接器(Linux Bridge)所組成,兩者皆是由Hypervisor所模擬出來的軟體物件,提供虛擬機器橋接實體網路及虛擬機器之間彼此互相連線溝通機制。

而虛擬交換器(Virtual Switch)的介入,則帶給Hypervisor更多彈性化的功能來管控整體的虛擬網路架構。由於連接實體網路的硬體介面是由Hypervisor中的實體網路卡負責,其便可以直接成為虛擬交換器的uplink埠。虛擬交換器和Hypervisor間的互動架構則如下圖所示。  

▲虛擬交換器與Hypervisor間的互動架構。


首先,Xen會啟用一個Domain0負責做為後端驅動(netback),接收從各個虛擬機器(DomainU)中的前端驅動(netfront)所傳送的封包,其傳送的機制是透過共享記憶體的方式,將記憶體存取權限授與(grant)後端驅動,因此DomainU之間無法讀取未經授權的記憶體空間,也不會干擾到本身之外的封包儲存空間。  

而Domain0的後端驅動在收到封包之後,則會交由虛擬交換器判別封包應轉發至何處,要往外透過實體網路卡發送,抑或往內送予其他虛擬機器,如此就完成整個虛擬網路的封包流向。  

優點與用途簡介 

OpenvSwitch這款虛擬交換器具備很強的靈活性,可以在管理程序中作為軟體Switch運行,也可以直接部署到硬體設備上作為控制層。  

在Linux環境中可透過編譯成核心模組(Kernel Module)的形式運行於系統核心層內(kernel-based)以提供較佳的運行效能,或是以軟體的方式執行於系統應用層(userspace-based)讓使用者可靈活地操控。此外,OpenvSwitch還支援多種標準的管理接口,如Netlow、sFlow、RSPAN、ERSPAN、CLI。  

OpenvSwitch和LinuxBridge的差別 

目前Linux預設已在核心中提供L2封包交換模組Bridge,Linux Bridge可提供不同虛擬器間的網路數據封包交換,然而OpenvSwitch與LinuxBridge仍有些許的差異,比較如下表所示。  



可移動性設定組態 

傳統的Bridge在做IP位址轉移時,必須在相同的L2網路環境,然而OpenvSwitch支援GRE tunnel技術,可在任意網路環境中轉移,而且OpenvSwitch易於佈建,每一個佈建案例都可以透過管理介面獨立區分管理,同時在跨虛擬器溝通(inter-VM communication)間具有通透性,其功能多層次的特性可以使轉送封包的狀態跨多台虛擬器,且可運用不同的交換器功能。例如policy routing state、ACLs、QoS policy、monitoring configuration (e.g. NetFlow, sFlow)。  

此特性可以有效地與實體網路拓樸做區分,例如一個遠端程式若運行在虛擬控制平台上,可移植其網路設定在多台虛擬機器間。  

即時反映網路狀態 

虛擬環境常常會因需求不同而有所改變,同時也須改變邏輯網路環境,而OpenvSwitch提供一個狀態資料庫(State Database),支援遠端控制,因此可以隨時反映出網路環境的改變。  

自動維護邏輯標籤 

分散式虛擬交換器常常添加標籤(Tag)在網路封包,以維護整體網路的邏輯內容,因此如何有效率且正確地維護邏輯標籤,會是分散式虛擬交換器所需面臨的問題。  

OpenvSwitch的標籤規則可被遠端程式存取與編排,同時它們以最佳的形式儲存,以減少網路設備的負擔。OpenvSwitch所提供的VPN GRE tunnel,可以遠端操控tunnel,因此能夠被用於建立私有的虛擬網路環境。  

提升封包處理效能 

OpenvSwitch由於精簡其位於kernel中的程式碼,封包轉送可運行於kernel中,因此可以減輕處理封包的負擔,在執行效能上較傳統之Bridge有明顯的改進。同時,它也可以兼容其他網路應用服務,如QoS。  

由於OpenvSwitch利用Linux中已存在的hook點進入kernel,透過kernel裡面的net_device結構,hook網路設備的封包接收和傳送點。然後,讓封包在不同的netdevice之間轉發,修改封包的流向等,因此不須要修改kernel中的程式,即可用模組的型式載入。  

安裝部署 

關於OpenvSwitch的設定,在此將分為編譯,安裝,控制三部分說明,本篇文章以kernel-based的佈建為示範。  

編譯程式碼 

在編譯的過程中依系統不同,可能需要額外安裝必須套件,如autoconf、automake、python等,「--with-l26」參數將OpenvSwitch編譯為kernel-based交換器,此處須確定系統的kernel source路徑正確。  



安裝核心模組 

因為OpenvSwitch是以替換掉系統核心中LinuxBridge的方式運作,因此必須先確定Bridge為模組型式而且可以被移除,若是直接編在核心中,便不適用此方式,移除後便可以載入openvswitch_mod.ko核心模組。  



建立OpenvSwitch狀態資料庫,儲存網路邏輯環境設定,執行ovsdb-server,讓管理員可以透過unix domain socket遠端設定資料庫內容,當資料庫第一次建立好後須執行「ovs-vsctl --no-wait init」初始化資料庫。  



最後的步驟就是啟動ovs-vswitchd daemon,並將其連線到unix domain socket。  



系統控制操作 

當上述步驟完成後,便可以用ovs-vsctl作設定bridges或是控制interface ports的動作。  



此外,OpenvSwitch同時提供支援相容於Linux Bridge「brctl」指令的模組。  



將上述兩個模組與daemon載入後,便可用brctl相關指令進行操作。  



實際操作 

經過上述佈建流程後,接下來將以兩個例子演練如何使用OpenvSwitch設定網路環境。  

第一個範例是將同一個Bridge的虛擬網卡分配到不同的VLAN,其分布如下:  

▲將同一個Bridge的虛擬網卡分配到不同的VLAN。


VLAN1:VM1,VM3
VLAN2:VM2 

STEP 1:首先,建立一個OpenvSwitch的Bridge。 



STEP 2:將實體網卡eth0加入br0中。 



STEP 3:把VM1的虛擬網卡vif1.0加進VLAN1。 



STEP 4:將VM2的虛擬網卡vif2.0加進VLAN2中。 



STEP 5:最後把VM3的虛擬網卡vif3.0加進VLAN1。  



測試結果是,從VM1中Ping VM3可以連線,因其屬於同一個VLAN1中;從VM1中Ping VM2無法連線,因其分屬於不同的VLANs。 

▲連線測試結果。


第二個範例是使用QoS策略限制虛擬網卡最大傳輸率(Rate Limiting),其相關設定如下:  

Rate limit VM1: 1 Mbps 
Rate limit VM2: 10 Mbps  

▲使用QoS策略限制虛擬網卡最大傳輸率。


在此須設定ingress_policing_rate、ingress_policing_burst這兩個虛擬網卡參數:  

ingress_policing_rate:虛擬機器所允許傳送的最大傳輸率(kbps)。 
ingress_policing_burst:虛擬網卡在policing_rate下所允許最大傳輸量(kb)。  

STEP 1:首先,在VM1中設定rate limit為1Mbps。 



STEP 2:然後,在VM2中將rate limit設定為10Mbps。  



這裡以iperf 2.0.4這套網路效能測試工具來測量VM1與VM2的封包傳送頻寬,測試結果顯示,當VM1為client連到VM2 server的時候,頻寬測得為1Mbps;當VM2為client連到VM1 server的時候,頻寬則測得為10Mbps。  

▲測量VM1與VM2的封包傳送頻寬。


效能測試 

前面提到OpenvSwitch因其精簡程式碼設計,並執行於系統核心層中,所以能有效提高處理效能。  

在此以iperf 2.0.4分別對於OpenvSwitch(version 1.1.0pre2)和LinuxBridge(kernel 2.6.32)作效能測試評比。  

下圖以每10秒統計一次throughput測試時間120秒,可以看出OpenvSwitch整體效能遠優於LinuxBridge。  

▲效能趨勢圖。


從以下圖表可以看出LinuxBridge的平均throughput為11.21Gbps,而OpenvSwitch則為14.88Gbps,整體效能提升32%。  

▲平均效能圖。


結語 

本文介紹了以開放原始碼開發的虛擬交換器OpenvSwitch,用來建置雲端虛擬網路交換機制,其優異的處理效能與靈活的操作,提供管理人員一個很好的使用經驗。目前最新版的OpenvSwitch已經內建於雲端虛擬平台開發組織Xen.org所推出的Xen Cloud Platform裡,並可部署在多種虛擬平台如Xen、XenServer、KVM、Proxmox VE和VirtualBox等。  

沒有留言: