當前位置:學問君>學習教育>畢業論文>

SCSI冗餘路徑軟件的研究與實現

學問君 人氣:6.2K
SCSI冗餘路徑軟件的研究與實現

摘要:在主機系統和存儲系統之間增加冗餘SCSI路徑,並在主機上執行SCSI路徑管理軟件,從而在SCSI路徑之間實現負載均衡和故障切換。在多主機共享存儲系統時,利用路徑管理軟件的屏蔽功能,可將邏輯單元唯一地分配給某一主機。討論了在Windows NT系統下SCSI路徑管理軟件的原理和實現。關鍵字:SCSI,設備驅動程序,冗餘路徑,負載均衡1.引言
隨着機對資訊的處理能力的日益提高,對存儲系統在存儲容量,存取速度,可用性等方面的要求越來越高。,在存儲系統中廣泛使用了RAID(Redundant Array of Inexpensive Disk)技術,以提高數據的可靠性。即使在磁盤發生錯誤後,存儲系統仍然能夠工作,並且能夠以新的磁盤來替換故障磁盤。
通常,每臺主機只使用一塊SCSI卡或光纖卡與RAID系統相連,一旦存儲路徑發生故障(如SCSI卡或光纖卡故障,光纖Hub故障,連線故障等),主機就不能繼續訪問存儲系統,主機上執行的就會被中斷。
爲提高存儲系統的的可用性,在RAID系統的基礎上,採用冗餘配置,在主機系統和存儲系統中建立兩條並行的連接。在軟件方面,必須在操作系統的存儲架構中增加一個設備驅動程序,完成負載均衡,故障切換,邏輯單元屏蔽的功能。2.建立冗餘路徑
爲防止主機系統失效,存儲系統一般被連接於多臺主機上,當某臺主機失效後,其應用可由高可用(HA)軟件或集羣(Cluster)軟件轉移到其他主機上。
爲進一步消除單點故障(Single Point of Failure),在存儲系統中使用兩個RAID控制器,每個RAID控制器連接到一個光纖Hub(或Switch),再連接到主機的光纖卡上。如圖1所示。若使用SCSI連接,RAID控制器需直接連接到主機的SCSI卡上。兩種連接方式都建立了從主機系統的冗餘路徑,並允許多臺主機同時連接到存儲系統上。
光纖卡,光纖Hub,光纖連接電纜(或SCSI卡,SCSI連接電纜)等失效時,由路徑管理軟件切換到另一條路徑上。服務器失效時,由HA或Cluster軟件切換其上執行的應用。
圖1 存儲系統光纖冗餘連接
3. SCSI冗餘路徑模組的功能
在軟件方面,還需要SCSI冗餘路徑模組(SCSI Path Management,簡稱SPM)。其主要功能爲:故障路徑切換(Path Failover),負載均衡(Load Balance),邏輯單元屏蔽(LUN Masking)。
3.1故障路徑切換
SPM透過消除存儲I/O路徑上所有部件(如主機的HBA即主機總線適配器,控制器,HUB,電纜等)的單點故障,提高系統的可用性。主機透過多條I/O路徑訪問存儲系統,一旦一條I/O路徑出現故障,SPM會立即檢測到相應故障,並將之後的I/O操作重新路由至其它正常路徑上。重新路由I/O的過程僅需要幾秒,對應用程序是透明的,應用程序不會受到路徑故障的而終止執行。SPM對發生故障的路徑持續監控,一旦發現其恢復正常,SPM會恢復該路徑的I/O任務。
3.2 負載平衡並增加帶寬
在主機與存儲系統之間存在多條I/O路徑時,爲了避免某一存儲路徑成爲系統的性能瓶頸,SPM將主機上的對該存儲系統的所有I/O操作均衡地分配至這些路徑上去,提供負載平衡能力。
透過同時利用多條並行數據路徑,SPM能夠有效地提高系統的數據傳輸帶寬。在多臺主機共享存儲系統的配置中,可以加快I/O訪問的操作,減小數據路徑的瓶頸,從而增加整個系統的可用帶寬。
3.3 邏輯單元屏蔽
在多臺主機同時連接到一臺存儲系統時,SPM的邏輯單元屏蔽(LUN Masking)功能可以使得每臺主機在存儲系統上擁有其專屬的部分,其他主機不能存儲屬於該主機的存儲區域。因此,這些主機可以執行不同的操作系統,在其存儲區域上使用不同的檔案系統,而不受其他主機的影響。
圖3表示多臺主機共享連接存儲系統的一個配置。圖中NT主機使用的區域爲LG0;Solaris主機使用LG1;Linux主機使用LG2。從操作系統角度,每臺主機都可以看到所有的邏輯盤或邏輯卷。在物理連接上,每一個主機都可以訪問到LG0,LG1和LG2。透過SPM軟件的邏輯單元屏蔽功能,NT主機只能訪問LG0,而不能訪問到LG1和LG2;同樣,Solaris主機只能訪問LG1,而不能訪問到LG0和LG2;Linux主機只能訪問LG2,而不能訪問到LG0和LG1。這種功能允許IT管理員將某個邏輯單元唯一地分配給某一臺主機使用,而禁止其他主機訪問這個邏輯單元,從而避免多個主機同時訪問一個邏輯單元而造成數據衝突和丟失。
4. SPM在Windows NT環境下的實現
爲使SPM的各項功能對應用程序透明,SPM需以設備驅動程序的形式實現。所有對存儲系統的I/O操作須經由SPM驅動程序。
光纖連接與SCSI連接的區別只存在於硬件方面,在操作系統層次上,對二者的處理是相同的,在上層使用SCSI命令接口,由光纖卡的驅動程序對SCSI命令和數據進行轉換。因此SPM對SCSI連接和光纖連接的處理是一致的,內部使用SCSI協議接口。
4.1 執行層次
在Windows NT操作系統下,SPM設計爲一個過濾器驅動程序,它是一種特殊類型的中間驅動程序。在系統層次結構中,它位於檔案系統驅動程序和磁盤驅動程序之間,來自於檔案系統的I/O請求透過它再到下一層。SPM管理數據路徑,透過控制和分配數據流量達到I/O負載均衡。將SPM驅動程序設定爲filter類型的驅動程序,並以boot方式啓動。[1]

