范長軍,胡志成,楊佳東
(中電海康集團(tuán)有限公司,杭州 310013)
基于ALUA的多路徑存儲系統(tǒng)①
范長軍,胡志成,楊佳東
(中電??导瘓F(tuán)有限公司,杭州 310013)
隨著網(wǎng)絡(luò)存儲技術(shù)的不斷深入發(fā)展與廣泛應(yīng)用,存儲多路徑技術(shù)成為信息系統(tǒng)容災(zāi)與故障恢復(fù)方案中的核心技術(shù)之一.在現(xiàn)有存儲多路徑技術(shù)的基礎(chǔ)上,提出了一種基于ALUA的多路徑存儲子系統(tǒng)總體框架,并重點(diǎn)在邏輯卷控制器屬主管理、ALUA屬性與路徑選擇策略配置和I/O重定向等模塊進(jìn)行了創(chuàng)新性的設(shè)計(jì)與實(shí)現(xiàn).經(jīng)過應(yīng)用測試,該系統(tǒng)很好地解決了存儲系統(tǒng)的路徑故障遷移和故障恢復(fù)問題,并智能地實(shí)現(xiàn)了路徑間I/O的負(fù)載均衡,極大地提高了性能和可靠性.
多路徑; ALUA 屬性; I/O 重定向; 負(fù)載均衡; 故障遷移; 故障恢復(fù)
隨著移動互聯(lián)網(wǎng)、社交網(wǎng)絡(luò)等新型IT技術(shù)的發(fā)展,可用數(shù)據(jù)總量呈幾何級增長,人類進(jìn)入大數(shù)據(jù)時代.大數(shù)據(jù)中蘊(yùn)含的知識是寶貴的社會財(cái)富,但其價值的體現(xiàn)依賴于對數(shù)據(jù)的可靠存儲和高效處理,這對存儲系統(tǒng)的可用性、可靠性和存取效率提出了新的挑戰(zhàn),為此,SAN (Storage area network)網(wǎng)絡(luò)存儲技術(shù)應(yīng)運(yùn)而生,并得到大力發(fā)展和廣泛應(yīng)用.
在SAN系統(tǒng)中,有兩個基本實(shí)體,發(fā)起端和目標(biāo)端.發(fā)起端主動發(fā)起I/O命令請求存儲資源,目標(biāo)端響應(yīng)存取命令.發(fā)起端可以是應(yīng)用服務(wù)器、個人PC機(jī)等各種有存儲需求的實(shí)體,目標(biāo)端主要是磁盤陣列、磁帶庫等存儲實(shí)體,兩端由光纖通過(網(wǎng)絡(luò)、FC等)交換機(jī)連接起來形成I/O路徑,構(gòu)成發(fā)起端與目標(biāo)端通信的橋梁.在I/O子系統(tǒng)中,單路徑I/O傳輸錯誤是導(dǎo)致系統(tǒng)單點(diǎn)失效的根源,它難以滿足現(xiàn)代存儲對系統(tǒng)可用性和可靠性的要求; 同時,在單路徑場景中,數(shù)據(jù)只能擁堵在一條I/O通道中傳輸,成為性能的瓶頸.為了提高性能和可靠性,在從主機(jī)到交換機(jī)到存儲控制器的鏈路中,一般采用冗余的部件,使對存儲設(shè)備的I/O操作可以在多條路徑上執(zhí)行,由此發(fā)展出I/O多路徑技術(shù),以期解決故障切換和負(fù)載均衡問題.
目前,國內(nèi)外都有多路徑技術(shù)的研究工作,主要集中在一些存儲廠商,如EMC、NetApp、HP、IBM等,一些大學(xué)、研究機(jī)構(gòu)也在參與[1].本文在現(xiàn)有存儲多路徑技術(shù)的基礎(chǔ)上設(shè)計(jì)和實(shí)現(xiàn)了一種基于ALUA的多路徑存儲子系統(tǒng),它支持I/O的故障遷移和負(fù)載均衡等功能,同時具備高性能、可靠性以及高擴(kuò)展性.
在現(xiàn)代網(wǎng)絡(luò)存儲環(huán)境中,為了提高存儲系統(tǒng)的可靠性,通常會使用冗余的物理組件(如適配器、電纜或交換機(jī)等)連接服務(wù)器主機(jī)與存儲設(shè)備,所以在主機(jī)系統(tǒng)到存儲陣列控制器間會存在多條物理鏈路(SAN存儲網(wǎng)絡(luò)多路徑連接示意圖如圖1所示).通過這些物理鏈路,存儲陣列上的塊設(shè)備被映射給主機(jī)系統(tǒng),在默認(rèn)情況下,主機(jī)系統(tǒng)將每條路徑映射的塊設(shè)備都認(rèn)作一個實(shí)際的物理盤,而本質(zhì)上它們只是通向同一個物理盤的不同路徑.主機(jī)端在對這一虛擬的塊設(shè)備進(jìn)行訪問時,可以在多個物理鏈路中選擇一個下發(fā)指令,即便出現(xiàn)其中一條路徑斷掉的單點(diǎn)故障,還有其它物理路徑可以保證主機(jī)業(yè)務(wù)的正常執(zhí)行,提升了存儲系統(tǒng)整體的可靠性.同時,多路徑軟件也可通過自動監(jiān)控和動態(tài)分流數(shù)據(jù)I/O,實(shí)現(xiàn)傳輸速率的提高.
圖1 SAN 存儲網(wǎng)絡(luò)多路徑連接示意圖
鑒于多路徑技術(shù)的諸多優(yōu)點(diǎn),各大存儲廠商如EMC、華為等也將其納入標(biāo)準(zhǔn)配置,對該技術(shù)的應(yīng)用和研究也一直比較熱門.目前多路徑技術(shù)研究主要集中在兩方面,一方面是主機(jī)端多路徑軟件的設(shè)計(jì)與實(shí)現(xiàn),如文獻(xiàn)[2,3]分別介紹了現(xiàn)有的各種主機(jī)端多路徑實(shí)現(xiàn)方法,文獻(xiàn)[4-7]分別在不同的層面,用不同的方式設(shè)計(jì)和實(shí)現(xiàn)了主機(jī)多路徑; 另一方面是多路徑軟件的特定應(yīng)用,如文獻(xiàn)[8]將不同模式的磁盤陣列與不同多路徑軟件搭配使用,文獻(xiàn)[9]將多路徑技術(shù)與虛擬化、集群等軟件配合使用,文獻(xiàn)[10-12]分別將多路徑應(yīng)用到電臺廣播和地震資料處理集群中.
這些多路徑方案在各自的領(lǐng)域針對不同應(yīng)用場景能夠很好的滿足需要,但是都存在各自的問題.首先,多路徑技術(shù)涉及諸多方面,包括主機(jī)系統(tǒng)和存儲系統(tǒng)等,它們相互配合共同實(shí)現(xiàn)相應(yīng)功能,而現(xiàn)有方案往往只著眼于主機(jī)端的多路徑軟件,沒有從整體上考量.其次,一部分方案是將現(xiàn)有的多路徑技術(shù)應(yīng)用到某一個特定的領(lǐng)域,并未對多路徑技術(shù)進(jìn)行升級和優(yōu)化.
為應(yīng)對上述問題,本文設(shè)計(jì)并實(shí)現(xiàn)了一整套的多路徑存儲子系統(tǒng),它具備如下特點(diǎn):
? 高性能,高度負(fù)載均衡和高聚合帶寬;
? 高擴(kuò)展性,支持鏈路、交換機(jī)和HBA卡等的擴(kuò)展;
? 高可靠性,鏈路冗余和路徑選擇策略避免了單點(diǎn)故障.
在多路徑典型應(yīng)用場景中,存儲陣列中的物理磁盤通過存儲控制器上運(yùn)行的RAID程序組成RAID組,再將RAID組中的存儲池劃分為存儲單元,稱為LUN(Logical unit number,又稱邏輯卷),存儲設(shè)備將 LUN提供給主機(jī)進(jìn)行I/O訪問.存儲控制器是多路徑I/O的目標(biāo)端,對于多路徑的故障切換和負(fù)載均衡起著至關(guān)重要的作用.存儲設(shè)備一般包含兩臺或更多的存儲控制器,以達(dá)到冗余配置,每臺存儲控制器又有多個存儲端口,以方便連接前端主機(jī)或存儲網(wǎng)絡(luò)交換機(jī),從而形成多條鏈路.當(dāng)采用多條鏈路時,多條傳輸路徑可同時傳輸數(shù)據(jù)塊,以解決單條鏈路的傳輸能力有限的問題.
本文提出的方案對存儲系統(tǒng)進(jìn)行多路徑組網(wǎng),實(shí)現(xiàn)下述一整套的流程.主機(jī)啟動時系統(tǒng)通過掃描,發(fā)現(xiàn)每條路徑上的塊設(shè)備,并記錄路徑狀態(tài)等相關(guān)信息.對于每個塊設(shè)備(LUN),主機(jī)端多路徑軟件下發(fā)命令,查詢它的所屬控制器,并將主機(jī)到其控制器屬主之間的路徑作為優(yōu)先選擇路徑,即主路徑.如果主機(jī)到其所屬控制器之間有多條路徑,I/O就會被多路徑軟件分?jǐn)偟礁鳁l路徑上,以期提高存儲系統(tǒng)的整體性能.如圖1所示,當(dāng)主路徑(如路徑1)由于控制器A宕機(jī)而失效后,存儲端自動將業(yè)務(wù)通過failover切換到控制器B,隨之主機(jī)端多路徑軟件將I/O切換到備用路徑(路徑3),避免因單點(diǎn)故障而造成業(yè)務(wù)中斷.當(dāng)控制器A的故障得以解除或修復(fù)后,存儲業(yè)務(wù)通過failback切換回控制器A,并由主機(jī)端多路徑將I/O從備用路徑切換回主路徑.
總體而言,多路徑技術(shù)涉及從主機(jī)到存儲陣列之間的各類實(shí)體.邏輯卷所屬控制器的設(shè)定會影響其在ALUA機(jī)制下目標(biāo)端口組的配置,此兩者與主機(jī)端路徑選擇策略相配合,共同實(shí)現(xiàn)多路徑功能.因此,多路徑存儲子系統(tǒng)的設(shè)計(jì)需要從系統(tǒng)論角度來考慮,由總到分、自頂向下地進(jìn)行,并充分考慮各個模塊之間的相互促進(jìn)與制約,在保證故障轉(zhuǎn)移功能的基礎(chǔ)上,盡最大努力實(shí)現(xiàn)負(fù)載均衡,從根本上改善系統(tǒng)I/O性能.
本文提出了一種新的基于ALUA的多路徑存儲子系統(tǒng)架構(gòu),包括系統(tǒng)管理模塊、ALUA屬性配置模塊、路徑選擇策略管理模塊和I/O重定向模塊等.系統(tǒng)管理模塊負(fù)責(zé)整個存儲陣列的存儲資源管理,其中與多路徑相關(guān)的是LUN的控制器屬主信息,它是實(shí)現(xiàn)不同I/O路徑優(yōu)先級的關(guān)鍵因素; ALUA屬性配置模塊就是據(jù)此來設(shè)置其對應(yīng)的目標(biāo)端口和目標(biāo)端口組的,它與路徑選擇策略管理模塊一起為I/O規(guī)劃下發(fā)路徑,以保證不同I/O路徑間的負(fù)載均衡和單條路徑I/O性能的最優(yōu)化; 當(dāng)進(jìn)行了上述的設(shè)定之后,I/O只能通過主存儲控制器下盤,分發(fā)到冗余存儲控制器的I/O需要重定向模塊將其轉(zhuǎn)發(fā)給所屬控制器.具體的多路徑存儲子系統(tǒng)架構(gòu)如圖2所示.
具體而言,在系統(tǒng)管理模塊,本文提出了一種邏輯卷控制器屬主的自動分配和智能均衡方法,通過收集各存儲控制器上的I/O信息來動態(tài)分配LUN到各存儲控制器上; 其次,在底層存儲中,基于ALUA機(jī)制提出了一種LUN目標(biāo)端口和目標(biāo)端口組的配置方式,根據(jù)LUN的控制器屬主信息,來規(guī)劃路徑的優(yōu)先級; 再次,在底層存儲中,開發(fā)了I/O重定向模塊,在I/O從非所屬控制器下發(fā)時,通過內(nèi)部端口將I/O轉(zhuǎn)發(fā)到所屬控制器; 最后,在路徑選擇策略管理模塊中,根據(jù)底層存儲ALUA屬性的配置,設(shè)置了相應(yīng)的路徑管理策略,并開發(fā)了新的路徑選擇算法.通過對上述方案的設(shè)計(jì)與開發(fā),更好地實(shí)現(xiàn)了I/O路徑的故障轉(zhuǎn)移和負(fù)載均衡功能.
在多控制器存儲陣列中,主機(jī)在訪問存儲設(shè)備邏輯單元(LUN)時,由于LUN存在控制器屬主的概念,下發(fā)給不同LUN的I/O將選擇不同的路徑,這會造成各控制器I/O負(fù)載和性能的不同.為了充分利用存儲資源,提高性能和可靠性,實(shí)現(xiàn)故障切換和負(fù)載均衡,需要一種有效的配置方案.
目前,多控制器存儲陣列的LUN屬主和多路徑配置方案多種多樣,各廠商都有自己的多路徑軟件和LUN屬主配置子系統(tǒng),種類繁多、配置復(fù)雜,并且存在以下問題:傳統(tǒng)的LUN控制器屬主的配置都是通過系統(tǒng)管理界面人為手動操作的,由于難于全面掌握各控制器的狀態(tài)信息,管理員很難有效地進(jìn)行所屬控制器的劃分.這有可能導(dǎo)致I/O在一臺控制器上擁堵或饑餓的極端情況,極大地?fù)p耗了性能,對可用性也造成了一定的影響.
為解決上述問題,本文提出了一種多控制器存儲設(shè)備邏輯卷屬主管理方法.在雙控制器場景下,創(chuàng)建LUN之前,首先收集各控制器的I/O統(tǒng)計(jì)信息,并根據(jù)設(shè)定的算法決定相應(yīng)的控制器屬主,然后據(jù)此通過ALUA進(jìn)行存儲端口和端口組的配置,為LUN提供路徑訪問的優(yōu)先級機(jī)制.最后,當(dāng)新創(chuàng)建的 LUN 投入使用后,反饋并更新各控制器的I/O統(tǒng)計(jì)信息.具體參看圖3.
圖3 LUN 控制器屬主管理流程
具體而言,首先采集各個控制器的基本I/O信息,包括帶寬、IOPS等; 然后通過一定的統(tǒng)計(jì)方法計(jì)算求取均值、方差和積分等性能表征參數(shù); 接著,將給定的決策因子與表征向量進(jìn)行加權(quán)平均計(jì)算,得到每個控制器的決策指數(shù); 最后,選取指數(shù)較大的控制器為新建卷的控制器屬主.
根據(jù)存儲的特性,選取各個控制器的帶寬、IOPS、LUN數(shù)目、LUN總?cè)萘?、總I/O error率、故障率、I/O突發(fā)率、總I/O量、I/O集中度、吞吐量等來作為性能指標(biāo),計(jì)算并表示其性能表征參數(shù)為 X={x1,…,xi,…,xn}.為了消除數(shù)值量綱不同造成的影響,將數(shù)據(jù)進(jìn)行歸一化處理.Xi與Yi分別表示雙端控制器各自的第i個參數(shù).
權(quán)重系數(shù)?={ω1,…,ωi,…,ωn}可由管理員根據(jù)應(yīng)用場景的不同而設(shè)置不同的值,以決定主要的影響因素.例如,兩個控制器的 LUN 的總帶寬均值相同,但是其方差有較大差別,而且一邊的I/O突發(fā)率明顯高于對端,如果新建的LUN主要應(yīng)用于平滑的I/O順序讀寫,則應(yīng)該將I/O突發(fā)率和方差對應(yīng)項(xiàng)的權(quán)重系數(shù)提高.
進(jìn)一步地,當(dāng)配置信息的數(shù)據(jù)積累到一定程度時,可以用線性回歸的方法來學(xué)習(xí)得到?jīng)Q策因子,自適應(yīng)地得到各項(xiàng)參數(shù),增加子系統(tǒng)的智能性和自動化程度.
兩個控制器通過加權(quán)求和公式(如公式(1)所示)得到一個決策指數(shù),比較兩個決策指數(shù),數(shù)值較大的控制器為新建邏輯卷的所屬控制器.
分配好新建LUN的控制器屬主后,接下來在安裝了LIO(Linux-IO target)模塊的存儲端控制器上進(jìn)行端口組的劃分和ALUA的配置.
ALUA(Asymmetric logical unit access)的全稱是非對稱邏輯單元訪問,是SPC-4協(xié)議的一個重要組成部分,主要應(yīng)用于某個存儲資源(LUN)具備多條訪問路徑的環(huán)境下.在本文,I/O性能在LUN所屬控制器對應(yīng)的路徑上會更好,不同路徑具備不同的訪問特性,使用ALUA來規(guī)定路徑訪問的優(yōu)先級,確保在正常情況下讀寫指令都是通過最優(yōu)路徑進(jìn)行下發(fā),以此達(dá)到最優(yōu)的訪問體驗(yàn),并通過目標(biāo)端口組TPG(Target port group)來對這些路徑進(jìn)行分類管理.
一個目標(biāo)端口組TPG包括若干目標(biāo)端口,同一個TPG中的目標(biāo)端口在訪問邏輯單元LUN的時候具有相同的屬性.主機(jī)可以通過SCSI命令來獲取某一個LUN對應(yīng)的TPG及其相關(guān)屬性,并通過這些信息來組織訪問LUN的路徑.
ALUA有4種訪問模式,這些工作模式是在主機(jī)下發(fā)inquiry指令時,存儲端上報(bào)給主機(jī)的,主要目的是告訴主機(jī),存儲處于哪個工作模式上.具體的描述如表1所示.
表1 SCSI命令中的 TPGS 域
ALUA的訪問狀態(tài)有4種,這些狀態(tài)是通過響應(yīng)主機(jī)下發(fā)的 SCSI指令 REPORT TARGET PORT GROUPS上報(bào)給主機(jī)的,對應(yīng)的位是“ASYMMETRIC ACCESS STATE”.
SPC-4(SCSI Primary Command-4)對存儲端口劃分為四種狀態(tài):
1)主動優(yōu)化 (Active/optimized):目標(biāo)端口能立即訪問LUN.
2)主動非優(yōu)化 (Active/un-optimized):僅能響應(yīng)相應(yīng)的命令,可轉(zhuǎn)化為Active/optimized狀態(tài).
3)備用 (Standby):僅能響應(yīng)相應(yīng)的命令,可轉(zhuǎn)化為Active/optimized狀態(tài).
4)不可用(Unavailable):僅能響應(yīng)受限的命令集,不可轉(zhuǎn)化為其它狀態(tài).
設(shè)定端口為某一訪問狀態(tài),相應(yīng)的存儲控制器就僅能響應(yīng)對應(yīng)的命令集,限定了目標(biāo)端口訪問LUN的權(quán)限.對于雙控制器存儲陣列,根據(jù)端口狀態(tài)的劃分,可以有三種不同的多路徑訪問方式:A/A(Symmetric Active/Active,對稱雙活),A/P (Active/Passive,主備模式)和 ALUA(Asymmetric Active/Active,非對稱雙活).為了性能和實(shí)現(xiàn)的簡易型,本文選擇ALUA.
為了有效地約束I/O下發(fā)路徑,防止I/O在一臺控制器上擁堵或饑餓,結(jié)合上述的LUN控制器屬主的設(shè)計(jì),本文利用LIO提供的ALUA機(jī)制來配置目標(biāo)端口和目標(biāo)端口組.
為進(jìn)行端口組屬性的配置,開發(fā)了相應(yīng)的系統(tǒng)接口,將目標(biāo)端口按照所屬控制器進(jìn)行分組,為LUN控制器屬主的目標(biāo)端口組提供更高的路徑優(yōu)先級,從而提高I/O效率和可用性.
具體而言,對于特定的LUN,將目標(biāo)端口按照所屬控制器進(jìn)行分組,劃分到不同的目標(biāo)端口組TPG中.將所屬控制器的所有目標(biāo)端口設(shè)為Active/optimized狀態(tài),形成一個目標(biāo)端口組,將備控制器的所有目標(biāo)端口設(shè)為Active/un-optimized狀態(tài),形成另一個目標(biāo)端口組.當(dāng)有I/O讀寫請求時,主備控制器都可以接受對LUN的訪問,但流經(jīng)備控制器的I/O,會被重定向模塊轉(zhuǎn)發(fā)到主控制器,最終I/O只能通過主控制器下盤.
此外,由于所屬控制器端路徑和非所屬控制器端路徑的性能不同,當(dāng)一端控制器因故宕機(jī),其上的LUN故障遷移(也即failover)到對端控制器時,I/O切換到非優(yōu)化的路徑下發(fā),性能隨之下降.為了解決此問題,將對應(yīng)TPG的type屬性設(shè)置為both(Implicit and Explicit),其中的Explicit ALUA屬性賦予主機(jī)端更改備端控制器對應(yīng)端口組存取狀態(tài)的權(quán)限,以實(shí)現(xiàn)多路徑軟件對存儲端TPG屬性的修改,達(dá)到提升路徑優(yōu)先級的目的.
3.3.1 路徑組織策略
針對網(wǎng)絡(luò)存儲,各大廠商都有自己的多路徑實(shí)現(xiàn)方法,為了提高響應(yīng)速度和總體性能,需要在主機(jī)端開發(fā)相應(yīng)的多路徑軟件來組織I/O路徑和進(jìn)行I/O路徑的選擇.但是由于主機(jī)系統(tǒng)的種類繁多,針對不同類型的操作系統(tǒng)都需要開發(fā)一套多路徑軟件,這極大地增大了維護(hù)成本,降低了擴(kuò)展性.本文充分利用各大系統(tǒng)平臺提供的原生多路徑軟件,通過其提供的通用框架來設(shè)計(jì)路徑組織和選擇策略.
在各類主機(jī)多路徑軟件中,路徑組把具有相同特征的路徑組織在一起,以便于管理I/O路徑.在某一瞬時只有一個路徑組處在活躍狀態(tài),在路徑切換時只能從當(dāng)前活躍的路徑組里選擇最優(yōu)的路徑.不同的主機(jī)系統(tǒng)平臺內(nèi)嵌的多路徑軟件的組織策略各不相同,但都實(shí)現(xiàn)了常用的模式.在應(yīng)用服務(wù)器領(lǐng)域,Linux類型系統(tǒng)的主機(jī)占有絕對優(yōu)勢,下面以Linux主機(jī)為例.
Linux系統(tǒng)主機(jī)自帶的多路徑框架DM-Multipath的組織策略分為五種:
1)multibus策略,同一個路徑組包含一個塊設(shè)備對應(yīng)的所有路徑.
2)failover策略,一個路徑組只含一條路徑.
3)group_by_serial策略,同一個路徑組內(nèi)只含序列號相同的路徑.
4)group_by_prio 策略,同一路徑組內(nèi)只含優(yōu)先級相同的路徑.
5)group_by_node 策略,同一路徑組內(nèi)只含節(jié)點(diǎn)名相同的路徑.
為了負(fù)載均衡的目的,本文選擇group_by_serial模式來配合存儲端ALUA屬性的配置,這樣I/O的切換被限定在同一控制器的路徑組內(nèi),只有在進(jìn)行failover故障遷移時,才在不同的控制器間切換,實(shí)現(xiàn)了對I/O路徑的管控.
3.3.2 路徑選擇
在主機(jī)下發(fā)讀寫指令時,先根據(jù)優(yōu)先級從多個路徑組中選一個,然后在這個路徑組里根據(jù)設(shè)定的路徑選擇算法進(jìn)行選擇.DM-Multipath內(nèi)置的路徑選擇算法有三種,分別是 Round-robin(輪詢算法)、Queue-length(排隊(duì)深度算法)以及Service-time(服務(wù)時間算法).
輪詢算法通過雙向循環(huán)鏈表來組織所有路徑,當(dāng)選擇新路徑時,會順次選取下一個節(jié)點(diǎn)對應(yīng)的路徑返回.觸發(fā)路徑切換的條件是,每條路徑固定分發(fā)一定次數(shù)的I/O,當(dāng)前路徑發(fā)完規(guī)定次數(shù)的I/O后,就會自動切換到下一條路徑.但是,該算法沒有考慮到路徑處理能力、響應(yīng)時間等的不同.
隊(duì)列深度算法參考每條路徑上的I/O負(fù)載,通過動態(tài)記錄每條路徑上排隊(duì)等待處理的I/O數(shù)量來衡量路徑的優(yōu)劣.具體而言,當(dāng)有I/O分發(fā)到某條路徑上時,對應(yīng)的隊(duì)列深度就增加; 當(dāng)隊(duì)列中的I/O下發(fā)到底層驅(qū)動上時,隊(duì)列深度就減少.同上,此算法也沒有考慮不同路徑物理特性的不同.
服務(wù)時間算法預(yù)估I/O請求發(fā)送到每條路徑后進(jìn)行處理所需要的周轉(zhuǎn)時間,服務(wù)時間最短的那條路徑為最優(yōu)路徑.具體而言,將路徑上總的排隊(duì)I/O塊大小除以此路徑的吞吐量即可得到服務(wù)時間.
為了更好地在路徑間均衡I/O負(fù)載,本文提出并實(shí)現(xiàn)了一種新的路徑選擇算法——hikdata-selector算法.在選擇一條路徑時,不僅僅單一地參考響應(yīng)時間、相對吞吐量、排隊(duì)I/O塊大小和重復(fù)次數(shù)等,而是將它們綜合起來考慮.
在選取一條路徑時,先考慮路徑的響應(yīng)速度,選擇響應(yīng)時間短的路徑作為最優(yōu)路徑; 當(dāng)兩條路徑的響應(yīng)時間一樣時,再計(jì)算相對服務(wù)時間,優(yōu)選耗時少的路徑;如仍無法確定,還可繼續(xù)參考路徑的相對吞吐量; 當(dāng)相關(guān)指標(biāo)都相同時,可隨機(jī)選一條路徑返回.具體流程可參看圖4所示.
圖4 hikdata 路徑比較算法
路徑由雙向循環(huán)鏈表組織起來,選擇的具體流程是:首先,從備選路徑鏈表里選取前兩條路徑,并根據(jù)上述算法進(jìn)行比較,得到當(dāng)前最優(yōu)路徑; 隨后再從路徑鏈表里取出下一條路徑,與當(dāng)前最優(yōu)路徑進(jìn)行比較,選出較好的一條來更新當(dāng)前最優(yōu)路徑,循環(huán)往復(fù),直到整條鏈表全部判斷完畢,選出的就是最佳路徑.總體流程如圖5所示.
圖5 hikdata 路徑選擇流程
根據(jù)上文的設(shè)定,多路徑軟件優(yōu)選主控制器端路徑,備控制器端路徑閑置.當(dāng)出現(xiàn)主存儲控制器(如:A控)的網(wǎng)卡損壞或者網(wǎng)絡(luò)環(huán)境異常等故障時,主機(jī)系統(tǒng)與主控之間的路徑斷開,主機(jī)多路徑軟件會將I/O切換到備控(如B控)的路徑下發(fā)指令,由于主控沒有因故障宕機(jī),所以不會執(zhí)行failover操作,備控中相應(yīng)的塊設(shè)備仍然是只讀的,從主機(jī)端下發(fā)到備控的讀寫指令將無法在備控下盤.為了保證業(yè)務(wù)不中斷,需要將備控接收到的I/O通過內(nèi)部端口重定向到主控,才能保證整個I/O過程的完整.為此,基于LIO開發(fā)了I/O重定向模塊,其整體架構(gòu)如圖6所示.
圖6 I/O 重定向模塊系統(tǒng)架構(gòu)
整個I/O重定向可以分為初始化模塊和轉(zhuǎn)發(fā)模塊.初始化模塊主要負(fù)責(zé)初始化I/O重定向所需的全局變量,分配全局空間,并創(chuàng)建轉(zhuǎn)發(fā)線程.轉(zhuǎn)發(fā)模塊由發(fā)送子模塊和接收子模塊組成.發(fā)送子模塊負(fù)責(zé)接收本端iSCSI命令數(shù)據(jù),在需要轉(zhuǎn)發(fā)的情況下,將命令數(shù)據(jù)通過PCIe非透明橋(NT)驅(qū)動的發(fā)送接口發(fā)送到對端,接收子模塊負(fù)責(zé)接收對端發(fā)送來的命令數(shù)據(jù),并在本端執(zhí)行I/O指令,再將執(zhí)行結(jié)果通過NT接口發(fā)送回對端,對端發(fā)送子模塊將結(jié)果返回給上層,完成一次完整的I/O重定向過程.
在本文,在LIO子系統(tǒng)中實(shí)現(xiàn)I/O重定向,減少了對存儲端Linux存儲協(xié)議棧的改動,降低了實(shí)現(xiàn)難度,也降低了I/O重定向?qū)τ谡麄€系統(tǒng)帶來不穩(wěn)定的風(fēng)險(xiǎn).現(xiàn)有的I/O重定向,如iSCSI重定向只能適用于前端是iSCSI協(xié)議的場景,擴(kuò)展性較差.LIO支持將塊設(shè)備通過多種協(xié)議(如FC、InfiniBand等)映射到主機(jī)端,通過本方法實(shí)現(xiàn)的I/O重定向,可以有效兼容前端不同的網(wǎng)絡(luò)存儲協(xié)議,提高適用性.另外,本I/O重定向模塊通過調(diào)用NT驅(qū)動接口實(shí)現(xiàn)與對端控制器之間的數(shù)據(jù)收發(fā),速度更快,更可靠.
根據(jù)本文提出的多路徑存儲子系統(tǒng)模型,采用自主研發(fā)的雙控制器存儲陣列平臺搭建了多路徑存儲子系統(tǒng)運(yùn)行環(huán)境.針對多路徑技術(shù)主要實(shí)現(xiàn)故障轉(zhuǎn)移和負(fù)載均衡功能,設(shè)計(jì)了兩種組網(wǎng)方式來進(jìn)行測試,并選擇存儲業(yè)界廣泛使用的IOMeter作為I/O測試工具.測試硬件由兩臺應(yīng)用服務(wù)器、一臺雙控制器存儲陣列和兩臺萬兆交換機(jī)組成,如圖7所示.
組網(wǎng)一僅包括7條路徑(P1-P7),如圖7所示,主機(jī)1訪問LUN2時,路徑有P1-P3-P6和P1-P4-P5-P6可選,而且兩路徑的I/O在存儲后端全由控制器A處理.
首先,測試 I/O 路徑切換.經(jīng)實(shí)測,在上述場景下,I/O指令優(yōu)選P1-P3-P6路徑下發(fā).通過拔掉網(wǎng)線的方法來模擬P3出現(xiàn)故障的場景,此時路徑重定向?yàn)镻1-P4-P5-P6,但存儲設(shè)備并沒有執(zhí)行 LUN failover.將P3線路插回,再模擬P6出現(xiàn)故障的場景,此時存儲業(yè)務(wù)轉(zhuǎn)由控制器B處理,I/O重定向到P1-P3-P5-P7路徑,但是沒有立即執(zhí)行LUN failover.過了一段時間,通過控制器B處理的I/O累計(jì)到了設(shè)定的量級時,才執(zhí)行了 LUN failover.上述實(shí)驗(yàn)充分說明了,此多路徑子系統(tǒng)能夠有效地實(shí)現(xiàn)故障切換功能.
接下來,啟動目標(biāo)端,設(shè)置 LUN1、LUN3 為遠(yuǎn)程訪問盤,并將其分別通過HBA1、HBA2的兩個萬兆網(wǎng)口映射出去.針對主機(jī)1與主機(jī)2,分別啟動iSCSI發(fā)起端連接到目標(biāo)端.主機(jī)1登入LUN1,主機(jī)2登入LUN3,如此每個主機(jī)可得到兩個相同的遠(yuǎn)程盤,經(jīng)測試,I/O指令優(yōu)先通過所屬控制器對應(yīng)的路徑下發(fā).
隨后,先通過發(fā)起端測試單鏈路的性能和系統(tǒng)負(fù)載,再加載多路徑模塊,對多路讀寫性能和系統(tǒng)負(fù)載進(jìn)行測試.相應(yīng)的測試數(shù)據(jù)如圖8所示.其中多路單鏈路是指通過多路徑模塊訪問時,只使用一條有效鏈路傳輸.雙鏈路是指通過多路徑模塊訪問時,采用hikdataselector的負(fù)載平衡算法,兩條鏈路并行傳輸.單鏈路是指不通過多路徑模塊而進(jìn)行單一鏈路的訪問.從圖8中可以看出,三者之中雙鏈路的讀寫性能最好.
圖7 測試場景示意圖
最后,針對本文提出的方案,在組網(wǎng)二(包括圖7所有路徑)上進(jìn)行如下測試:在雙控存儲陣列上規(guī)劃創(chuàng)建 20 個卷,分別模擬不同的用途,比如,郵件服務(wù)器存儲、數(shù)據(jù)庫存儲、視頻流存儲、FTP存儲等,分別對應(yīng)小文件隨機(jī)讀寫、均勻順序讀寫、突發(fā)大文件讀寫等,通過提出的LUN控制器屬主管理方法將其分配到不同的控制器上,并每二十秒測試一次存儲端網(wǎng)絡(luò)HBA卡的吞吐量,持續(xù)3個小時,然后求取這些測試值的均值和變異系數(shù)(CV).在對照組中,按照傳統(tǒng)做法隨機(jī)分配LUN的所屬控制器,并采用經(jīng)驗(yàn)證效果較好的Service-time選路算法.
將上述流程中不同用途的卷的創(chuàng)建順序打亂,重新分配所屬控制器,進(jìn)行下一次測試.循環(huán)往復(fù)測試6次,測試結(jié)果如表2所示.從測試數(shù)據(jù)的對比,可以看出本文提出的方案在四塊HBA卡的速率基本一致,較好地實(shí)現(xiàn)了負(fù)載均衡的要求,并比對照組有更好的性能.
圖8 多路徑 I/O 性能測試結(jié)果
表2 多路徑 I/O 吞吐量測試結(jié)果
在網(wǎng)絡(luò)存儲系統(tǒng)中,在主機(jī)與存儲系統(tǒng)之間利用多路徑技術(shù)進(jìn)行容災(zāi)已成為常例,既能保證數(shù)據(jù)業(yè)務(wù)不因故障而中斷,又可提升系統(tǒng)總體I/O傳輸效率和吞吐量.為此,該技術(shù)得到了業(yè)界的普遍重視,對它的研究和應(yīng)用越來越廣泛.但是目前多路徑技術(shù)方面的研究工作大都局限于主機(jī)端多路徑軟件的設(shè)計(jì)開發(fā)或特定領(lǐng)域的應(yīng)用,沒有從系統(tǒng)的角度進(jìn)行考量.
本文提出了一種基于ALUA的多路徑存儲子系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方案,提出了新的多路徑存儲子系統(tǒng)的體系架構(gòu),并分別在LUN控制器屬主管理、ALUA屬性與路徑選擇策略配置和I/O重定向等模塊進(jìn)行了創(chuàng)新性的設(shè)計(jì)與實(shí)現(xiàn).通過應(yīng)用效果分析,本方案能夠很好地保證系統(tǒng)的高可用性,在系統(tǒng)容災(zāi)、故障轉(zhuǎn)移及I/O分流等方面具有較好的應(yīng)用效果,并且有效地進(jìn)行了I/O的負(fù)載均衡,優(yōu)化了I/O子系統(tǒng)的整體性能.
1和軍.基于Windows I/O多路徑的網(wǎng)絡(luò)存儲容災(zāi)技術(shù)分析與實(shí)現(xiàn)[碩士學(xué)位論文].成都:電子科技大學(xué),2009.
3焦繁.論軟件SAN存儲多路徑的實(shí)現(xiàn)方法.中國報(bào)業(yè),2012,(24):30–32.
4郭曉金,王超.一種新的Linux主機(jī)冗余存儲路徑設(shè)計(jì)與實(shí)現(xiàn).電視技術(shù),2012,36(3):70–73.
5胡耀義.一種多路徑環(huán)境下的智能選路算法設(shè)計(jì)與實(shí)現(xiàn).鐵路計(jì)算機(jī)應(yīng)用,2016,25(10):13–15,20.[doi:10.3969/j.issn.1005-8451.2016.10.004]
6蔡斌,謝長生,任勁.SCSI子系統(tǒng)中間層多啟動互連多路徑I/O的存儲方式的研究.小型微型計(jì)算機(jī)系統(tǒng),2005,26(8):1420–1426.
7闞闖,戚瑋瑋.一種新結(jié)構(gòu)的DM-multipath與動態(tài)負(fù)載平衡.計(jì)算機(jī)應(yīng)用,2008,28(2):289–291.
8王超.多路徑軟件與不同模式磁盤陣列搭配使用方法研究.電光系統(tǒng),2011,(4):45–49.
9胡耀義,陶宏才.一種基于Hyper-V和WSFC集群的主機(jī)多路徑網(wǎng)絡(luò)存儲架構(gòu)方案.鐵路計(jì)算機(jī)應(yīng)用,2012,21(6):80–82.
10王炎.多路徑I/O技術(shù)在電視臺SAN存儲網(wǎng)絡(luò)中的應(yīng)用探討.廣播與電視技術(shù),2013,(3):86,88,90,92–93.
11金弟,莊錫進(jìn),曹曉初,等.基于多路徑地震資料處理集群存儲系統(tǒng).計(jì)算機(jī)研究與發(fā)展,2012,49(增刊):42–46.
12金弟,莊錫進(jìn),王啟迪,等.存儲框架模型在地震資料大數(shù)據(jù)中的應(yīng)用.計(jì)算機(jī)系統(tǒng)應(yīng)用,2016,25(2):45–51.
Multi-Path Storage System Based on ALUA
FAN Chang-Jun,HU Zhi-Cheng,YANG Jia-Dong
(CETHIK Group Co.Ltd.,Hangzhou 310013,China)
With the rapid development and wide application of SAN technology,multi-path technology becomes one of the key technologies to achieve disaster tolerance and high performance.Based on the existing techniques,an improved multi-path storage sub-system is presented.And then improvement is made in four modules,i.e.,LUN ownership management,configuration of ALUA,path selection strategy,and I/O forwarding implementation.The test results show that this scheme can be a very good solution to the path failover and load balance problems,greatly enhancing the I/O performance.
multi-path; ALUA attributes; I/O forwarding; load balancing; failover; failback
10.3969/j.issn.1671-7341.2013.18.016]
范長軍,胡志成,楊佳東.基于ALUA 的多路徑存儲系統(tǒng).計(jì)算機(jī)系統(tǒng)應(yīng)用,2017,26(10):11–19.http://www.c-s-a.org.cn/1003-3254/6026.html
2017-01-16; 采用時間:2017-02-26