范長軍,胡志成,楊佳東
(中電海康集團有限公司,杭州 310013)
基于ALUA的多路徑存儲系統(tǒng)①
范長軍,胡志成,楊佳東
(中電海康集團有限公司,杭州 310013)
隨著網絡存儲技術的不斷深入發(fā)展與廣泛應用,存儲多路徑技術成為信息系統(tǒng)容災與故障恢復方案中的核心技術之一.在現有存儲多路徑技術的基礎上,提出了一種基于ALUA的多路徑存儲子系統(tǒng)總體框架,并重點在邏輯卷控制器屬主管理、ALUA屬性與路徑選擇策略配置和I/O重定向等模塊進行了創(chuàng)新性的設計與實現.經過應用測試,該系統(tǒng)很好地解決了存儲系統(tǒng)的路徑故障遷移和故障恢復問題,并智能地實現了路徑間I/O的負載均衡,極大地提高了性能和可靠性.
多路徑; ALUA 屬性; I/O 重定向; 負載均衡; 故障遷移; 故障恢復
隨著移動互聯網、社交網絡等新型IT技術的發(fā)展,可用數據總量呈幾何級增長,人類進入大數據時代.大數據中蘊含的知識是寶貴的社會財富,但其價值的體現依賴于對數據的可靠存儲和高效處理,這對存儲系統(tǒng)的可用性、可靠性和存取效率提出了新的挑戰(zhàn),為此,SAN (Storage area network)網絡存儲技術應運而生,并得到大力發(fā)展和廣泛應用.
在SAN系統(tǒng)中,有兩個基本實體,發(fā)起端和目標端.發(fā)起端主動發(fā)起I/O命令請求存儲資源,目標端響應存取命令.發(fā)起端可以是應用服務器、個人PC機等各種有存儲需求的實體,目標端主要是磁盤陣列、磁帶庫等存儲實體,兩端由光纖通過(網絡、FC等)交換機連接起來形成I/O路徑,構成發(fā)起端與目標端通信的橋梁.在I/O子系統(tǒng)中,單路徑I/O傳輸錯誤是導致系統(tǒng)單點失效的根源,它難以滿足現代存儲對系統(tǒng)可用性和可靠性的要求; 同時,在單路徑場景中,數據只能擁堵在一條I/O通道中傳輸,成為性能的瓶頸.為了提高性能和可靠性,在從主機到交換機到存儲控制器的鏈路中,一般采用冗余的部件,使對存儲設備的I/O操作可以在多條路徑上執(zhí)行,由此發(fā)展出I/O多路徑技術,以期解決故障切換和負載均衡問題.
目前,國內外都有多路徑技術的研究工作,主要集中在一些存儲廠商,如EMC、NetApp、HP、IBM等,一些大學、研究機構也在參與[1].本文在現有存儲多路徑技術的基礎上設計和實現了一種基于ALUA的多路徑存儲子系統(tǒng),它支持I/O的故障遷移和負載均衡等功能,同時具備高性能、可靠性以及高擴展性.
在現代網絡存儲環(huán)境中,為了提高存儲系統(tǒng)的可靠性,通常會使用冗余的物理組件(如適配器、電纜或交換機等)連接服務器主機與存儲設備,所以在主機系統(tǒng)到存儲陣列控制器間會存在多條物理鏈路(SAN存儲網絡多路徑連接示意圖如圖1所示).通過這些物理鏈路,存儲陣列上的塊設備被映射給主機系統(tǒng),在默認情況下,主機系統(tǒng)將每條路徑映射的塊設備都認作一個實際的物理盤,而本質上它們只是通向同一個物理盤的不同路徑.主機端在對這一虛擬的塊設備進行訪問時,可以在多個物理鏈路中選擇一個下發(fā)指令,即便出現其中一條路徑斷掉的單點故障,還有其它物理路徑可以保證主機業(yè)務的正常執(zhí)行,提升了存儲系統(tǒng)整體的可靠性.同時,多路徑軟件也可通過自動監(jiān)控和動態(tài)分流數據I/O,實現傳輸速率的提高.

