1. 程式人生 > >【大話存儲】學習筆記(7,8章),FC協議

【大話存儲】學習筆記(7,8章),FC協議

pass 混亂 fff 區分 san 主機 所有 內容 發生

Fibre Channnel

我們之前引入了SAN的概念,SAN首先是個網絡,而不是存儲設備。這個網絡是專門來給主機連接存儲設備用的。

我們知道按照SCSI總線16個節點的限制,不可能接入很多的磁盤,要擴大SAN的規模,只使用SCSI總線是不行的,所以必須找到一種可尋址容量大、穩定性強、速度塊、傳輸距離遠的網絡結構。FC網絡就應運而生。

FC網絡

Fibre Channnel也就是網狀通道,FC協議從1988年出現,最開始作為高速骨幹網技術。

任何互聯系統都逃不過OSI模型,所以我們可以用OSI來將FC協議進行斷層分析。

物理層

首先有較高的速度:1Gb/s,2Gb/s,4Gb/s,8Gb/s到16Gbps

為了實現遠距離傳輸,傳輸介質起碼是光纖

鏈路層

字符編碼及FC幀結構

FC協議的幀頭有24字節,比以太網幀頭(14字節)還要長。

比如下圖為以太網的報文格式。

技術分享圖片

為什麽FC協議需要這麽長的幀頭呢?因為24字節的幀頭不但包含了尋址功能,還包含了傳輸功能保障。也就是說網絡層和傳輸層的邏輯都用這24字節來傳輸。

這點就與TCP/IP+以太網不同,以太網基本上沒有傳輸功能保證功能,主要需要靠TCP來進行端到端的傳輸保障。

我們可以對比一下TCP/IP和FC協議的開銷:

基於以太網的TCP/IP網絡,開銷為:

14字節(以太網幀頭) + 20字節(IP頭) + 20字節(TCP頭) =54字節,或者把TCP幀頭變為UDP(8字節)一共是42字節

而FC協議就24字節,所以開銷比TCP/IP的要小。

網絡層

FC網絡中的節點要通信,無非也就是連、找、發三大要素。

  • 連:通過FC交換機打通通路,主要的拓撲結構有FC-AL和Fabric兩種。

  • 找:FC協議有一套於以太網不相同的編址方式,可以盡可能減少人為的幹預。

  • 發:指的是與目標進行通信

從這個方面基本上就可以了解FC各節點交互的流程了。

連:拓撲

與以太網類似,FC也有兩種拓撲:FC-AL和Fabric

  • FC-AL:類似以太網共享總線拓撲,但是連接方式不是總線,而是仲裁環(Arbitral loop)。每個FC -AL 設備首尾接成了一個環路。最多能接入128個節點,實際上只用了8位的尋址容量。被廣播地址、專用地址占用之後,只剩下127個實際可用的地址。

仲裁環是應該 由所有設備串聯而成的閉合環路,每個接口上都有一套旁路電路(Bypass Circuit),一旦檢測到本地設備故障,就會自動將這個接口短路。

一跳一跳的傳輸,而且任何時候只能按照一個方向向下遊傳輸。

技術分享圖片

  • Fabric:與以太網交換拓撲類似。Fabric的意思是“網狀構造”,表明其實是一種網狀的交換矩陣

相對於仲裁環路來說轉發效率提升了很多,聯入矩陣所有節點可以同時進行點對點通信,加上包交換所帶來的並發和資源充分利用,可使得交換架構獲得的總帶寬為所有端口帶寬之和。

而AL架構下,不管接入的節點有多少,帶寬為恒定,即共享環路帶寬。

下圖為交換矩陣的示意圖。
技術分享圖片

FC終端設備接入矩陣端點,一個設備發給另一個設備數據幀被交換矩陣收到後,矩陣會撥動交叉處的開關,連通電路,傳輸數據。所以可以把交換矩陣是一個大的電路開關矩陣,根據通信的源和目的決定波動哪些開關。

FC交換拓撲尋址容量是2的24次方個地址,比以太網理論值(2的48次方)少,但是對於專用的存儲網足夠。

找:編址

任何網絡都需要尋址機制,所以需要對FC網絡的每個設備定義一個唯一的標識。

  • WWNN(World Wide Node Name):每個設備自身有一個WWNN
  • WWPN(World Wide Port Name):FC設備的每個端口都一個WWPN,是世界上唯一的。

以太網交換設備的端口不需要有MAC地址,而FC交換機卻需要每個端口都有自己的WWPN。這是因為FC要做的工作比以太網交換機多,許多FC的邏輯都集成在了FC交換機。 需要處理到FC協議的最上層。而以太網相對簡單,因為上層邏輯都被交給TCP/IP這樣的上層協議來實現了。

