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