1. 程式人生 > 其它 >NPIV - 連線虛擬機器與儲存的橋樑

NPIV - 連線虛擬機器與儲存的橋樑

NPIV - 連線虛擬機器與儲存的橋樑

2012年07月01日 00:25:05jewes閱讀數:14447

最近工作的專案和NPIV相關,於是花了點時間學習了一下NPIV,簡單總結了一下,望高手指正。

解決什麼問題

我們知道在儲存區域網路(SAN:storage area network),主機(Host)能夠訪問後端儲存(比如CLARiiON,VNX)必備的一個前提是主機必須配備HBA卡(Host Bus Adapter)。在沒有虛擬化之前,每臺物理主機自己配備HBA卡是無可厚非的事情。但是,在虛擬化流行的今天,怎麼在不新增新的HBA卡的前提下把後端儲存分配給執行在物理主機上的虛擬機器呢?

目前一般的做法是物理主機配備了HBA卡後,具備了訪問後端儲存的能力。後端儲存把LUN分配給物理主機(在物理主機上表現為一塊新的硬碟),物理主機再把空間分配給執行在上面的虛擬機器。從後端儲存的角度來看,它只知道哪些LUN分配給了物理主機(比如ESXServer或者Hyper-V Server),它並不知道哪些LUN是分配給了虛擬機器。所以,從儲存管理的角度來看,其管理粒度就只能到物理主機,無法到虛擬主機了。

我們需要解決的問題是,如何把後端儲存的LUN通過FC的方式直接分配給虛擬機器,使得後端儲存知道哪些LUN是給哪個虛擬機器。本文介紹的NPIV就是其中的一個解決方案。

注:本文只討論如何把LUN通過FC分配給虛擬機器。目前,通過iSCSI是可以把LUN直接分配給虛擬機器了,只是iSCSI的效能不如FC。

如何解決

解決這個問題,我們得先了解FC是如何工作的。在資料中心裡,主機通常是通過FC交換機與後端儲存連線,這樣後端儲存就能同時為很多主機服務了。

組建FC網路有兩種方式:

  1. FC-AL,類似於以太網裡面的令牌環網路,匯流排是被連線在網路中的裝置共享的。
  2. Fabric,類似於以太網裡面的全交換網路。

這裡我們只討論Fabric結構的網路。

如何理解Fabric網路

可以把Fabric網路認為是一個有很多FC交換機互聯在一起的網路,每個交換機上除了用來與其它交換機級聯的口之外,其它口都是用來連線主機或者後端儲存裝置(這裡做了簡化,有些口是做別的用途的)。在這個網路中,任意交換機的任意兩個埠都能直接通訊,因此如果某個裝置想與網路中另外一個裝置通訊,只要知道目標裝置位於哪個交換機的哪個埠。

當然,實際的情況是,每個連線在Fabric網路中的裝置都將獲得一個有FC交換機分配給該裝置的Fabric ID,用來表示該裝置在Fabric網路的位置。Fabric ID長度為24位,可以分成3段,長度分別為8位,分別是DomainID,Area ID和PortID。

  1. Domain ID 是用來區分Fabric網路中的交換機。因此,一個交換機上所有的埠的DomainID都是一樣的。
  2. Area ID是用來區分同一交換機上的不同埠組。每個FC介面都會由一塊晶片來管理,處於同一塊晶片管理的埠唯一同一Area,因此具有同樣的AreaID。
  3. Port ID 就是埠的ID。

如何獲得FabricID

連線在Fabric網路中的裝置是通過FabricID來定址目標裝置的。那麼連線在Fabric網路的裝置是如何獲得一個FabricID呢?

在主機與交換機的連線中,主機方的口叫做N口(Node),位於主機的HBA卡上,一個HBA卡可以有1個或者多個埠。交換機上的口叫做F口(Fabric)。

FC協議是通過WWN(WorldWide Name)來唯一標示裝置和埠的。具體到HBA卡上,HBA卡上有兩種WWN,分別是:WWNN(WorldWide Node Name)和WWPN(WorldWide Port Name)。通常來講一個HBA卡只有一個WWNN,HBA卡上每個埠都有WWPN來唯一標示該埠。