WWPN:長度是64位,比MAC地址多16位。長度太長,速度低,所以在WWPN上映射一層尋址機制,分配一個Fabric ID,嵌入鏈路幀裏面來做路由

這樣WWPN被映射到了Fabric ID,一個24位的Fabric ID又被分為Domain ID、Area ID、Port ID三個亞尋址單元

  • 高8位定義為Domain區分符,用來區分網絡中的FC交換機本身。Domain ID是自主交換機分配的。那主交換機怎麽來的?它是根據WWNN號來進行選舉,WWNN最小者獲勝,成為主交換機,它就有資格向其他交換機分配Domain ID

  • 中8位定義為Area區分符,區分同一臺交換機的不同端口組。如果一塊芯片可以管理1、2、3、4號FC端口,那麽芯片可以屬於一個Area

  • 低8位定義為Port區分符,區分不同的Port

發:地址映射過程

如下的講解主要是針對Fabric 交換架構網絡。

既然要把WWPN映射到Fabric ID上,就一定要有映射機制,那麽每個端口如何獲得Fabric ID的呢?過程比較類似於RARP協議。

當一個端口接到FC網絡的時候,會向註冊服務器發送一個註冊申請,然後這個註冊服務器會返回給它動態分配一個Fabric ID。當然此時註冊服務器會記錄這個映射關系。

此後這個接口的幀不會攜帶WWPN,而是攜帶其被分配的ID作為源地址。這點就與以太網不同,我們知道 以太網既攜帶MAC又攜帶IP,所以在效率上打了折扣。

技術分享圖片

發:同步其他節點信息

不過還有一個問題,一個端口要與另一個端口通信,那麽怎麽知道要通信目標的Fabric ID是多少呢?

每個節點獲得自己的Fabric ID之後,還會進行名稱註冊。同樣也是向名稱服務器發送註冊幀,主動告知自己的Fabric ID等信息。然後名稱服務器其他節點的信息返回給它。這樣就知道了其他節點地址呢。

如果FC網絡比較大,則可能不只一臺FC交換機。也就是說有若幹FC交換機互聯。與IP網絡不同的是,FC網絡不需要太多的人工介入,它們會自動協商自己的Domain ID(可以回過去看看Fabric ID的結構),選舉出主交換機,由主交換機來為其他的交換機分配Domain ID。交換機之間會運行OSPF等路由協議,這樣可以交互節點信息,尋址各個節點。

現在我們可以與IP網絡對比一下,IP網絡需要很強的人為介入性,需要人來配置節點的IP地址、路由信息等,而FC網絡則可以自動分配和管理地址。最根本原因是因為FC協議一開始設計就是為了高速、高效的網絡,而不是給Internet使用的。所以自動分配地址當然適合。

發:與目標通信

此時每個節點已經獲得了Fabric ID了,同時還從名稱服務器得知網絡上其他節點的ID,萬事俱備,完全可以與其他節點進行通信了。

  • 首先需要直接向目的端口發起一個N_PORT Login過程,目的協商一系列的參數

  • 然後進行Process Login過程(類似TCP向端口發送握手包),即進行應用程序間的通信。比如FC可以承載SCSI協議,那麽此時Initiator端就需要向Target端發起請求了。

  • 這些Login過程其實就是上三層的內容,屬於會話層。但是Login幀也必須通過下4層來封裝並傳輸到目的地,就像TCP握手一樣。

FC網絡中還有一中FC Control Service,如果節點向這個服務進行註冊了以後,一旦網絡狀態有變動,將會把最新的信息同步到這些節點。

最後一點

上面提到的名稱服務器、註冊服務器其實一般都是運行在交換機內部的,而不是物理上的服務器。

傳輸層

FC協議的傳輸層的作用與TCP相似,也也進行Segment以及通過端口號區分上層應用。

  • 對上層數據流進行Segment。
    每個Exchange(上層程序)發來的數據包,被FC傳輸層分割為Information Unit,類似於TCP的Segment。
    然後下層協議為每個Segment分配一個Sequence ID,再分割為FC所適應的幀

  • 區分上層程序。TCP是通過端口號,而FC協議是通過Exchange ID來區分。

FC適配器

要構建一個完整的FC網絡,除了需要FC交換機,還需要FC適配器(FC HBA,Host Bus Adapter)

HBA可以指代任何一種設備,只要這個設備的作用是將一個外部功能接入主機總線,所以PCIE網卡、聲卡和顯卡都可以叫HBA。