4.2 SCSI冗餘路徑在Windows NT的內部表示
在Windows NT中,每一個物理磁盤都被賦予一個SCSI地址,用(c,b,t,d)表示,c(channel)表示SCSI卡的編號,b(bus)表示SCSI卡上的通道編號(一般只有一個通道,b總爲0),t(target)表示目標地址,d(disk)表示LUN號。磁盤驅動程序爲這個磁盤創建一個設備“DeviceHarddisk(x)Partition0”,x爲該磁盤的唯一編號。若該磁盤上存在分區,則爲每一個分區創建一個設備“DeviceHarddisk(x)Partition(y)”,y爲分區的編號。
當存在冗餘路徑時,由於每一個SCSI卡都連接到物理磁盤上,因此物理磁盤具有多個SCSI地址。對應於這個磁盤,系統內部也創建了多個“DeviceHarddisk(x)Partition0”設備;對應於這個磁盤的每一個分區,也存在着多個多個“DeviceHarddisk(x)Partition(y)”設備(所有設備的y(即分區號)相同。
爲保證該物理磁盤對於上層只存在唯一的一個映象,對於某個磁盤的多個“DeviceHarddisk(x)Partition0”, SPM驅動程序只允許一個設備,一般選取磁盤號最小的這個設備;同樣,對於某個分區的多個“DeviceHarddisk(x)Partition(y)”設備,SPM驅動程序也只允許一個設備。
4.3 故障路徑切換
SPM驅動程序啓動後,將掛接(Attach)原始磁盤設備“DeviceHarddisk(x)Partition0”和分區設備“DeviceHarddisk(x)Partition(y)”,對磁盤設備和分區設備的操作,NT系統構造一個IRP包,先調用SPM驅動程序,再由SPM將該操作轉發給下層磁盤驅動程序。SPM將拒絕對冗餘的磁盤設備和分區設備的操作,不進行轉發。
SPM管理各個存儲路徑,決定採用哪個存儲路徑執行操作。正常情況下,SPM使用主路徑執行操作,將IRP轉發主路徑對應的設備;如果主路徑已經失效,SPM在備用路徑中選擇一條路徑,將IRP轉發至該路徑對應的設備。
在轉發IRP到下層磁盤驅動程序之前,SPM先設定IRP的完成例程(IoSetCompletionRoutine)。在IRP完成後,NT系統將調用這個例程。如果這個IRP正常完成,表示路徑正確,SPM即完成對這個IRP的處理。如果這個IRP的操作未正常執行,表示選取的路徑發生錯誤, SPM選取另外一個狀態正常的路徑,將這個IRP轉發到該路徑對應的設備重試這個IRP。若操作執行成功,則正常返回。如果所有的路徑都不能成功地執行操作,SPM可對當前操作使用全部路徑進行重試,直到達到規定的重試次數而超時返回,以防止程序無限等待而導致系統掛起。
爲及時地更新各路徑的狀態,SPM創建一個系統線程,定時檢查各個路徑;另外,IRP的重試不能在IoCompletion例程中完成,SPM創建另一個系統線程執行重試操作。
因此,在I/O路徑發生故障時,正在該路徑執行的IRP在返回後,將由SPM轉發至其他正確路徑上;隨後的IRP將由SPM直接轉發到其他路徑。從而實現了故障路徑切換的目的`。
4.4 負載均衡
對於負載均衡方式,SPM可採用不同的算法。最簡單的算法是輪流順序分配每個IRP到所有狀態正確的存儲路徑。這種適用於以隨機存取爲主的應用場合,或者系統的存儲瓶頸在於Hub和Switch的情況。對於以連續存取爲主的場合,這種方法將把連續的IRP分配到不同的HBA上,分別啓動獨立的DMA操作來完成,降低系統的效率。改進的方法是將整個磁盤劃分爲若干個連續區域,每個區域對應於一條路徑。轉發IRP時,根據IRP操作的位置,確定其屬於某一區域,選取該區域對應的路徑。因此可保證對該區域內連續的數據讀寫請求總是分配到同一路徑上。
爲增加軟件的靈活性,可提供參數供用戶設定,根據實際環境決定採用何種方式達到負載均衡。
4.5 邏輯單元屏蔽
對於每一個物理磁盤,SPM爲其保留一個排斥(exclude)屬性。僅當exclude爲0時,該磁盤的IRP操作纔會被轉發到下層驅動程序執行;當exclude屬性爲1時,該磁盤的IRP操作被直接返回,不會被執行。因此,對於分配給該主機的磁盤,可利用SPM軟件設定其exclude屬性爲0;對於分配給其他主機的磁盤設定其exclude屬性爲1。5.結論
SCSI冗餘路徑模組實現了負載均衡,故障路徑切換,邏輯單元屏蔽的功能,提高機系統在存儲方面的存取帶寬,避免了存儲體系中存在的單點故障,在多主機共享存儲系統的環境中爲存儲空間提供了保護手段。
由於SPM工作執行於主機中,若希望其執行於Windows NT之外的其他操作系統,需進行移植。另外,SPM實現邏輯單元屏蔽功能由各主機獨立進行,不能保證各主機設定exclude屬性的一致性,理想的解決方案是將邏輯單元分配資訊集中管理和設定,或透過存儲系統的特殊機制進行設定和仲裁,以確保邏輯單元不會由多個主機同時訪問。
[1](美)Art Baker著,科欣翻譯組譯,Windows NT 設備驅動程序設計指南,機械出版社,1997.12