圖1 SAN 存儲網絡多路徑連接示意圖
鑒于多路徑技術的諸多優(yōu)點,各大存儲廠商如EMC、華為等也將其納入標準配置,對該技術的應用和研究也一直比較熱門.目前多路徑技術研究主要集中在兩方面,一方面是主機端多路徑軟件的設計與實現,如文獻[2,3]分別介紹了現有的各種主機端多路徑實現方法,文獻[4-7]分別在不同的層面,用不同的方式設計和實現了主機多路徑; 另一方面是多路徑軟件的特定應用,如文獻[8]將不同模式的磁盤陣列與不同多路徑軟件搭配使用,文獻[9]將多路徑技術與虛擬化、集群等軟件配合使用,文獻[10-12]分別將多路徑應用到電臺廣播和地震資料處理集群中.
這些多路徑方案在各自的領域針對不同應用場景能夠很好的滿足需要,但是都存在各自的問題.首先,多路徑技術涉及諸多方面,包括主機系統(tǒng)和存儲系統(tǒng)等,它們相互配合共同實現相應功能,而現有方案往往只著眼于主機端的多路徑軟件,沒有從整體上考量.其次,一部分方案是將現有的多路徑技術應用到某一個特定的領域,并未對多路徑技術進行升級和優(yōu)化.
為應對上述問題,本文設計并實現了一整套的多路徑存儲子系統(tǒng),它具備如下特點:
? 高性能,高度負載均衡和高聚合帶寬;
? 高擴展性,支持鏈路、交換機和HBA卡等的擴展;
? 高可靠性,鏈路冗余和路徑選擇策略避免了單點故障.
在多路徑典型應用場景中,存儲陣列中的物理磁盤通過存儲控制器上運行的RAID程序組成RAID組,再將RAID組中的存儲池劃分為存儲單元,稱為LUN(Logical unit number,又稱邏輯卷),存儲設備將 LUN提供給主機進行I/O訪問.存儲控制器是多路徑I/O的目標端,對于多路徑的故障切換和負載均衡起著至關重要的作用.存儲設備一般包含兩臺或更多的存儲控制器,以達到冗余配置,每臺存儲控制器又有多個存儲端口,以方便連接前端主機或存儲網絡交換機,從而形成多條鏈路.當采用多條鏈路時,多條傳輸路徑可同時傳輸數據塊,以解決單條鏈路的傳輸能力有限的問題.
本文提出的方案對存儲系統(tǒng)進行多路徑組網,實現下述一整套的流程.主機啟動時系統(tǒng)通過掃描,發(fā)現每條路徑上的塊設備,并記錄路徑狀態(tài)等相關信息.對于每個塊設備(LUN),主機端多路徑軟件下發(fā)命令,查詢它的所屬控制器,并將主機到其控制器屬主之間的路徑作為優(yōu)先選擇路徑,即主路徑.如果主機到其所屬控制器之間有多條路徑,I/O就會被多路徑軟件分攤到各條路徑上,以期提高存儲系統(tǒng)的整體性能.如圖1所示,當主路徑(如路徑1)由于控制器A宕機而失效后,存儲端自動將業(yè)務通過failover切換到控制器B,隨之主機端多路徑軟件將I/O切換到備用路徑(路徑3),避免因單點故障而造成業(yè)務中斷.當控制器A的故障得以解除或修復后,存儲業(yè)務通過failback切換回控制器A,并由主機端多路徑將I/O從備用路徑切換回主路徑.
總體而言,多路徑技術涉及從主機到存儲陣列之間的各類實體.邏輯卷所屬控制器的設定會影響其在ALUA機制下目標端口組的配置,此兩者與主機端路徑選擇策略相配合,共同實現多路徑功能.因此,多路徑存儲子系統(tǒng)的設計需要從系統(tǒng)論角度來考慮,由總到分、自頂向下地進行,并充分考慮各個模塊之間的相互促進與制約,在保證故障轉移功能的基礎上,盡最大努力實現負載均衡,從根本上改善系統(tǒng)I/O性能.
本文提出了一種新的基于ALUA的多路徑存儲子系統(tǒng)架構,包括系統(tǒng)管理模塊、ALUA屬性配置模塊、路徑選擇策略管理模塊和I/O重定向模塊等.系統(tǒng)管理模塊負責整個存儲陣列的存儲資源管理,其中與多路徑相關的是LUN的控制器屬主信息,它是實現不同I/O路徑優(yōu)先級的關鍵因素; ALUA屬性配置模塊就是據此來設置其對應的目標端口和目標端口組的,它與路徑選擇策略管理模塊一起為I/O規(guī)劃下發(fā)路徑,以保證不同I/O路徑間的負載均衡和單條路徑I/O性能的最優(yōu)化; 當進行了上述的設定之后,I/O只能通過主存儲控制器下盤,分發(fā)到冗余存儲控制器的I/O需要重定向模塊將其轉發(fā)給所屬控制器.具體的多路徑存儲子系統(tǒng)架構如圖2所示.
具體而言,在系統(tǒng)管理模塊,本文提出了一種邏輯卷控制器屬主的自動分配和智能均衡方法,通過收集各存儲控制器上的I/O信息來動態(tài)分配LUN到各存儲控制器上; 其次,在底層存儲中,基于ALUA機制提出了一種LUN目標端口和目標端口組的配置方式,根據LUN的控制器屬主信息,來規(guī)劃路徑的優(yōu)先級; 再次,在底層存儲中,開發(fā)了I/O重定向模塊,在I/O從非所屬控制器下發(fā)時,通過內部端口將I/O轉發(fā)到所屬控制器; 最后,在路徑選擇策略管理模塊中,根據底層存儲ALUA屬性的配置,設置了相應的路徑管理策略,并開發(fā)了新的路徑選擇算法.通過對上述方案的設計與開發(fā),更好地實現了I/O路徑的故障轉移和負載均衡功能.
在多控制器存儲陣列中,主機在訪問存儲設備邏輯單元(LUN)時,由于LUN存在控制器屬主的概念,下發(fā)給不同LUN的I/O將選擇不同的路徑,這會造成各控制器I/O負載和性能的不同.為了充分利用存儲資源,提高性能和可靠性,實現故障切換和負載均衡,需要一種有效的配置方案.
目前,多控制器存儲陣列的LUN屬主和多路徑配置方案多種多樣,各廠商都有自己的多路徑軟件和LUN屬主配置子系統(tǒng),種類繁多、配置復雜,并且存在以下問題:傳統(tǒng)的LUN控制器屬主的配置都是通過系統(tǒng)管理界面人為手動操作的,由于難于全面掌握各控制器的狀態(tài)信息,管理員很難有效地進行所屬控制器的劃分.這有可能導致I/O在一臺控制器上擁堵或饑餓的極端情況,極大地損耗了性能,對可用性也造成了一定的影響.
為解決上述問題,本文提出了一種多控制器存儲設備邏輯卷屬主管理方法.在雙控制器場景下,創(chuàng)建LUN之前,首先收集各控制器的I/O統(tǒng)計信息,并根據設定的算法決定相應的控制器屬主,然后據此通過ALUA進行存儲端口和端口組的配置,為LUN提供路徑訪問的優(yōu)先級機制.最后,當新創(chuàng)建的 LUN 投入使用后,反饋并更新各控制器的I/O統(tǒng)計信息.具體參看圖3.

