多路徑能使操作系統正確的識別到物理LUN,具體的做法就是生成一個特別的設備文件,操作系統操作這個特殊的設備文件來實現對LUN的控制。告訴操作系統該怎么使用這個設備。也就是說,多路徑管理軟件從driver和設備文件著手,告訴了操作系統怎么來處理這些身份復雜的LUN。 上篇“存儲基礎和FC SAN存儲介紹”重點介紹FC存儲技術。今天,簡單給小伙伴普及下Linux系統Multipath多路徑軟件和多路徑常見的ALUA相關知識和技術(附原理解讀PDF)。
什么是ALUA多路徑機制
ALUA是異步邏輯單元訪問(Asymmetric Logical Unit Access)的縮寫,ALUA是SPC3 (SCSI Primary commands-3)協議中規定的目標器端口組TPGS (Target Port Group Support)訪問模型中的一類子集,可用于處理A/A-A (Active/ Active-Asymmetric)和A/P(Active /Passive)陣列的多端口訪問管理。所以通常情況下,ALUA被認為是一種多路徑訪問模型。但實際上ALUA需要多路徑和存儲陣列同時支持才能實現路徑優化訪問,它更是前端控制器多路徑機制。
存儲前端控制器多路徑機制在一定程度上決定存儲的讀寫性能和可靠性,現有的前端控制器多路徑機制大致可分為A/A-S(Active/Acivie-Symmetric)、ALUA和A/P(Active/Passive)三大類。
先說說A/A-S(Active/Acivie-Symmetric)機制,對于特定的LUN來說,在它的路徑中,多個存儲控制器的目標端口均處于主動/優化(Active/optimized)狀態。多個控制器之間通過PCIe或Infiniband等實現高速互聯的通訊,從主機側發送一個IO到控制器端后,多個控制器可同時參與IO處理;存儲系統會自動負載均衡,當一個控制器繁忙或業務壓力較大時,存儲系統不需要主機端多路徑負載均衡軟件參與就可以自動實現負載均衡。
對于ALUA(Active/Active-Asymmetric)機制來說,特定的LUN在控制器的路徑組中,只有一個控制器的目標端口組處于主動/優化(Active/Optimized)狀態,其他控制器的目標端口組處于主動/非優化(Active/Unoptimized)狀態。某個時刻一個特定LUN只屬于某一個優選控制器,在多路徑的配合下,IO從優選控制的IO組(Active/Optimized)下發IO,多路徑不會發送該LUN的IO到其他控制器,一般通過將LUN A歸屬控制器A,將LUNB歸屬給控制器B實現兩邊的負載均衡,歸屬操作可以手動或自動完成。
還有一種是A/P(Active/Passive)機制,一般只用在低端雙活存儲陣列中。現在這種架構已經很少見了。對于特定的LUN來說,在對應存儲的路徑中只有一個控制器的目標端口處于主動/優化(Active/Optimized)狀態,其他控制器的目標端口處于備用或平時不工作狀態,其負載均衡處理方式與ALUA類似(即根據優選控制器來決定),但是由于多路徑和存儲互不相識(多路徑不知道那些路徑是優選路徑),IO很難選到合適的路徑,IO的下發可以說這完全取決于上層多路徑的心情,解決方案是提供自研多路徑來配合陣列選路,通過私有協議實現IO到優選路徑的匹配。
ALUA在雙活中如何應用
前面在雙活解決方案系列中,不知一次提到基于多路徑ALUA實現IO優選路徑下發,從而避免IO在主備數據中心來回轉發帶來的IO時延問題。多路徑主要有以下幾個功能。
1、通過路徑管理把SCSI上報的物理路徑管理起來,對主機呈現一個虛擬的路徑(SCSI設備),這樣可以防止主機在讀寫設備時帶來的數據不一致問題。
2、基于IO策略選擇物理路徑,實現IO業務負載均衡和業務分擔。
3、當主路徑發生故障時,可以對IO進行透明的主從切換(FailOver),當路徑恢復后自動進行回切(FailBack)。
這些特性主要是針對一個Volume或LUN而言的,那么在一套存儲系統中,如何識別多個路徑上報的設備是同一個LUN呢?答案其實很簡單,只需要LUN在上報時采用同樣的WWN或LUN ID多路徑就會認為這些不同路徑上報的LUN是同一個設備。
在雙活的兩個存儲系統中,通過在陣列側把不同陣列LUN(雙活Pair)的WWN或LUN ID設置成一樣,配合可靠的冗余交叉組網上報設備時,在主機上就會把兩個存儲系統的LUN識別為是同一個LUN,在主機IO下發時,如果多路徑支持ALUA模式 ,那就可以把本地存儲路徑設置成Active/optimized,把對端存儲路徑設置成Active/unoptimized來實現IO和性能優化。
ALUA的路徑狀態和相關概念
Active/ optimized、Active/ unoptimized、Standby和Unavailable是目標端口的四種訪問狀態,在相應訪問狀態下,陣列控制器只能回應相應的命令標準(命令標準由ISO/IEC SPC-3制定),這就決定了在某一時刻是否可以通過某個目標端口訪問邏輯單元。
ALUA是一種多路徑模式,包括顯式ALUA(Explicit ALUA或EALUA)和隱式ALUA(Implicit ALUA或IALUA)兩種模式。
隱式ALUA支持查詢LUN的端口組不對稱訪問狀態;正常情況下,主機查詢LUN的端口組信息,識別控制器的優先級,從優先級最高(Active/Optimized)的控制器下發業務,當Active/Optimized鏈路故障后,主機選擇其他的鏈路下(Active/Unoptimized)發業務。
顯式ALUA支持查詢和設置LUN的端口組不對稱訪問狀態,當Active/Optimized鏈路斷開后,主機設置其他控制器的優先級為最優;主機從新的最優的控制器下發業務(通過LUN TresPass實現優選控制器切換)。在閱讀本文檔前,需要知道以下多路徑概念。
Active/Active(A/A):所有路徑上的IO具有相同的性能;同時也用來表示陣列架構。
Active/Active-Asymmetric(A/A-A):所有路徑都可以響應IO,但路徑之間存在性能差異;ALUA就是用來表征這種性能差異的SCSI協議標準,同時也用來表示陣列架構。
Active/Passive(A/P):只有主路徑可以響應IO,備路上不能響應IO;同時也用來表示陣列架構。
Path Failover:主機多路徑軟件將IO路徑從主路徑切換到備用路徑上。基本所有多路徑軟件都支持該項功能。
LUN Failover:LUN的工作控制器從歸屬控制器切換到非歸屬控制器(LUN Trespass)。支持顯式ALUA的多路徑軟件可以發起LUN Failover。
Path Failback:主機多路徑軟件將IO路徑從備用路徑切換回主路徑上。
ALUA技術支持現狀
下表列出主流OS原生多路徑對ALUA支持的情況,其中詳細描述了隱式ALUA(EALUA)和顯示ALUA(IALUA)的支持情況。
Solaris
Solaris 9/10的原生多路徑軟件STMS支持隱式ALUA方式,其中Solaris 9需要安裝StorEdge SAN Foundation支持ALUA;Solaris 10在Update3以后版本支持ALUA。Solaris主機通過ALUA方式連接陣列后,在相應配置文件中添加產品信息后,STMS會認為目標器陣列為A/A-A模式,則只會對Active/Optimized路徑下發IO,當Active/Optimized路徑不可訪問時,會通過A/N路徑下發IO。
HP UX
HP UX 11版本的原生多路徑NMP支持顯式ALUA。HP UX主機通過ALUA方式連接陣列時,不需要做任何特殊設置,NMP在標準查詢頁中發現TPGS支持后,會下發RTPG命令獲取路徑信息,生成虛擬設備。HP-UX NMP 多路徑生成的虛擬設備為持久設備文件,通過scsimgr命令管理多路徑屬性,其中可以通過將設備文件的“alua_enabled”屬性設置多路徑的ALUA功能。
NMP只支持向Active/Optimized路徑下發IO,當Active/Optimized路徑故障時,NMP會將Active/Unoptimized路徑切換為Active/ Optimized來進行LUN Failover以及Path Failover。但NMP在不具備LUN Failback功能。所以當故障路徑恢復后,需要在CLI模式下手工將工作控制器切換到歸屬控制器,保證LUN在控制器之間的負載均衡。
VMware ESX
ESX 4.X以后系統的原生多路徑NMP支顯式以及隱式ALUA。ESX主機通過ALUA方式連接陣列時,不需要做任何特殊設置,NMP在標準查詢頁中發現TPGS支持后,會下發RTPG命令獲取路徑信息。ESX/ESXi在VMkernel層使用可插入存儲架構(PSA)管理存儲多路徑,PSA采用一個開放式模塊框架協調多個多路徑插件(MPP)的同時操作。
ESX/ESXi默認情況下提供的VMkernel多路徑插件是VMware本機多路徑插件(NMP)。NMP 是管理子插件的可擴展模塊。NMP 子插件有兩種類型,即存儲陣列類型插件(SATP)和路徑選擇插件(PSP)。SATP和PSP可以是 VMware 提供的內置插件,也可以由第三方提供。ESX原生PSP提供固7定模式(FIX)、循環模式(RR)和最近使用(MRU)三種路徑選擇方式 。
Mac OS X
Mac OS X通常使用HBA卡自帶多路徑軟件,其中ATTO FC HBA卡是蘋果主機上最常用的FC HBA卡(兩者結合較為緊密)。ATTO MulitPath Director就是ATTO FC HBA卡提供的多路徑驅動,具備IO路徑切換和負載均衡功能。ATTO MulitPath Director同時支持IALUA和EALUA。
主機通過ALUA方式連接陣列時,不需要做任何特殊設置,MulitPath Director在標準查詢頁中發現TPGS支持后,會下發RTPG命令獲取路徑信息。MulitPath Director支持SCSI協議定義的四種狀態,其中Active/Optimized路徑作為優先路徑,Active/Unoptimized以及Standby路徑作為備選路徑,Unavailable狀態處理Disable狀態。當Active/Optimized路徑故障時,Active/ Unoptimized路徑會立即被置為Active狀態。
ALUA主要功能和能力
IO路徑選擇:在ALUA模式下,主機只會對A/O路徑下發IO,即對LUN工作控制器下發IO。只有當A/O路徑不存在時,IALUA的主機多路徑會對A/N路徑下發IO,陣列將IO重定向到LUN工作控制器。
內部錯誤處理:在某些錯誤場景下,單個LUN在單邊控制器不可訪問情況,這些內部錯誤可以轉化為ALUA端口組狀態,隱藏內部錯誤的差異,通過統一共用的接口暴露給主機。這樣做的好處在于,可確保錯誤不擴散,提高多路徑可靠性。
路徑故障和恢復:路徑故障包括光纖、HBA卡、交換機等故障,如果故障發生在LUN 的A/O路徑上,且沒有可用A/O路徑時, IALUA會通過A/N路徑下發IO,EALUA則將A/N路徑切換為A/O路徑。如果故障發生在A/N路徑上,IO行為不受影響。
故障路徑恢復后,對于EALAU方式的連接,需要在CLI模式下確認受影響的LUN的工作控制器和歸屬控制器是否一致,如果不一致,需要手工將工作控制器切換到歸屬控制器側,以確保LUN的負載均衡。
控制器故障和恢復:如果控制器發生故障時,陣列內部系統流程會自動將故障端LUN的工作控制器Failover到對端,同時會通過UA狀態知會主機路徑狀態變化。控制器故障恢復后,陣列內部系統流程會自動將受影響的LUN進行Failback。
簡單總結:陣列沒有開啟或實現ALUA之前,第三方多路徑無法知道陣列中LUN的工作控制器在哪邊,往往采用隨機的方式下發IO,這就造成部分IO需要向歸屬控制器轉發,影響IO性能(第三方多路徑可以選擇支持和不支持ALUA)。支持或實現ALUA后,通過Active/Optimized狀態標識LUN工作控制器,通過對Active /Optimized路徑下發IO,這樣就可以提升IO性能。
前面已經介紹過,ALUA是SCSI協議定義的標準多路徑接口,這可以使得存儲陣列在不提供自研多路徑的情況下,通過支持標準ALUA的第三方多路徑實現IO優化。
下載鏈接:
iSCSI存儲和存儲多路徑介紹存儲基礎和FC SAN存儲介紹
審核編輯:湯梓紅
-
存儲技術
+關注
關注
6文章
750瀏覽量
46138 -
操作系統
+關注
關注
37文章
7011瀏覽量
124649 -
Linux系統
+關注
關注
4文章
601瀏覽量
28137 -
SAN
+關注
關注
0文章
162瀏覽量
41597
原文標題:多路徑和iSCSI SAN存儲技術介紹
文章出處:【微信號:架構師技術聯盟,微信公眾號:架構師技術聯盟】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
無線Mesh網多路徑混合包的傳輸方法
Ad Hoc網絡多路徑需求路由及路徑熵選擇算法
超寬帶粒子群多路徑選擇算法
基于網絡編碼的無線傳感網多路徑傳輸方法
GPS動態變形測量中的多路徑效應特征

存儲網絡技術與應用--DAS/SAN/NAS
存儲主機連接和多路徑配置
基于視覺導航AGV的多路徑快速檢測算法

多路徑纏繞模型及其容錯路由機制
融合網絡的多路徑Bandit優化算法

如何使用iSCSI技術構建IP SAN網絡存儲系統的方法概述

多路徑解決方案介紹及優勢說明
【虹科方案】適用于多種操作系統的多路徑解決方案

評論