1. 程式人生 > >網路伺服器虛擬化

網路伺服器虛擬化

【轉自http://qing.blog.sina.com.cn/tj/88ca09aa33000833.html

引子

接觸網路虛擬化純屬偶然。作為研究院微博五毛小分隊的成員,撰出一條微博是每天的任務。那天無意中抓取了一條新聞:Xsigo公司推出了業界第一個資料中心網路全虛擬化解決方案。巧的是Xsigo公司的方案是基於Infiniband技術的,而我最近的專案使我對Infiniband略懂,所以就重點關注了一下。這一關注不要緊,才發現裡面水很深。不管是傳統IT豪強還是網路巨人都對這一領域虎視眈眈,謀篇定局,更有無數的創業者們在此展開深耕。 抱著對技術要略懂的心態,我入水一探究竟。這篇博文算是對我這次涉水的總結,網路虛擬化發展到現在牽涉的技術非常多,每種技術都可以單獨寫一篇文章來介紹,限於我的精力和知識水平只能給大家做個整體的簡單介紹,不足之處還請各位批評指正。如果讀者對某種技術感興趣可以搜尋相關資料做更詳細的瞭解。

什麼是網路虛擬化

首先我們需要明確一個問題,什麼是網路虛擬化,網路虛擬化簡單來講是指把邏輯網路從底層的物理網路分離開來。這個概念產生的比較久了,VLAN,VPN, VPLS等 都可以歸為網路虛擬化的技術。近年來,雲端計算的浪潮席捲IT界。幾乎所有的IT基礎構架都在朝著雲的方向發展。在雲端計算的發展中,虛擬化技術一直是重要的推動因素。作為基礎構架,伺服器和儲存的虛擬化已經發展的有聲有色,而同作為基礎構架的網路卻還是一直沿用老的套路。在這種環境下,網路確實期待一次變革,使之更加符合雲端計算和網際網路發展的需求。雲端計算的大環境下,網路虛擬化的定義沒有變,但是其包含的內容卻大大增加了。

雲端計算環境下的網路虛擬化需要解決端到端的問題,筆者將其歸納為三個部分:

(一)第一部分是伺服器內部。隨著越來越多的伺服器被虛擬化,網路已經延伸到Hypervisor內部,網路通訊的端已經從以前的伺服器變成了執行在伺服器中的虛擬機器,資料包從虛擬機器的虛擬網絡卡流出,通過Hypervisor內部的虛擬交換機,在經過伺服器的物理網絡卡流出到上聯交換機。在整個過程中,虛擬交換機,網絡卡的I/O問題以及虛擬機器的網路接入都是研究的重點。

(二)第二部分是伺服器到網路的連線。10Gb乙太網 和Infiniband等技術的發展使一根連線線上承載的頻寬越來越高。為了簡化,通過一種連線技術聚合網際網路絡和儲存網路成為了一個趨勢。

(三)第三部分是網路交換,需要將物理網路和邏輯網路有效的分離,滿足雲端計算多租戶,按需服務的特性,同時具有高度的擴充套件性。

下面我就圍繞這三個方面來講述網路虛擬化中的一些主要技術和標準。

伺服器內部

I/O虛擬化

多個虛擬機器共享伺服器中的物理網絡卡,需要一種機制既能保證I/O的效率,又要保證多個虛擬機器對用物理網絡卡共享使用。I/O虛擬化的出現就是為了解決這類問題。I/O虛擬化包括了從CPU到裝置的一攬子解決方案。

從CPU的角度看,要解決虛擬機器訪問物理網絡卡等I/O裝置的效能問題,能做的就是直接支援虛擬機器記憶體到物理網絡卡的DMA操作。Intel的 VT-d技術及 AMD 的IOMMU技術通過DMARemapping 機制來解決這個問題。DMARemapping機制主要解決了兩個問題,一方面為每個VM建立了一個DMA保護域並實現了安全的隔離,另一方面提供一種機制是將虛擬機器的GuestPhysical Address翻譯為物理機的HostPhysical Address。