圖3 LUN 控制器屬主管理流程
具體而言,首先采集各個控制器的基本I/O信息,包括帶寬、IOPS等; 然后通過一定的統(tǒng)計方法計算求取均值、方差和積分等性能表征參數; 接著,將給定的決策因子與表征向量進行加權平均計算,得到每個控制器的決策指數; 最后,選取指數較大的控制器為新建卷的控制器屬主.
根據存儲的特性,選取各個控制器的帶寬、IOPS、LUN數目、LUN總容量、總I/O error率、故障率、I/O突發(fā)率、總I/O量、I/O集中度、吞吐量等來作為性能指標,計算并表示其性能表征參數為 X={x1,…,xi,…,xn}.為了消除數值量綱不同造成的影響,將數據進行歸一化處理.Xi與Yi分別表示雙端控制器各自的第i個參數.

權重系數?={ω1,…,ωi,…,ωn}可由管理員根據應用場景的不同而設置不同的值,以決定主要的影響因素.例如,兩個控制器的 LUN 的總帶寬均值相同,但是其方差有較大差別,而且一邊的I/O突發(fā)率明顯高于對端,如果新建的LUN主要應用于平滑的I/O順序讀寫,則應該將I/O突發(fā)率和方差對應項的權重系數提高.

進一步地,當配置信息的數據積累到一定程度時,可以用線性回歸的方法來學習得到決策因子,自適應地得到各項參數,增加子系統(tǒng)的智能性和自動化程度.
兩個控制器通過加權求和公式(如公式(1)所示)得到一個決策指數,比較兩個決策指數,數值較大的控制器為新建邏輯卷的所屬控制器.
分配好新建LUN的控制器屬主后,接下來在安裝了LIO(Linux-IO target)模塊的存儲端控制器上進行端口組的劃分和ALUA的配置.
ALUA(Asymmetric logical unit access)的全稱是非對稱邏輯單元訪問,是SPC-4協(xié)議的一個重要組成部分,主要應用于某個存儲資源(LUN)具備多條訪問路徑的環(huán)境下.在本文,I/O性能在LUN所屬控制器對應的路徑上會更好,不同路徑具備不同的訪問特性,使用ALUA來規(guī)定路徑訪問的優(yōu)先級,確保在正常情況下讀寫指令都是通過最優(yōu)路徑進行下發(fā),以此達到最優(yōu)的訪問體驗,并通過目標端口組TPG(Target port group)來對這些路徑進行分類管理.
一個目標端口組TPG包括若干目標端口,同一個TPG中的目標端口在訪問邏輯單元LUN的時候具有相同的屬性.主機可以通過SCSI命令來獲取某一個LUN對應的TPG及其相關屬性,并通過這些信息來組織訪問LUN的路徑.
ALUA有4種訪問模式,這些工作模式是在主機下發(fā)inquiry指令時,存儲端上報給主機的,主要目的是告訴主機,存儲處于哪個工作模式上.具體的描述如表1所示.