當某個埠接入到Fabric網路中,該埠會發起一個登入到Fabric網路中的動作,其中包含該埠的WWPN,FC交換機會返回一個FabricID 給該埠,這個動作叫做FLOGIN。一旦該裝置獲得了FabricID後,它就相當於在Fabric網路中有了個座位,以後別的裝置要傳送訊息給該裝置,只要告訴FC交換機其FabricID就行了。

NPIV 終於出場了

做了那麼多鋪墊,現在來回顧一下我們要解決的問題,“如何把後端儲存上的LUN分配給虛擬機器”。根據上面關於Fabric的介紹,一個裝置要想連線到Fabric網路中,首先要通過FLOGIN(其中包含自己的WWPN)註冊到Fabric網路中,然後FC交換機將一個可用的FabricID分配給該裝置。

為了實現把LUN分配給虛擬機器,虛擬機器必須要有自己的FabricID,因此必須要實現下面兩點:

  1. 虛擬機器上得有個”虛擬HBA卡”,提供WWNN和WWPN,這樣才能登入到Fabric網路。
  2. FC交換機得為通過同一個HBA卡連線到的Fabric網路的這些虛擬HBA卡提供不同的Fabric ID。

NPIV的全稱是N-PortID Virtualization, N-Port ID也就是N埠登入到Fabric網路後獲得的FabricID。NPIV一種在主機端的技術,使得主機端的物理HBA卡上N埠可以虛擬出多個WWPN,這樣主機上物理的HBA卡能在把自己的WWPN註冊到Fabric網路中以後,再把虛擬的WWPN也註冊到網路中(註冊的動作是FDISC,功能與FLOGI一樣,只是名字不一樣。),從而一個N埠上獲得多個N-PortID,所以這個技術叫做NPIV。它解決了上述兩點中的第一點。

上述第二點說明NPIV需要交換機的支援。

Windows 8 Server 中的NPIV配置

在即將釋出的Windows8 Server的Hyper-V中已經提供了對NPIV的支援。使用者可以在通過Hyper-V建立為虛擬機器建立虛擬HBA卡,併為其分配WWNN和WWPN。具體步驟為:

1. 建立Virtual SAN
假設執行Windows8的物理機器有兩塊HBA卡,分別連線在兩個不同的SAN,比如HBA1連線到用於生產的ProductionSAN,HBA2連線到用於測試的TestSAN。執行在Windows8 Hyper-V上的虛擬機器訪問SAN的範圍不能超過物理HBA卡訪問SAN的範圍。
建立VirtualSAN是對物理HBA的SAN的訪問範圍的細分,從而讓某些虛擬機器只能訪問ProductionSAN,某些虛擬機器只能訪問TestSAN。
如下圖,我們定義了一個NPIVtest SAN (2E),其中指定了WWPN以2E結尾的物理HBA卡,這樣連線到這個虛擬SAN的虛擬機器就只能訪問到VirtualSAN裡面指定的HBA卡能訪問到的那些SAN。

2. 為虛擬機器建立Virtual FC Adapter,一個虛擬機器可以最多建立4個虛擬的VirtualFC Adapter,每個Adapter可以與一個VirtualSAN相連線。

3. 在Virtual FC Adapter上建立虛擬的WWPN。目前Hyper-V中所有預設的Virtual FC Adapter的WWNN都是一樣的,當然也可以修改,這也說明WWNN不是那麼重要。

上述配置都是在虛擬機器處於關機的狀態下配置,配置好後開機,把對應的WWPN與後端儲存放到一個Zone裡面,然後就可以像物理機器一樣,為之分配LUN了。

注意:NPIV需要作業系統,HBA卡,光纖交換機都提供對NPIV的支援,環境配置相對複雜。這裡只是展示了在NPIV環境搭建好的基礎上,如何為虛擬機器建立虛擬的HBA卡和分配WWPN。

小結

本文簡要介紹了一下FCFabric網路的一些基礎知識,然後分析了實現把LUN分配給虛擬機器所需要的條件,簡要介紹了NPIV,並以即將釋出的Windows8 Server為例子,展示瞭如何配置為虛擬機器配置NPIV。

參考資料

  1. 大話儲存
  2. Understanding NPIV and NPV:http://blog.scottlowe.org/2009/11/27/understanding-npiv-and-npv/
  3. http://www.datacentersky.com/detailed-parsing-of-the-role-of-the-fc-fcoe-agreement-npiv.html