從虛擬機器對網絡卡等裝置訪問角度看,傳統虛擬化的方案是虛擬機器通過Hypervisor來共享的訪問一個物理網絡卡,Hypervisor需要處理多虛擬機器對裝置的併發訪問和隔離等。這樣Hypervisor容易行成一個性能瓶頸。為了提高效能,一種 做法是虛擬機器繞過Hypervisor直接操作物理網絡卡,這種做法通常稱作PCIpass through,VMware,Xen和KVM都支援這種技術。但這種做法的問題是虛擬機器通常需要獨佔一個PCI插槽,不是一個完整的解決方案,成本較高且擴充套件性不足。 另一種做法是裝置如網絡卡直接對上層作業系統或Hypervisor提供虛擬化的功能,一個乙太網卡可以對上層軟體提供多個獨立的虛擬的PCIe裝置並提供虛擬通道來實現併發的訪問。這種方法也是業界主流的做法和發展方向,目前已經形成了標準,主要包括SR-IOV(SingleRoot IO Virtualization)和MR-IOV(Multi-RootIO Virtualization)。這方面的技術在網上已有很好的文章來做介紹,推薦想進一步瞭解的同學讀一讀:

虛擬接入

在傳統的伺服器虛擬化方案中,從虛擬機器的虛擬網絡卡發出的資料包在經過伺服器的物理網絡卡傳送到外部網路的上聯交換機後,虛擬機器的標識資訊被遮蔽掉了,上聯交換機只能感知從某個伺服器的物理網絡卡流出的所有流量而無法感知伺服器內某個虛擬機器的流量,這樣就不能從傳統網路裝置層面來保證QoS和安全隔離。虛擬接入要解決的問題是要把虛擬機器的網路流量納入傳統網路交換裝置的管理之中,需要對虛擬機器的流量做標識。在解決虛擬接入的問題時,思科和惠普分別提出了自己的解決方案。思科的是VN-Tag, 惠普的方案是VEPA(VirtualEthernet Port Aggregator)。為了制定下一代網路接入的話語權,思科和惠普這兩個巨頭在各自的方案上都毫不讓步,紛紛將自己的方案提交為標準,分別為802.1Qbh和802.1Qbg。關於虛擬接入也有一篇很好的文章來介紹,想深入瞭解的可以看看:http://t.cn/hGWnOQ  

網路連線

網路連線技術一直都在追求更高的頻寬中發展。比如Infiniband和10Gb乙太網。在傳統的企業級資料中心IT構架中,伺服器到儲存網路和網際網路絡的連線是異構和分開的。儲存網路用光纖,網際網路用乙太網線(ISCSI雖然能夠在IP層上跑SCSI,但是效能與光纖比還是差的很遠)。資料中心連線技術的發展趨勢是用一種連線線將資料中心儲存網路和網際網路絡聚合起來,使伺服器可以靈活的配置網路埠,簡化IT部署。乙太網上的FCOE技術和Infiniband技術本身都使這種趨勢成為可能。

Infiniband

Infiniband 技術產生於上個世紀末,是由Compaq、惠普IBM戴爾英特爾微軟Sun七家公司共同研究發展的高速先進的I/O標準。最初的命名為SystemI/O,1999年10月,正式改名為InfiniBand。InfiniBand是一種長纜線的連線方式,具有高速、低延遲的傳輸特性。基於InfiniBand技術的網絡卡的單埠頻寬可達20Gbps,最初主要用在高效能運算系統中,近年來隨著裝置成本的下降,Infiniband也逐漸被用到企業資料中心。為了發揮Infiniband裝置的效能,需要一整套的軟體棧來驅動和使用,這其中最著名的就是OFED(OpenFabrics Enterprise Distribution) ,它基於Infiniband裝置實現了RDMA(remote direct memoryaccess).  RDMA的最主要的特點就是零拷貝和旁路作業系統,資料直接在裝置和應用程式記憶體之間傳遞,這種傳遞不需要CPU的干預和上下文切換。OFED還實現了一系列的其它軟體棧:IPoIB(IP over Infiniband), SRP(SCSI RDMA Protocol)等,這就為Infiniband聚合儲存網路和網際網路絡提供了基礎。OFED由OpenFabrics聯盟負責開發。OpenFabrics最初叫做OpenIB,從2006年開始OpenIB在Infiniband之外也開始支援乙太網,業務做的大了名字也從OpenIB改為OpenFabrics。OFED現已經被主流的Linux發行版本支援,並被整合到微軟的windowsserver中。