下圖是用來接入FC網絡的各種線纜,有SC光纖,DB9銅線和RJ45/47線纜。可以看出FC不一定是光纖

技術分享圖片

FC適配器有自己的CPU、RAM、ROM。是一個嵌入式設備。與RAID卡類似,只是不像RAID卡需要那麽多的RAM來做數據緩存。

技術分享圖片

SCSI遷移到FC

如何遷移

在上面一章我們把FC協議進行了簡單的介紹,現在是時候把SCSI遷移到FC上了。

回顧一下,為什麽要這麽做,因為SCSI總線只能接16個節點,不利於擴展,同時傳輸的距離有限,而且不夠高效等。所以我們可以在主機與後端存儲之間使用FC協議,把基於並行SCSI總線的存儲網絡架構遷移到FC的網絡架構。

遷移的過程中存在一個問題,我們知道FC協議並沒有定義SCSI指令集這樣面向磁盤存儲數據的通用語言。那怎麽解決這個問題呢?

在【大話存儲】學習筆記(13章),協議融合中提到了協議融合,此時FC協議與SCSI協議有重疊,但是FC協議在某些方面可以做得更好,所以可以將SCSI語言承載於FC協議進行傳送。

將連接主機和磁盤陣列的通路從並行的SCSI總線替換為串行傳輸的FC通路。但是盤陣後端連接磁盤的接口還是SAS接口。
技術分享圖片

這樣單臺盤陣所能接入的磁盤容量沒有提升,但是前端的性能提升了,因為使用FC協議,可以更為的高速。

好處

引入FC之後,帶來的好處為

  • 如果一個盤陣只有一個FC接口,那麽我們完全可以使用FC交換機來擴充端口。而且采用了這樣的包交換架構,可以實現多個節點向一個節點收發數據,傳輸效率大大提升。

技術分享圖片

這樣就實現了多臺主機共享一個盤陣,提升了盤陣的利用率。

  • 而且因為可以使用光纖,所以傳輸距離加長了。

  • FC協議功能更為豐富,可以為每臺主機劃分不同的LUN,保證了安全性。
    既然所有的主機都掛在了盤陣上,怎麽保證每臺主機能獨享一塊LUN呢?可以從FC交換機,磁盤陣列控制器入手。
    • 在磁盤控制器上做手腳:

    在SCSI協議中有這樣一個過程,此時Initiator想要與Target要進行通信,Initiator需要發一條Report LUN指令給Target,Target端在收到這條指令以後,需要返回自己的LUN信息。那麽磁盤控制器可以 LUN的時候,根據發起端的身份,提供相應的LUN給它。如果強行訪問其他的LUN,就會拒絕。這種方法就叫LUN masking

    總的來說,可以把LUN當做蛋糕,磁盤控制器就是主人,他可以調查每個主機的身份,根據不同的身份來分配蛋糕。

    註意,這是SCSI指令集的功能,只要承載了SCSI指令集的協議就可以實現這個功能。

    • 在FC交換機上做手腳:
      我們知道以太網交換機可以劃分VLAN,也就是可以把某幾個端口劃分到一個邏輯上的LAN中。同樣FC交換機也可以實現類似的功能,不過名字叫ZONE
      ZONE有軟ZONE和硬ZONE之分。
      • 軟ZONE:在名稱服務器上做手腳,欺騙進行名稱註冊的節點,向他們通告其他節點信息。

      • 硬ZONE:把交換機某端口歸為一個ZONE,底層完全隔離。如下

技術分享圖片

多路徑訪問目標

如果盤陣有兩個控制器,每個主機上都有兩塊FC適配卡,它們都連接到了FC交換機。

這樣會存在一個問題,因為主機有兩塊HBA卡,而每塊HBA可以識別兩塊LUN,所以整個主機會識別出4塊磁盤,這就有問題了,因為這樣磁盤就有重復了,造成了混亂。

技術分享圖片

那麽你可能會說,為啥要兩塊FC HBA卡呢?因為一塊HBA有單點故障,如果使用兩塊HBA卡,一旦一塊HBA卡出現了故障,另一塊卡依然可以維持主機到盤陣的通路。

那多路徑的問題怎麽解決:可以在操作系統中安裝多路徑軟件,它可以識別FC提交上來的LUN,向操作系統提交單份LUN。這個軟件還有個作用,如果某個控制器發生故障,通過這個軟件立即重定向到另一個控制器。
技術分享圖片

【大話存儲】學習筆記(7,8章),FC協議