表1 SCSI命令中的 TPGS 域
ALUA的訪問狀態(tài)有4種,這些狀態(tài)是通過響應主機下發(fā)的 SCSI指令 REPORT TARGET PORT GROUPS上報給主機的,對應的位是“ASYMMETRIC ACCESS STATE”.
SPC-4(SCSI Primary Command-4)對存儲端口劃分為四種狀態(tài):
1)主動優(yōu)化 (Active/optimized):目標端口能立即訪問LUN.
2)主動非優(yōu)化 (Active/un-optimized):僅能響應相應的命令,可轉化為Active/optimized狀態(tài).
3)備用 (Standby):僅能響應相應的命令,可轉化為Active/optimized狀態(tài).
4)不可用(Unavailable):僅能響應受限的命令集,不可轉化為其它狀態(tài).
設定端口為某一訪問狀態(tài),相應的存儲控制器就僅能響應對應的命令集,限定了目標端口訪問LUN的權限.對于雙控制器存儲陣列,根據端口狀態(tài)的劃分,可以有三種不同的多路徑訪問方式:A/A(Symmetric Active/Active,對稱雙活),A/P (Active/Passive,主備模式)和 ALUA(Asymmetric Active/Active,非對稱雙活).為了性能和實現的簡易型,本文選擇ALUA.
為了有效地約束I/O下發(fā)路徑,防止I/O在一臺控制器上擁堵或饑餓,結合上述的LUN控制器屬主的設計,本文利用LIO提供的ALUA機制來配置目標端口和目標端口組.
為進行端口組屬性的配置,開發(fā)了相應的系統(tǒng)接口,將目標端口按照所屬控制器進行分組,為LUN控制器屬主的目標端口組提供更高的路徑優(yōu)先級,從而提高I/O效率和可用性.
具體而言,對于特定的LUN,將目標端口按照所屬控制器進行分組,劃分到不同的目標端口組TPG中.將所屬控制器的所有目標端口設為Active/optimized狀態(tài),形成一個目標端口組,將備控制器的所有目標端口設為Active/un-optimized狀態(tài),形成另一個目標端口組.當有I/O讀寫請求時,主備控制器都可以接受對LUN的訪問,但流經備控制器的I/O,會被重定向模塊轉發(fā)到主控制器,最終I/O只能通過主控制器下盤.
此外,由于所屬控制器端路徑和非所屬控制器端路徑的性能不同,當一端控制器因故宕機,其上的LUN故障遷移(也即failover)到對端控制器時,I/O切換到非優(yōu)化的路徑下發(fā),性能隨之下降.為了解決此問題,將對應TPG的type屬性設置為both(Implicit and Explicit),其中的Explicit ALUA屬性賦予主機端更改備端控制器對應端口組存取狀態(tài)的權限,以實現多路徑軟件對存儲端TPG屬性的修改,達到提升路徑優(yōu)先級的目的.
3.3.1 路徑組織策略
針對網絡存儲,各大廠商都有自己的多路徑實現方法,為了提高響應速度和總體性能,需要在主機端開發(fā)相應的多路徑軟件來組織I/O路徑和進行I/O路徑的選擇.但是由于主機系統(tǒng)的種類繁多,針對不同類型的操作系統(tǒng)都需要開發(fā)一套多路徑軟件,這極大地增大了維護成本,降低了擴展性.本文充分利用各大系統(tǒng)平臺提供的原生多路徑軟件,通過其提供的通用框架來設計路徑組織和選擇策略.
在各類主機多路徑軟件中,路徑組把具有相同特征的路徑組織在一起,以便于管理I/O路徑.在某一瞬時只有一個路徑組處在活躍狀態(tài),在路徑切換時只能從當前活躍的路徑組里選擇最優(yōu)的路徑.不同的主機系統(tǒng)平臺內嵌的多路徑軟件的組織策略各不相同,但都實現了常用的模式.在應用服務器領域,Linux類型系統(tǒng)的主機占有絕對優(yōu)勢,下面以Linux主機為例.
Linux系統(tǒng)主機自帶的多路徑框架DM-Multipath的組織策略分為五種:
1)multibus策略,同一個路徑組包含一個塊設備對應的所有路徑.
2)failover策略,一個路徑組只含一條路徑.
3)group_by_serial策略,同一個路徑組內只含序列號相同的路徑.
4)group_by_prio 策略,同一路徑組內只含優(yōu)先級相同的路徑.
5)group_by_node 策略,同一路徑組內只含節(jié)點名相同的路徑.
為了負載均衡的目的,本文選擇group_by_serial模式來配合存儲端ALUA屬性的配置,這樣I/O的切換被限定在同一控制器的路徑組內,只有在進行failover故障遷移時,才在不同的控制器間切換,實現了對I/O路徑的管控.
3.3.2 路徑選擇
在主機下發(fā)讀寫指令時,先根據優(yōu)先級從多個路徑組中選一個,然后在這個路徑組里根據設定的路徑選擇算法進行選擇.DM-Multipath內置的路徑選擇算法有三種,分別是 Round-robin(輪詢算法)、Queue-length(排隊深度算法)以及Service-time(服務時間算法).
輪詢算法通過雙向循環(huán)鏈表來組織所有路徑,當選擇新路徑時,會順次選取下一個節(jié)點對應的路徑返回.觸發(fā)路徑切換的條件是,每條路徑固定分發(fā)一定次數的I/O,當前路徑發(fā)完規(guī)定次數的I/O后,就會自動切換到下一條路徑.但是,該算法沒有考慮到路徑處理能力、響應時間等的不同.
隊列深度算法參考每條路徑上的I/O負載,通過動態(tài)記錄每條路徑上排隊等待處理的I/O數量來衡量路徑的優(yōu)劣.具體而言,當有I/O分發(fā)到某條路徑上時,對應的隊列深度就增加; 當隊列中的I/O下發(fā)到底層驅動上時,隊列深度就減少.同上,此算法也沒有考慮不同路徑物理特性的不同.
服務時間算法預估I/O請求發(fā)送到每條路徑后進行處理所需要的周轉時間,服務時間最短的那條路徑為最優(yōu)路徑.具體而言,將路徑上總的排隊I/O塊大小除以此路徑的吞吐量即可得到服務時間.
為了更好地在路徑間均衡I/O負載,本文提出并實現了一種新的路徑選擇算法——hikdata-selector算法.在選擇一條路徑時,不僅僅單一地參考響應時間、相對吞吐量、排隊I/O塊大小和重復次數等,而是將它們綜合起來考慮.
在選取一條路徑時,先考慮路徑的響應速度,選擇響應時間短的路徑作為最優(yōu)路徑; 當兩條路徑的響應時間一樣時,再計算相對服務時間,優(yōu)選耗時少的路徑;如仍無法確定,還可繼續(xù)參考路徑的相對吞吐量; 當相關指標都相同時,可隨機選一條路徑返回.具體流程可參看圖4所示.