網路虛擬化-正在進行的網路變革

                              圖1        OFED 軟體棧

FCOE

就在大家認為Infiniband就是資料中心連線技術的未來時,10Gb乙太網的出現讓人看到了其它選擇,乙太網的發展好像從來未有上限,目前它的效能已經接近Infiniband(詳見http://www.cisco.com/en/US/prod/collateral/ps10265/le_32804_pb_hpc10ge.pdf),而從現有網路逐漸升級到10Gb乙太網也更易為使用者所接受。FCOE的出現則為資料中心網際網路絡和儲存網路的聚合提供了另一種可能。FCOE是將光纖通道直接對映到乙太網線上,這樣光纖通道就成了乙太網線上除了網際網路網路協議之外的另一種網路協議。FCOE能夠很容易的和傳統光纖網路上執行的軟體和管理工具相整合,因而能夠代替光纖連線儲存網路。雖然出現的晚,但FCOE發展極其迅猛。與Infiniband技術需要採用全新的鏈路相比,企業IT們更願意升級已有的乙太網。在兩者效能接近的情況下,採用FCOE方案似乎價效比更高。

網路交換

在這一層面上要解決的問題則是要對現有的網際網路絡進行升級,使之滿足新業務的需求,網路虛擬化則是這一變革的重要方向。在這一方向上目前有兩種做法,一種是在原有的基礎設施上新增新的協議來解決新的問題;另一種則完全推倒重來,希望設計出一種新的網路交換模型。

當虛擬資料中心開始普及後,虛擬資料中心本身的一些特性帶來對網路新的需求。物理機的位置一般是相對固定的,虛擬化方案的一個很大的特性在於虛擬機器可以遷移。當虛擬機器的遷移發生在不同網路,不同資料中心之間時,對網路產生了新的要求,比如需要保證虛擬機器的IP在遷移前後不發生改變,需要保證虛擬機器內執行在第二層(鏈路層)的應用程式也在遷移後仍可以跨越網路和資料中心進行通訊等等。在這方面,Cisco連續推出了OTV,LISP和VXLAN等一系列解決方案。

OTV

OTV的全稱叫做OverlayTransport Virtualization。通過擴充套件鏈路層網路,它可以使區域網跨越資料中心。很多應用需要使用廣播和本地鏈路多播。通過擴充套件鏈路層網路,OTV技術能夠跨地域的處理廣播流和多播,這使得這些應用所在的虛擬機器在資料中心之間遷移後仍然能夠正常工作。OTV擴充套件了鏈路層網路實際上也擴充套件了其相關的IP子網,需要IP路由同樣的做改變,這就引出了新的問題,這個問題就由LISP來解決了。

LISP

LISP的全稱是Locator/ID Separation Protocol。傳統的網路地址IP蘊含了兩個含義,一個是你是誰(ID),另一個是你在哪裡(Locator)。這樣帶來的一個問題就是如果你的位置變了(Locator變了),IP必須跟著變化。LISP的目標是將ID和Locator分開,再通過維護一個對映系統將兩者關聯。這樣虛擬機器和伺服器在網路不同位置進行遷移時可以保持相同的IP地址。
網路虛擬化-正在進行的網路變革  圖2  OTV和LISP的應用

VXLAN

VXLAN的目的是在雲端計算環境中建立更多的邏輯網路。在雲端計算的多租戶環境中,租戶都需要一個邏輯網路,並且與其它邏輯網路能夠進行很好的隔離。在傳統網路中,邏輯網路的隔離是通過VLAN技術來解決的。不幸的是在IEEE802.1Q標準中,VLAN的標識號只有12位,這就限制了在一定範圍內虛擬網路最多隻能擴充套件到4K個VLANs。為了解決這個問題,思科聯合VMware在今年推出了VXLAN技術,通過MACin User Datagram Protocol(MAC-in-UDP)封裝技術,加入了一個24位的段識別符號。用UDP的多播代替廣播,將資料包限定在目標網段內。VXLAN技術極大的擴充了雲端計算環境中所能支援的邏輯網路的數量,同時通過邏輯段可以將邏輯網路擴充套件到不同的子網內,使虛擬機器能夠在不同的子網間做遷移。

網路虛擬化-正在進行的網路變革

                             圖3         VXLAN 幀格式

網路虛擬化-正在進行的網路變革

                            圖4 通過VXLAN來擴充套件網路


NVGRE

對於雲端計算環境中的下一代網路,各大IT廠商們都不想隨便就丟掉話語權,就在Cisco推出VXLAN不久,Microsoft就聯合Intel, HP& Dell 提出了NVGRE標準。NVGRE的全稱是NetworkVirtualization using Generic Routing Encapsulation。它和VXLAN解決相同的問題,只是用了稍微不同的方式,使用GRE (Generic Routing Encapsulation) key的低24位作為網路租戶的識別符號。

前面我們講的都是在原有的基礎設施上新增新的協議來解決新出現的問題,而近年來SoftwareDefined Networking (SDN) 的興起則期待從根本上改變目前的網路交換模式。SDN中最著名的就是OpenFlow。

OpenFlow

0penFlow論壇起源於斯坦福大學的“Clean slate”計劃,開始主要是為了設計一種新的網際網路實驗環境。在目前的實驗網上沒有實際足夠多的使用者或者足夠大的網路拓撲來測試新協議的效能和功能,最好的方法是將執行新協議的實驗網路嵌入實際運營的網路,利用實際的網路環境來檢驗新協議的可行性和存在的問題。OpenFlow的切入點是目前已有的網際網路上的交換裝置。無論是交換機還是路由器,最核心的資訊都儲存在flowtable裡面,這些flowtable用來實現諸如轉發、統計、過濾等各種功能。雖然不同生產廠家有不同格式的flowtable,但可以抽取出絕大多數switch和router都有的一些通用的功能。OpenFlow試圖提出一種通用的flowtable設計,能被所有廠家的裝置所支援。通過控制flowtable能夠實現網路流量的分割槽,將網路流量劃分為不同的資料流,這些資料流能被歸於不同的組且相互隔離,能夠按照需要來處理和控制。更重要的是flowtable支援遠端的訪問和控制。OpenFlow的flowtable中每一個entry支援3個部分:規則,操作與狀態。規則是用來定義flow;操作就是轉發、丟棄等行為;狀態部分則是主要用來做流量的統計。

有了OpenFLow,我們可以在正常執行的網路中自己定義一些特殊的規則,通過定義不同的flowentry讓符合規則的流量按照我們的需求走任意的路徑,可以達到把物理網路切成若干不同的虛擬邏輯網路目的。所以,OpenFlow將傳統的網際網路改造成為了動態可變的軟體定義網際網路(SoftwareDefined Networking )。OpenFlow的發展異常迅猛,就連Cisco如今也開始擁抱OpenFlow。

總結

網路虛擬化當前IT發展最熱門的方向之一,是雲端計算基礎架構的核心技術。網路虛擬化涉及的面非常的廣,本文也只根據筆者的認識做了粗淺的介紹。

備註

在網路虛擬化方面不僅很多大公司在搶佔話語權,很多初創公司也在努力開拓機會,這裡把我所知道的中小公司稍微做下總結,供大家參考:

Nicira:專注於OpenFlow的神祕公司。

Big Switch:提供基於OpenFlow的網路虛擬化解決方案

Juniper Networks:支援OpenFlow

Open vSwitch: 一個開源的虛擬switch ,它是一個軟體switch能執行在Hypervisor裡, 目前已是XenServer 6.0的預設switch。

ConteXtream:借鑑Grid的思想,通過DHT(Distributed Hash Table)在傳統的網路之上建立一個虛擬的抽象的網路,解決雲主機服務提供商們在網路靈活性,多租戶和擴充套件性方面的挑戰。

Embrane: 提供一種on-demand的虛擬化網路服務,比如服務的負載均衡,防火牆,VPN。

Xsigo:  提供基於Infiniband技術的資料中心全虛擬化方案。

NextIO:提供基於PCIe技術 的I/O虛擬化產品。