XenServer的網絡堆棧模式Bridge

   XenServer自己並無在網絡方面本身開發專門的網絡堆棧模式,而是使用現有的網絡堆棧模式來進行集成。目前XenServer的網絡堆棧主要有兩種:Bridge和OpenvSwitch模式。其中,Bridge是屬於Linux系統的技術,OpenvSwitch是一款開源的虛擬交換機軟件。在本文中我想說說Bridge堆棧模式。前端

  Bridge中文稱爲網橋,Linux網橋就是經過一個虛擬的網橋設備來實現橋接,這個設備能夠綁定若干個以太網接口設備,從而將它們橋接起來。通常來說,Bridge就是Switch,因此具有了Switch的最基本功能:後端

  • 數據包轉發:把數據包從一個端口轉發到另外一個端口的能力;服務器

  • 學習和維護PDB(forwarding database)。每一個switch都有一張PDB,得知輸入的數據包應該由那個端口轉發出去,若是PDB中沒有對應的記錄,則廣播該數據包獲得全部的端口信息。網絡

備註:PDB的主要做用就是記錄MAC地址和端口的對應關係。在Linxu Bridge中,PDB經過hashtable來管理和維護。架構

        在XenServer中,將一臺服務器服務器虛擬成多臺虛擬機,上面的虛擬機設備都是經過虛擬化技術實現的。即上面虛擬機的CPU、內存和IO設備等都是虛擬仿真出來的,每臺虛擬機通常狀況下分別有一張虛擬出來的網卡。而咱們的物理服務器設備,可能只有一張真實的物理網卡(固然也可能有多個)。當全部的虛擬機都須要和外部進行網絡通信的時候,只能使用這張物理網卡進行實際的網絡通信,這勢必會使全部的虛擬機都會共享這張物理網卡的功能,因此XenServer要處理不一樣虛擬機的虛擬網卡和物理網卡之間的數據包轉發。基於Bridgr網絡堆棧模式呢,XenServer的Bridge堆棧架構圖下圖所示:ide

wKiom1Z0_GzQT7kzAACGageq7JM035.png

本圖來自Xen官方社區函數

XenServer會在Domain0中建立一個Linux的Bridge設備,通常第一個設備默認命名爲(Bridge xenbr0),對於真實的物理網卡,叫作peth#(physicaleth#);同時咱們在圖上看到,XenServer在Domain0中,爲每一個虛擬機的虛擬網卡都建立了一個對應虛擬網絡接口,對於的命名爲vifn.m(virtual interface.m),其中,n表明了虛擬機對應的編號,m表明了接口對應的虛擬機的虛擬網卡的編號。例如vif0.0對應Domain0的第一塊虛擬網卡eth0,vif1.0對應DomainU#1的第一塊虛擬網卡eth0。工具

      爲了更加直觀,我本身畫了一個圖,在下面:性能

wKioL1Z0_JuQDrhqAABgQmt8zMA759.png

咱們能夠看到,物理網卡peth和虛擬網卡接口vif都鏈接到了Bridge上面,物理網卡負責和外部的網絡進行全部內部的數據包傳遞和轉發。那麼網橋的橋接的意思是什麼呢?如上圖,咱們的各虛擬機的vif都分別橋接到了xenbr0設備上面,對應上面的協議棧來講只能看見一個設備,就是xenbr0設備。由於橋接是在數據鏈路層實現的,上層不須要關心橋接的細節。當外部的網絡數據包到達物理網卡後,由Domain0中的網卡驅動進行處理,而後傳遞給peth接口,peth接口將數據傳遞給Bridge,即xenbr0設備,網橋設備的處理代碼再根據數據包的目的MAC地址來判斷報文該被轉發到那個虛擬接口vif,而後由Xen虛擬化層來處理 vif與虛擬機中的虛擬網卡之間的數據包傳遞工做。反過來,從eth0接收到的報文被提交給網橋的處理代碼,在這裏會判斷報文該轉發、丟棄、或提交到協議棧上層。學習

上文說道,vif和虛擬機之間的數據包傳遞工做由Xen虛擬化層來進行,那麼是怎麼進行的呢?vif和虛擬機中的虛擬網卡的傳遞取決於虛擬機的類型,便是的全虛擬化仍是半虛擬化。

   對於半虛擬化來講,虛擬機的OS是通過修改的,虛擬機自己知道本身是虛擬的,其虛擬機網絡採用了驅動分離的技術,什麼意思呢?就是說這臺虛擬機的的虛擬網卡要通信,須要有2個部分的驅動,稱爲前端驅動和後端驅動,其中,前端驅動位於虛擬機中,後端驅動位於Domain0中,他們之間的通信經過頁面交換技術來傳遞信息。因此在半虛擬化中,vif並不對Bridge轉發給他的數據包作任何操做和處理,而是轉發給後端程序,有後端驅動程序交由虛擬機的虛擬網卡進行處理。