圖4 hikdata 路徑比較算法
路徑由雙向循環(huán)鏈表組織起來,選擇的具體流程是:首先,從備選路徑鏈表里選取前兩條路徑,并根據上述算法進行比較,得到當前最優(yōu)路徑; 隨后再從路徑鏈表里取出下一條路徑,與當前最優(yōu)路徑進行比較,選出較好的一條來更新當前最優(yōu)路徑,循環(huán)往復,直到整條鏈表全部判斷完畢,選出的就是最佳路徑.總體流程如圖5所示.

圖5 hikdata 路徑選擇流程
根據上文的設定,多路徑軟件優(yōu)選主控制器端路徑,備控制器端路徑閑置.當出現主存儲控制器(如:A控)的網卡損壞或者網絡環(huán)境異常等故障時,主機系統(tǒng)與主控之間的路徑斷開,主機多路徑軟件會將I/O切換到備控(如B控)的路徑下發(fā)指令,由于主控沒有因故障宕機,所以不會執(zhí)行failover操作,備控中相應的塊設備仍然是只讀的,從主機端下發(fā)到備控的讀寫指令將無法在備控下盤.為了保證業(yè)務不中斷,需要將備控接收到的I/O通過內部端口重定向到主控,才能保證整個I/O過程的完整.為此,基于LIO開發(fā)了I/O重定向模塊,其整體架構如圖6所示.

