NPIV:連接虛擬機與存儲的橋樑

學習了一下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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章