wKiom1Z0_LOyQPZEAABcjP3FfrM147.png

若是是對於全虛擬化的方式呢?全虛擬化的方式在XenServer中簡稱爲HVM。

在全虛擬化模式下,虛擬機自己OS並不作任何的修改操做,他本身也不知道本身是運行在虛擬化環境上的,甚至不知道本身是虛擬的。因此在全虛擬化方式下須要藉助硬件虛擬化來截獲虛擬機對硬件設備的訪問,利用QEMU模擬器來模擬虛擬機的設備,如虛擬網卡,(QEMU 是一個面向完整 PC 系統的開源仿真器。除了仿真處理器外,QEMU 還容許仿真全部必要的子系統,如連網硬件和視頻硬件。它還容許實現高級概念上的仿真(如對稱多處理系統(多達255 個 CPU)和其餘處理器架構(如 ARM 和 PowerPC)。感興趣的朋友能夠去查找資料進行了解,在後面我也會寫點有相關的QEMU的文章)。經過vif和QEMU模擬設備之間的關聯,完成物理網卡和虛擬網卡之間的數據交換。

wKiom1Z0_MugFZ6aAABXYUC1je8931.png

下面咱們來講說XenServer對網絡相關的管理系統都有哪些組件,如何進行管理?

在XenServer中,和虛擬網絡相關的組件分別是:

  • Xend

  • Brctl

  • Linux Bridge module

wKioL1Z0_PHwDdjJAABgjcdLQWE205.png

下面對上圖的組件進行介紹:

一、Xend:這是Xen對外提供管理和控制服務的最重要的組件。他處於應用層,是用戶管理虛擬機的入口,對外提供XML-RPC協議的API。

二、Linux Bridge Module:這是Linux Bridge的模塊,在系統啓動時加載到內核。

三、Brctl:Linux bridge在應用層的命令行工具,因此和bridge相關的操做,都是經過該工具進行實現,在XenServer中,XE命令經過XAPI對Brctl進行操做。

四、Xe:XenServer的命令行管理工具。用於執行將輸入的命令傳遞都XAPI去執行。

五、Libxenctrl:Xen的一個C語言庫,Xend經過調用此庫的函數來訪問Hypervisor。

六、Privcmd:Domain 0中的驅動程序。Libxenctrl經過此程序實現向下訪問。

七、Xen hypervisor:XenServer的軟件抽象層,負責爲運行與硬件之上的不一樣虛擬機提供CPU調度和內存分配等功能。

最後說說在Bridge模式物理網卡綁定。

在虛擬化環境中,一臺物理服務器上的虛擬機通常有多臺,他們共享網絡的資源,無論虛擬交換機如何設置,最後都是經過服務器的物理網卡和外部進行通訊。若是服務器只有一塊網卡,那麼全部的虛擬機對外都是共享一條物理鏈路,當物理鏈路出現問題時,致使全部的虛擬機網絡不通,對業務系統來講是很大的影響。二是多臺虛擬機使用統一張網卡同一條鏈路,也會照成資源爭用的狀況,並且在網絡流量很大的時候,物理網卡的處理性能可能不能同時處理那麼多的流量。因此通常在生產環境中就須要咱們提供多塊網卡進行綁定,以提升網絡的冗餘和高可用。

在Bridge模式下,最多隻支持2塊網卡綁定,不支持2塊以上的物理網卡進行綁定。2塊以上的綁定須要使用openvswitch模式。

下圖顯示了綁定網卡的一個架構圖

wKioL1Z0_QzDYiCGAABF1MEbk6w159.png

本圖來自Xen社區

基於VLAN的網卡架構圖

wKioL1Z0_SGRUk8UAAAoRhIhPbs934.png

本圖來自Xen社區

網卡綁定的架構圖:

wKiom1Z0_Sqz3f7VAAArpNaU0oY676.png

本圖來自Xen社區

  基於綁定網卡和VLAN的架構圖:

wKiom1Z0_UTz5gKhAAAuCBo5KGA386.png

本圖來自Xen社區

相關文章
相關標籤/搜索