圖6 I/O 重定向模塊系統(tǒng)架構
整個I/O重定向可以分為初始化模塊和轉發(fā)模塊.初始化模塊主要負責初始化I/O重定向所需的全局變量,分配全局空間,并創(chuàng)建轉發(fā)線程.轉發(fā)模塊由發(fā)送子模塊和接收子模塊組成.發(fā)送子模塊負責接收本端iSCSI命令數據,在需要轉發(fā)的情況下,將命令數據通過PCIe非透明橋(NT)驅動的發(fā)送接口發(fā)送到對端,接收子模塊負責接收對端發(fā)送來的命令數據,并在本端執(zhí)行I/O指令,再將執(zhí)行結果通過NT接口發(fā)送回對端,對端發(fā)送子模塊將結果返回給上層,完成一次完整的I/O重定向過程.
在本文,在LIO子系統(tǒng)中實現I/O重定向,減少了對存儲端Linux存儲協(xié)議棧的改動,降低了實現難度,也降低了I/O重定向對于整個系統(tǒng)帶來不穩(wěn)定的風險.現有的I/O重定向,如iSCSI重定向只能適用于前端是iSCSI協(xié)議的場景,擴展性較差.LIO支持將塊設備通過多種協(xié)議(如FC、InfiniBand等)映射到主機端,通過本方法實現的I/O重定向,可以有效兼容前端不同的網絡存儲協(xié)議,提高適用性.另外,本I/O重定向模塊通過調用NT驅動接口實現與對端控制器之間的數據收發(fā),速度更快,更可靠.
根據本文提出的多路徑存儲子系統(tǒng)模型,采用自主研發(fā)的雙控制器存儲陣列平臺搭建了多路徑存儲子系統(tǒng)運行環(huán)境.針對多路徑技術主要實現故障轉移和負載均衡功能,設計了兩種組網方式來進行測試,并選擇存儲業(yè)界廣泛使用的IOMeter作為I/O測試工具.測試硬件由兩臺應用服務器、一臺雙控制器存儲陣列和兩臺萬兆交換機組成,如圖7所示.
組網一僅包括7條路徑(P1-P7),如圖7所示,主機1訪問LUN2時,路徑有P1-P3-P6和P1-P4-P5-P6可選,而且兩路徑的I/O在存儲后端全由控制器A處理.
首先,測試 I/O 路徑切換.經實測,在上述場景下,I/O指令優(yōu)選P1-P3-P6路徑下發(fā).通過拔掉網線的方法來模擬P3出現故障的場景,此時路徑重定向為P1-P4-P5-P6,但存儲設備并沒有執(zhí)行 LUN failover.將P3線路插回,再模擬P6出現故障的場景,此時存儲業(yè)務轉由控制器B處理,I/O重定向到P1-P3-P5-P7路徑,但是沒有立即執(zhí)行LUN failover.過了一段時間,通過控制器B處理的I/O累計到了設定的量級時,才執(zhí)行了 LUN failover.上述實驗充分說明了,此多路徑子系統(tǒng)能夠有效地實現故障切換功能.
接下來,啟動目標端,設置 LUN1、LUN3 為遠程訪問盤,并將其分別通過HBA1、HBA2的兩個萬兆網口映射出去.針對主機1與主機2,分別啟動iSCSI發(fā)起端連接到目標端.主機1登入LUN1,主機2登入LUN3,如此每個主機可得到兩個相同的遠程盤,經測試,I/O指令優(yōu)先通過所屬控制器對應的路徑下發(fā).
隨后,先通過發(fā)起端測試單鏈路的性能和系統(tǒng)負載,再加載多路徑模塊,對多路讀寫性能和系統(tǒng)負載進行測試.相應的測試數據如圖8所示.其中多路單鏈路是指通過多路徑模塊訪問時,只使用一條有效鏈路傳輸.雙鏈路是指通過多路徑模塊訪問時,采用hikdataselector的負載平衡算法,兩條鏈路并行傳輸.單鏈路是指不通過多路徑模塊而進行單一鏈路的訪問.從圖8中可以看出,三者之中雙鏈路的讀寫性能最好.

圖7 測試場景示意圖
最后,針對本文提出的方案,在組網二(包括圖7所有路徑)上進行如下測試:在雙控存儲陣列上規(guī)劃創(chuàng)建 20 個卷,分別模擬不同的用途,比如,郵件服務器存儲、數據庫存儲、視頻流存儲、FTP存儲等,分別對應小文件隨機讀寫、均勻順序讀寫、突發(fā)大文件讀寫等,通過提出的LUN控制器屬主管理方法將其分配到不同的控制器上,并每二十秒測試一次存儲端網絡HBA卡的吞吐量,持續(xù)3個小時,然后求取這些測試值的均值和變異系數(CV).在對照組中,按照傳統(tǒng)做法隨機分配LUN的所屬控制器,并采用經驗證效果較好的Service-time選路算法.
將上述流程中不同用途的卷的創(chuàng)建順序打亂,重新分配所屬控制器,進行下一次測試.循環(huán)往復測試6次,測試結果如表2所示.從測試數據的對比,可以看出本文提出的方案在四塊HBA卡的速率基本一致,較好地實現了負載均衡的要求,并比對照組有更好的性能.

圖8 多路徑 I/O 性能測試結果

表2 多路徑 I/O 吞吐量測試結果
在網絡存儲系統(tǒng)中,在主機與存儲系統(tǒng)之間利用多路徑技術進行容災已成為常例,既能保證數據業(yè)務不因故障而中斷,又可提升系統(tǒng)總體I/O傳輸效率和吞吐量.為此,該技術得到了業(yè)界的普遍重視,對它的研究和應用越來越廣泛.但是目前多路徑技術方面的研究工作大都局限于主機端多路徑軟件的設計開發(fā)或特定領域的應用,沒有從系統(tǒng)的角度進行考量.
本文提出了一種基于ALUA的多路徑存儲子系統(tǒng)設計與實現方案,提出了新的多路徑存儲子系統(tǒng)的體系架構,并分別在LUN控制器屬主管理、ALUA屬性與路徑選擇策略配置和I/O重定向等模塊進行了創(chuàng)新性的設計與實現.通過應用效果分析,本方案能夠很好地保證系統(tǒng)的高可用性,在系統(tǒng)容災、故障轉移及I/O分流等方面具有較好的應用效果,并且有效地進行了I/O的負載均衡,優(yōu)化了I/O子系統(tǒng)的整體性能.
1和軍.基于Windows I/O多路徑的網絡存儲容災技術分析與實現[碩士學位論文].成都:電子科技大學,2009.
3焦繁.論軟件SAN存儲多路徑的實現方法.中國報業(yè),2012,(24):30–32.
4郭曉金,王超.一種新的Linux主機冗余存儲路徑設計與實現.電視技術,2012,36(3):70–73.
5胡耀義.一種多路徑環(huán)境下的智能選路算法設計與實現.鐵路計算機應用,2016,25(10):13–15,20.[doi:10.3969/j.issn.1005-8451.2016.10.004]
6蔡斌,謝長生,任勁.SCSI子系統(tǒng)中間層多啟動互連多路徑I/O的存儲方式的研究.小型微型計算機系統(tǒng),2005,26(8):1420–1426.
7闞闖,戚瑋瑋.一種新結構的DM-multipath與動態(tài)負載平衡.計算機應用,2008,28(2):289–291.
8王超.多路徑軟件與不同模式磁盤陣列搭配使用方法研究.電光系統(tǒng),2011,(4):45–49.
9胡耀義,陶宏才.一種基于Hyper-V和WSFC集群的主機多路徑網絡存儲架構方案.鐵路計算機應用,2012,21(6):80–82.
10王炎.多路徑I/O技術在電視臺SAN存儲網絡中的應用探討.廣播與電視技術,2013,(3):86,88,90,92–93.
11金弟,莊錫進,曹曉初,等.基于多路徑地震資料處理集群存儲系統(tǒng).計算機研究與發(fā)展,2012,49(增刊):42–46.
12金弟,莊錫進,王啟迪,等.存儲框架模型在地震資料大數據中的應用.計算機系統(tǒ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).計算機系統(tǒng)應用,2017,26(10):11–19.http://www.c-s-a.org.cn/1003-3254/6026.html
2017-01-16; 采用時間:2017-02-26