NPIV介紹


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

  目前一般的做法是物理主機配備了HBA卡后,具備了訪問后端存儲的能力。后端存儲把LUN分配給物理主機(在物理主機上表現為一塊新的硬盤),物理主機再把空間分配給運行在上面的虛擬機。從后端存儲的角度來看,它只知道哪些LUN分配給了物理主機(比如ESX Server或者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 Server 2012中的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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM