一種多路徑管理方法和系統的制作方法
【專利摘要】本發明公開了一種多路徑管理方法和系統,用于管理從主機路由IO到存儲系統的多個邏輯卷LUN的路徑,其中存儲系統的多個LUN被映射到主機上,該方法包括:將在主機和存儲系統之間具有相同路徑的LUN劃分為一個LUN組;以及對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑。該方法和系統減少了路徑管理的工作量和所需要的資源量。
【專利說明】一種多路徑管理方法和系統
【技術領域】
[0001]本發明涉及存儲系統,更具體地涉及一種多路徑管理方法和系統。
【背景技術】
[0002]存儲系統包括RAID陣列、RAID控制器、適配器、存儲管理服務器組成。存儲管理服務器和其它設備通過網絡相連,管理整個存儲系統的運行。圖1示出了存儲系統的結構框圖。RAID (Redundant Array of Independent (or Inexpensive)Disks)陣列,是由很多價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數據所產生加成效果(additive effects)提升整個磁盤系統效能。存儲系統通過RAID控制器在內部創建不同種類的RAID陣列。存儲系統在RAID陣列再創建邏輯卷(logical volume),也稱為LUN(logical unit number)。LUN再映射給主機(host),主機會把LUN當成本地硬盤來使用。
[0003]主機與存儲系統之間通過光纖交換機(FC Switch)通信。主機端由主機總線適配器HBA (Host Bus Adapter)與光纖交換機相連,HBA在主機端稱為主機總線適配器,在光纖交換機端也稱為光纖接口卡(Fibre Channel interface card)或光纖適配器(FCadapter),存儲系統端也有光纖接口卡或光纖適配器與光纖交換機相連。圖2不出了主機、光纖交換機以及存儲系統之間的連接關系。在圖2中,王機I有4條路徑可以訪問到存儲系統上的LUN,即主機I的HBAl端口到存儲系統的光纖適配器端口 1,主機I的HBAl端口到存儲系統的光纖適配器端口 2,主機I的HBA2端口到存儲系統的光纖適配器端口 1,以及主機I的HBA2端口到存儲系統的光纖適配器端口 2。同樣,主機2有4條路徑可以訪問到存儲系統上的LUN。
[0004]主機有多條路徑通往存儲系統,可以在主機上安裝多路徑軟件,來管理主機到存儲系統之間的多條路徑。多路徑軟件能夠均衡每條路徑的輸入和輸出(10);當發現路徑故障時,在路由10的時候規避故障路徑;當路徑的故障被排除時,主機和存儲系統的LUN之間的通信回歸到原來的路徑等。多路徑軟件采用的路徑選擇算法包括:
[0005]Failover:只選擇一條路徑路由10,只有在該路徑故障的情況下才會選擇其它路徑路由10 ;
[0006]Round Robin:在多條路徑上輪流路由10 ;
[0007]Load Balance:選擇負載較低的HBA上的路徑來路由10 ;如果HBA負載都一樣,就隨機選擇路徑。
[0008]當存儲系統具有很多個LUN映射到主機上,例如主機有1000個或者更多個LUN映射到該主機上,并且該主機有6條或者更多路徑可以訪問到存儲系統,則多路徑軟件將會管理6000條甚至多的路徑;另外,主機還需要開啟1000個多路徑選擇進程來分別負責1000個LUN上的路徑選擇。多路徑軟件將會耗費大量的主機資源(CPU和內存)來管理這些路徑,會使得主機的效率大大降低,因此,當前的多路徑軟件對每個LUN都不推薦配置很多路徑。
【發明內容】
[0009]為了解決上述問題,本發明的一個目的是減少路徑管理的工作量和多需要的資源量。
[0010]根據本發明的一個方面,提供了一種多路徑管理方法,用于管理從主機路由1到存儲系統的多個邏輯卷LUN的路徑,其中存儲系統的多個LUN被映射到主機上,該方法包括:將在主機和存儲系統之間具有相同路徑的LUN劃分為一個LUN組;以及對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑。
[0011]據本發明的另一個方面,提供了一種多路徑管理系統,用于管理從主機路由1到存儲系統的多個邏輯卷LUN的路徑,其中存儲系統的多個LUN被映射到主機上,該系統包括:分組裝置,被配置為將在主機和存儲系統之間具有相同路徑的LUN劃分為一個LUN組;以及路徑選擇裝置,被配置為對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑。
【專利附圖】
【附圖說明】
[0012]通過結合附圖對本公開示例性實施方式進行更詳細的描述,本公開的上述以及其它目的、特征和優勢將變得更加明顯,其中,在本公開示例性實施方式中,相同的參考標號通常代表相同部件。
[0013]圖1示出了存儲系統的結構框圖;
[0014]圖2示出了主機、光纖交換機以及存儲系統之間的連接關系;
[0015]圖3示出了適于用來實現本發明實施方式的示例性計算機系統/服務器的框圖;
[0016]圖4示意性示出了多路徑管理方法的方法流程圖;
[0017]圖5不出了獲得在主機和存儲系統之間具有相同路徑的LUN的一種實施方式的具體流程;
[0018]圖6示出了使用路徑選擇算法的【具體實施方式】流程;以及
[0019]圖7示出了一種多路徑管理系統的結構框圖。
【具體實施方式】
[0020]下面將參照附圖更詳細地描述本公開的優選實施方式。雖然附圖中顯示了本公開的優選實施方式,然而應該理解,可以以各種形式實現本公開而不應被這里闡述的實施方式所限制。相反,提供這些實施方式是為了使本公開更加透徹和完整,并且能夠將本公開的范圍完整地傳達給本領域的技術人員。
[0021]所屬【技術領域】的技術人員知道,本發明可以實現為系統、方法或計算機程序產品。因此,本公開可以具體實現為以下形式,即:可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結合的形式,本文一般稱為“電路”、“模塊”或“系統”。此外,在一些實施例中,本發明還可以實現為在一個或多個計算機可讀介質中的計算機程序產品的形式,該計算機可讀介質中包含計算機可讀的程序代碼。
[0022]可以采用一個或多個計算機可讀的介質的任意組合。計算機可讀介質可以是計算機可讀信號介質或者計算機可讀存儲介質。計算機可讀存儲介質例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導體的系統、裝置或器件,或者任意以上的組合。計算機可讀存儲介質的更具體的例子(非窮舉的列表)包括:具有一個或多個導線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質可以是任何包含或存儲程序的有形介質,該程序可以被指令執行系統、裝置或者器件使用或者與其結合使用。
[0023]計算機可讀的信號介質可以包括在基帶中或者作為載波一部分傳播的數據信號,其中承載了計算機可讀的程序代碼。這種傳播的數據信號可以采用多種形式,包括——但不限于——電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質還可以是計算機可讀存儲介質以外的任何計算機可讀介質,該計算機可讀介質可以發送、傳播或者傳輸用于由指令執行系統、裝置或者器件使用或者與其結合使用的程序。
[0024]計算機可讀介質上包含的程序代碼可以用任何適當的介質傳輸,包括一但不限于一無線、電線、光纜、RF等等,或者上述的任意合適的組合。
[0025]可以以一種或多種程序設計語言或其組合來編寫用于執行本發明操作的計算機程序代碼,所述程序設計語言包括面向對象的程序設計語言一諸如Java、Smalltalk、C++,還包括常規的過程式程序設計語言一諸如”C”語言或類似的程序設計語言。程序代碼可以完全地在用戶計算機上執行、部分地在用戶計算機上執行、作為一個獨立的軟件包執行、部分在用戶計算機上部分在遠程計算機上執行、或者完全在遠程計算機或服務器上執行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網絡一包括局域網(LAN)或廣域網(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網服務提供商來通過因特網連接)。
[0026]下面將參照本發明實施例的方法、裝置(系統)和計算機程序產品的流程圖和/或框圖描述本發明。應當理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數據處理裝置的處理器,從而生產出一種虛擬機,這些計算機程序指令通過計算機或其它可編程數據處理裝置執行,產生了實現流程圖和/或框圖中的方框中規定的功能/操作的裝置。
[0027]也可以把這些計算機程序指令存儲在能使得計算機或其它可編程數據處理裝置以特定方式工作的計算機可讀介質中,這樣,存儲在計算機可讀介質中的指令就產生出一個包括實現流程圖和/或框圖中的方框中規定的功能/操作的指令裝置(instruct1nmeans)的制造品(manufacture)。
[0028]也可以把計算機程序指令加載到計算機、其它可編程數據處理裝置、或其它設備上,使得在計算機、其它可編程數據處理裝置或其它設備上執行一系列操作步驟,以產生計算機實現的過程,從而使得在計算機或其它可編程裝置上執行的指令能夠提供實現流程圖和/或框圖中的方框中規定的功能/操作的過程。
[0029]圖3示出了適于用來實現本發明實施方式的示例性計算機系統/服務器12的框圖。圖3顯示的計算機系統/服務器12僅僅是一個示例,不應對本發明實施例的功能和使用范圍帶來任何限制。
[0030]如圖3所示,計算機系統/服務器12以通用計算設備的形式表現。計算機系統/服務器12的組件可以包括但不限于:一個或者多個處理器或者處理單元16,系統存儲器28,連接不同系統組件(包括系統存儲器28和處理單元16)的總線18。
[0031]總線18表示幾類總線結構中的一種或多種,包括存儲器總線或者存儲器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結構中的任意總線結構的局域總線。舉例來說,這些體系結構包括但不限于工業標準體系結構(ISA)總線,微通道體系結構(MAC)總線,增強型ISA總線、視頻電子標準協會(VESA)局域總線以及外圍組件互連(PCI)總線。
[0032]計算機系統/服務器12典型地包括多種計算機系統可讀介質。這些介質可以是任何能夠被計算機系統/服務器12訪問的可用介質,包括易失性和非易失性介質,可遷移的和不可遷移的介質。
[0033]系統存儲器28可以包括易失性存儲器形式的計算機系統可讀介質,例如隨機存取存儲器(RAM)30和/或高速緩存存儲器32。計算機系統/服務器12可以進一步包括其它可遷移/不可遷移的、易失性/非易失性計算機系統存儲介質。僅作為舉例,存儲系統34可以用于讀寫不可遷移的、非易失性磁介質(圖3未顯示,通常稱為“硬盤驅動器”)。盡管圖3中未示出,可以提供用于對可遷移非易失性磁盤(例如“軟盤”)讀寫的磁盤驅動器,以及對可遷移非易失性光盤(例如CD-ROM,DVD-ROM或者其它光介質)讀寫的光盤驅動器。在這些情況下,每個驅動器可以通過一個或者多個數據介質接口與總線18相連。存儲器28可以包括至少一個程序產品,該程序產品具有一組(例如至少一個)程序模塊,這些程序模塊被配置以執行本發明各實施例的功能。
[0034]具有一組(至少一個)程序模塊42的程序/實用工具40,可以存儲在例如存儲器28中,這樣的程序模塊42包括——但不限于——操作系統、一個或者多個應用程序、其它程序模塊以及程序數據,這些示例中的每一個或某種組合中可能包括網絡環境的實現。程序模塊42通常執行本發明所描述的實施例中的功能和/或方法。
[0035]計算機系統/服務器12也可以與一個或多個外部設備14 (例如鍵盤、指向設備、顯示器24等)通信,還可與一個或者多個使得用戶能與該計算機系統/服務器12交互的設備通信,和/或與使得該計算機系統/服務器12能與一個或多個其它計算設備進行通信的任何設備(例如網卡,調制解調器等等)通信。這種通信可以通過輸入/輸出(1)接口 22進行。并且,計算機系統/服務器12還可以通過網絡適配器20與一個或者多個網絡(例如局域網(LAN),廣域網(WAN)和/或公共網絡,例如因特網)通信。如圖所示,網絡適配器20通過總線18與計算機系統/服務器12的其它模塊通信。應當明白,盡管圖中未示出,可以結合計算機系統/服務器12使用其它硬件和/或軟件模塊,包括但不限于:微代碼、設備驅動器、冗余處理單元、外部磁盤驅動陣列、RAID系統、磁帶驅動器以及數據備份存儲系統等。
[0036]下面,將參照附圖來描述本發明的實施例。
[0037]在本公開的一種實施方式中,提出了一種多路徑管理方法,用于管理從主機路由1到存儲系統的多個LUN時的路徑,其中存儲系統的多個LUN被映射到主機上。圖4示意性示出了多路徑管理方法的方法流程圖,根據圖4,在步驟S402,將在主機和存儲系統之間具有相同路徑的LUN劃分為一個LUN組;在步驟S403,對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑。在一種實施方式中,還包括步驟S401,獲得在主機和存儲系統之間具有相同路徑的LUN。步驟S401之所以是一種優選的實施方式,是因為某些時候,已經通過其它方式得到主機和存儲系統之間具有相同路徑的LUN,例如在映射LUN到主機時已經直接知道那些LUN屬于哪個物理存儲器,可以直接分組。
[0038]這樣,根據前面的例子,原來主機有1000個LUN映射到該主機,主機有6條訪問存儲系統的路徑,則主機上的多路徑軟件將會管理6000條路徑,對應每個LUN,使用一個路徑管理算法線程,則總共需要1000個路徑管理算法線程。假設使用本發明方法,LUN1-500來自存儲系統A,具有相同的存儲路徑;LUN501-1000來自存儲系統B,也具有相同的存儲路徑;則在主機端有兩個LUN組,LUN1-500被分為第一組,LUN501-1000被分為第二組。將一個LUN組的所有LUN綁定在該組所有LUN都使用的路徑上的結果是:第一組LUN有6條路徑;第二組LUN也有6條路徑,由于路徑是基于LUN組的中心管理,即對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑,則在第一組內只需要使用一個路徑管理算法的線程管理這6條路徑,路徑管理線程在第一組內對所有的LUN都使用這6條路徑,當有1需要路由到該組內的LUN時,該路徑管理線程的線程在上述6條路徑中選擇一條可用的路徑;在第二組亦然,則主機端只有兩個路徑管理算法的線程,每個線程只要管理6條路徑,與現有技術相比,大大減少了路徑管理的工作量和需要的資源量。
[0039]具體實施中,在步驟S401中需要獲得在主機和存儲系統之間具有相同路徑的LUN,該步驟可以有多種實施方式,可以由主機直接獲得具有相同路徑的LUN,也可以由和主機之間耦接的其它設備獲得具有相同路徑的LUN。下面介紹一種最基本的實施方式。
[0040]圖5不出了獲得在主機和存儲系統之間具有相同路徑的LUN的一種實施方式的具體流程,根據圖5,在步驟S501,掃描獲得主機端映射的至少一部分LUN。該步驟可以通過命令觸發(比如AIX操作系統的cfgmgr命令),也可以周期性地運行命令來觸發,也可以通過重啟主機來觸發。在步驟S502,分別通過主機上的各總線適配器HBA端口向光纖交換機發送命令,來查詢HBA端口能夠訪問的存儲系統的光纖適配器(FC adapter )FC端口的端口 ID(Port ID);在步驟S503,分別接收光纖交換機返回的各HBA端口能夠訪問的各FC端口的端口 ID ;如果各HBA端口已經與返回的端口 ID對應的各FC端口建立了連接,在步驟S504,分別通過各HBA端口對能夠訪問的各FC端口發送命令,獲得不同路徑上的LUN ;其中,特定的HBA端口 ID到特定FC端口 ID為LUN的一條路徑。在這種實施方式中,如果HBA端口沒有與返回的端口 ID對應的FC端口建立了連接,則首先需要通過SCSI協議中的PL0GI/PRLI命令建立連接。發送的SCSI命令為INQUIRY和REPORT LUNS0在步驟S505,根據獲得的主機端映射的至少一部分LUN以及不同路徑上的LUN,獲得在主機和存儲系統之間具有相同路徑的LUN。由于同一個LUN會從所有建立連接的存儲系統的FC端口和主機端的HBA端口來上報(即從所有可用的多路徑來上報),所以只要記錄同一個LUN是從哪些存儲端FC端口到哪些主機端HBA端口上報的,即記錄下LUN上報的路徑,然后在每個上報LUN之間進行上報路徑的比對,即可知道哪些LUN擁有同樣的路徑。
[0041]在另外一種實施方式中,有些存儲系統有這樣一種功能:即將一個LUN映射給某個主機的時候,指定這個LUN只能通過特定的存儲端FC端口來訪問。對于不支持該功能的存儲來說,主機到存儲的多條路徑也就是主機能夠訪問存儲上LUN的多條路徑,這也意味著主機上對來自同一存儲的LUN的訪問路徑都是一樣的。對于支持該功能的存儲來說,只要不使用這個功能,那么在主機上來自同一存儲的LUN的訪問路徑也就是一樣的。只要滿足以上條件,在判斷主機上的LUN是否擁有相同路徑的時候,只要判斷LUN是否來自同一存儲就可以了,因為來自同一存儲的LUN擁有同樣的路徑。
[0042]這樣就得到了在主機和存儲系統之間具有相同路徑的LUN,就可以執行步驟S402,將在主機和存儲系統之間具有相同路徑的LUN劃分為一個LUN組,并且對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑。
[0043]路徑選擇算法可以使用現有的任何一種路徑選擇算法,既可以對不同的LUN組,使用同一種路徑選擇算法,也可以對不同的LUN組,使用不同的路徑選擇算法。例如某個LUN組使用Failover算法,只選擇一條路徑路由10,只有在該路徑故障的情況下才會選擇其它路徑路由10,則該組中所有的LUN選擇可用的路徑后,都使用一條路徑路由10,只有在該路徑故障的情況下,才會選擇其它路徑路由10,則該組的全部LUN都切換到其它路徑上。同樣也可以使用Round Robin和Load Balance算法選擇路徑。
[0044]在使用路徑選擇算法線程管理多路徑的過程中,在一種實施方式中,需要對每一條路徑維護該路徑的路徑狀態。路徑狀態可以有3種,一種是可用(Available),也就是該路徑沒有故障,能夠路由10;—種是失敗(Fail),也就是該路徑有故障,不能路由10;另外一種是部分失敗(Partly Fail),也就是該路徑對部分LUN不能路由10。可以用不同的參數或者其它形式來表示,例如用O表示路徑可用,I表示路徑失敗,2表示路徑部分失敗等等。路徑狀態的默認值是路徑可用。
[0045]對于主機,圖6示出了使用路徑選擇算法的【具體實施方式】流程,根據圖6,在步驟S601,接收一個路由1到LUN的請求,通過該LUN所在的LUN組使用的路徑選擇線程在所述相同路徑上選擇一條路徑狀態為可用或者部分失敗的路徑,然后利用選擇的路徑路由該1到該LUN ;在步驟S602,判斷1路由是否成功,如果1路由成功,則該路徑的路徑狀態保持不變,即繼續可用,返回步驟S601,繼續接收路由1請求。如果1路由失敗,在步驟S603,判斷該路徑是否為該LUN所在LUN組的最后一條路徑狀態為可用的路徑;如果該路徑是該LUN所在LUN組的最后一條路徑狀態為可用的路徑,在步驟S604,不置該LUN組上的該路徑的路徑狀態為失敗(否則整個LUN組將沒有可用路徑),而是置該LUN組上的該路徑狀態為部分失敗,同時在該LUN上置標志位,以表示該LUN不能使用該路徑來路由10。這時,這個1就不能路由到相應的LUN,主機會收到系統報告的錯誤。然后返回步驟S601,繼續接收路由1的請求。如果這條路徑不是該LUN所在LUN組的最后一條路徑狀態為可用的路徑,在步驟S605,置該LUN組上的這條路徑的路徑狀態為失敗,從而使LUN組內的所有LUN將不再使用該路徑來路由10,以及使用該LUN所在的LUN組使用的路徑選擇線程在所述相同路徑上重新選擇另外一條可用路徑,返回步驟S602,使用新選擇的路徑路由1后,繼續判斷1路由是否成功。
[0046]在一種優選的實施方式中,在步驟S605中在LUN組上的某條路徑的路徑狀態被置為失敗之后,繼續在步驟S606,檢查LUN組內的其它LUN是否能夠使用該失敗路徑來訪問。如果LUN組內所有其它LUN都不能夠使用該失敗路徑來訪問,則保持LUN組上的該路徑的失敗狀態,返回步驟S602,使用新選擇的路徑路由1后,繼續判斷1路由是否成功。一般來說,此類情況為絕大多數,因為路徑故障都是由主機端HBA端口故障、存儲端PC端口故障、光纖交換機端口故障、或者各端口間光纖線連接故障導致的,這些故障導致的路徑故障情況下,會導致某個LUN組內的所有LUN都不能夠使用該路徑來路由10。但是,如果LUN組內的其它LUN中有些LUN能給通過該失敗路徑訪問,則在步驟S607,將LUN組上的該路徑的路徑狀態置為部分失敗,并在LUN組內的所有不能通過該路徑訪問到的LUN上置標志位,表示這些LUN不能夠使用該路徑來路由10。同樣,此類情況為極少數,只有當存儲對于自身內部的有些LUN能夠訪問,有些LUN不能夠訪問時才會出現。此時存儲本身已經出了較大故障,但是本多路徑管理方法能夠很好地應對這種故障,使其不影響到其它能夠正常訪問到的LUN,然后返回步驟S602,使用新選擇的路徑路由1后,繼續判斷1路由是否成功。具體的檢查的方法可以為:通過該路徑向LUN發送SCSI協議中的INQUIRY命令;也可以為:通過該路徑向LUN發送SCSI協議中的Mode Sense命令。
[0047]下面給出LUN上設置標志位的兩種實現方法:
[0048]1.LUN組內的每個LUN的數據結構內部可以定義一個指針,默認指向空。當需要在LUN上置標志位說明某些路徑不能使用時,就臨時分配一個字節(8個比特,可以代表8條路徑的狀態)的內存,并且給這個字節賦值(比如00000001代表不能使用LUN組上的第一條路徑,00001001代表不能使用LUN組上的第一和第四條路徑),然后讓前面提到的指針指向該內存空間。這樣這個指針就起到了標志位的作用。如果LUN組上的路徑較多,那就分配兩個字節或者三個字節的內存來表示。
[0049]2.LUN組內的每個LUN的數據結構內部可以定義一個字節(8個比特,可以代表8條路徑的狀態;如果LUN組上的路徑較多,就定義兩個字節或三個字節),默認值為O。當需要在LUN上置標志位說明某些路徑不能使用時,就給這個字節內部賦值,比如00000001代表不能使用LUN組上的第一條路徑,00001001代表不能使用LUN組上的第一和第四條路徑。這樣這個字節就起到了標志位的作用。
[0050]上述方法可以選擇可用路徑路由10,同時也會發現故障路徑,即路徑狀態為失敗或者部分失敗的路徑。故障路徑被排除后,還需要回收故障路徑。因此,在一種優選的實施方式中,如果某個LUN組有故障路徑,可以不定期或周期性地檢查LUN組內是否所有的LUN都能夠重新使用該路徑訪問。這里周期性檢查的周期可以由用戶配置。例如可以I分鐘檢查一次或半分鐘檢查一次等;檢查的方法可以為:通過該路徑向LUN發送SCSI協議中的INQUIRY命令,也可以通過該路徑向LUN發送SCSI協議中的Mode Sense命令進行檢查。如果LUN組內所有LUN都能通過該路徑訪問,則置LUN組上該路徑的路徑狀態為可用,如果原來的路徑狀態為部分失敗,還要刪除LUN上的不能使用該路徑的標志位;如果部分LUN能訪問,部分LUN不能訪問(這種情況極少),則置LUN組上該路徑的路徑狀態為部分失敗,在LUN組內的那些不能訪問到的LUN上置標志位,表示這些LUN不能使用這條路徑來路由1 ;如果LUN組內所有LUN都不能通過該路徑訪問,則繼續不定期或周期性地檢查。這樣,修復故障路徑后,就能夠恢復路徑的狀態到可用,可以進一步減少1延遲。
[0051]現有技術中,多路徑軟件對每個LUN上的多路徑分開處理。當在某個LUN的某條路徑上路由1失敗時,則置該路徑狀態為失敗;如果其它LUN上也有相同的路徑,那么這些路徑還是可用狀態。但是在絕大多數情況下,這些LUN上的相同路徑實際上是有故障不能用來路由1的,不過多路徑軟件并不知道,還會使用這些實際上已經故障了的但狀態仍是可用的路徑來路由10,造成更多的1路由失敗,導致1延遲增大以及系統開銷的上升。采用本發明中的多路徑管理方法,就能很好地規避上述問題。當在某個LUN的某條路徑上路由1失敗時,會在LUN組上置該路徑狀態為失敗狀態(只要該路徑不是LUN組的最后一條路徑狀態為可用的路徑),LUN組內所有的LUN都不在使用該路徑。
[0052]在同一個發明構思下,本發明的實施方式還公開了一種多路徑管理系統,用于管理從主機路由1到存儲系統的多個邏輯卷LUN的路徑,其中存儲系統的多個LUN被映射到主機上,圖7示出了一種多路徑管理系統的結構框圖,根據圖7,該系統包括:分組裝置702,被配置為將在主機和存儲系統之間具有相同路徑的LUN劃分為一個LUN組;以及路徑選擇裝置703,被配置為對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑。在一種優選的實施方式中,該系統還包括:獲得裝置701,被配置為獲得在主機和存儲系統之間具有相同路徑的LUN。
[0053]在一種實施方式中,上述獲得裝置包括:掃描裝置,被配置為掃描獲得主機端映射的至少一部分LUN ;查詢裝置,被配置為分別通過主機上的各總線適配器HBA端口向光纖交換機發送命令,來查詢HBA端口能夠訪問的存儲系統的各光纖適配器FC端口的端口 ID ;接收裝置,被配置為分別接收光纖交換機返回的各HBA端口能夠訪問的各FC端口的端口 ID ;不同路徑LUN獲得裝置,被配置為如果各HBA端口已經與返回的端口 ID對應的各FC端口建立了連接,分別通過各HBA端口對能夠訪問的各FC端口發送命令,獲得不同路徑上的LUN,其中,特定的HBA端口 ID到特定FC端口 ID為LUN的一條路徑。以及相同路徑LUN獲得裝置,被配置為根據獲得的主機端映射的至少一部分LUN以及不同路徑上的LUN,獲得在主機和存儲系統之間具有相同路徑的LUN。
[0054]在另一種實施方式中,路徑選擇裝置包括:狀態維護裝置,被配置為對每一條路徑維護該路徑的路徑狀態,其中路徑狀態有3種:可用一表示該路徑沒有故障,能夠路由1 ;失敗一表示該路徑有故障,不能路由1 ;以及部分失敗一表示該路徑對部分LUN不能路由10。
[0055]在又一種實施方式中,路徑選擇裝置進一步被配置為:接收路由1到LUN的請求;通過該LUN所在的LUN組使用的路徑選擇線程在所述相同路徑上選擇一條路徑狀態為可用或者部分失敗的路徑;利用選擇的路徑路由該1到該LUN。在進一步的實施方式中,路徑選擇裝置利用選擇的路徑路由該1到該LUN后進一步配置為:判斷1路由是否成功;如果1路由失敗,進一步判斷該路徑是否為該LUN所在LUN組的最后一條路徑狀態為可用的路徑;如果該路徑是該LUN所在LUN組的最后一條路徑狀態為可用的路徑,則置該LUN組上的該路徑狀態為部分失敗;并在該LUN上置標志位,表示該LUN不能使用該路徑路由10。如果路徑選擇裝置判斷如果該路徑不是該LUN所在LUN組的最后一條路徑狀態為可用的路徑,則置該LUN組上的該路徑的路徑狀態為失敗從而使LUN組內的所有LUN不再使用該路徑來路由10;以及應用該LUN所在的LUN組使用的路徑選擇線程在所述相同路徑上重新選擇另外一條可用路徑。
[0056]在更進一步的實施方式中,路徑選擇裝置置該LUN組上的該路徑的路徑狀態為失敗還被進一步配置為:檢查LUN組內的其它LUN是否能夠使用該失敗路徑來訪問;如果LUN組內所有其它LUN都不能夠使用該失敗路徑來訪問,則保持LUN組上的該路徑狀態為失敗;如果LUN組內的其它LUN中有些LUN能給通過該失敗路徑訪問,則將LUN組上的該路徑的路徑狀態置為部分失敗,在LUN組內的所有不能通過該路徑訪問到的LUN上置標志位,表示這些LUN不能夠使用該路徑來路由10。
[0057]在又一個實施方式中,該系統還包括路徑恢復裝置,被配置為:對于路徑狀態為路徑失敗或者路徑部分失敗的路徑,檢查LUN組內是否所有的LUN都能夠重新使用該路徑訪問;如果LUN組內所有LUN都能通過該路徑訪問,則置LUN組上該路徑的路徑狀態為可用,并且如果原來的路徑狀態為部分失敗,刪除LUN上的不能使用該路徑的標志位;如果部分LUN能訪問,部分LUN不能訪問,則置LUN組上該路徑的路徑狀態為部分失敗,在LUN組內的那些不能訪問到的LUN上置標志位,表示這些LUN不能使用這條路徑來路由1 ;以及如果LUN組內所有LUN都不能通過該路徑訪問,則繼續檢查。
[0058]附圖中的流程圖和框圖顯示了根據本發明的多個實施例的系統、方法和計算機程序產品的可能實現的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現規定的邏輯功能的可執行指令。也應當注意,在有些作為替換的實現中,方框中所標注的功能也可以以不同于附圖中所標注的順序發生。例如,兩個連續的方框實際上可以基本并行地執行,它們有時也可以按相反的順序執行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執行規定的功能或操作的專用的基于硬件的系統來實現,或者可以用專用硬件與計算機指令的組合來實現。
[0059]以上已經描述了本發明的各實施例,上述說明是示例性的,并非窮盡性的,并且也不限于所披露的各實施例。在不偏離所說明的各實施例的范圍和精神的情況下,對于本【技術領域】的普通技術人員來說許多修改和變更都是顯而易見的。本文中所用術語的選擇,旨在最好地解釋各實施例的原理、實際應用或對市場中的技術的技術改進,或者使本【技術領域】的其它普通技術人員能理解本文披露的各實施例。
【權利要求】
1.一種多路徑管理方法,用于管理從主機路由1到存儲系統的多個邏輯卷LUN的路徑,其中存儲系統的多個LUN被映射到主機上,該方法包括: 將在主機和存儲系統之間具有相同路徑的LUN劃分為一個LUN組;以及 對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑。
2.如權利要求1所述的方法,該方法還包括:獲得在主機和存儲系統之間具有相同路徑的LUN。
3.如權利要求2所述的方法,其中獲得在主機和存儲系統之間具有相同路徑的LUN包括: 掃描獲得主機端映射的至少一部分LUN ; 分別通過主機上的各總線適配器HBA端口向光纖交換機發送命令,來查詢HBA端口能夠訪問的存儲系統的各光纖適配器FC端口的端口 ID ; 分別接收光纖交換機返回的各HBA端口能夠訪問的各FC端口的端口 ID ; 如果各HBA端口已經與返回的端口 ID對應的各FC端口建立了連接,分別通過各HBA端口對能夠訪問的各FC端口發送命令,獲得不同路徑上的LUN,其中,特定的HBA端口 ID到特定FC端口 ID為LUN的一條路徑; 根據獲得的主機端映射的至少一部分LUN以及不同路徑上的LUN,獲得在主機和存儲系統之間具有相同路徑的LUN。
4.如權利要求1-3之一所述的方法,其中對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑包括:對每一條路徑維護該路徑的路徑狀態,其中路徑狀態有3種: 可用一表示該路徑沒有故障,能夠路由1 ; 失敗一表示該路徑有故障,不能路由1 ; 部分失敗一表示該路徑對部分LUN不能路由10。
5.如權利要求4所述的方法,其中對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑包括: 接收路由1到LUN的請求; 通過該LUN所在的LUN組使用的路徑選擇線程在所述相同路徑上選擇一條狀態為可用或者部分失敗的路徑; 利用選擇的路徑路由該1到該LUN。
6.如權利要求5所述的方法,其中利用選擇的路徑路由該1到該LUN后進一步包括: 判斷1路由是否成功; 如果1路由失敗,進一步判斷該路徑是否為該LUN所在LUN組的最后一條路徑狀態為可用的路徑; 如果該路徑是該LUN所在LUN組的最后一條路徑狀態為可用的路徑,則 置該LUN組上的該路徑狀態為部分失敗; 在該LUN上置標志位,表示該LUN不能使用該路徑路由10。
7.如權利要求6所述的方法,其中如果該路徑不是該LUN所在LUN組的最后一條路徑狀態為可用的路徑,則 置該LUN組上的該路徑的路徑狀態為失敗從而使LUN組內的所有LUN不再使用該路徑來路由1 ;以及 應用該LUN所在的LUN組使用的路徑選擇線程在所述相同路徑上重新選擇另外一條可用路徑。
8.如權利要求7所述的方法,其中所述置該LUN組上的該路徑的路徑狀態為失敗還包括: 檢查LUN組內的其它LUN是否能夠使用該失敗路徑來訪問; 如果LUN組內所有其它LUN都不能夠使用該失敗路徑來訪問,則保持LUN組上的該路徑狀態為失敗; 如果LUN組內的其它LUN中有些LUN能給通過該失敗路徑訪問,則將LUN組上的該路徑的路徑狀態置為部分失敗,在LUN組內的所有不能通過該路徑訪問的LUN上置標志位,表示這些LUN不能夠使用該路徑來路由10。
9.如權利要求4-8之一所述的方法,該方法還包括: 對于路徑狀態為路徑失敗或者路徑部分失敗的路徑,檢查LUN組內是否所有的LUN都能夠重新使用該路徑訪問; 如果LUN組內所有LUN都能通過該路徑訪問,則置LUN組上該路徑的路徑狀態為可用,并且如果原來的路徑狀態為部分失敗,刪除LUN上的不能使用該路徑的標志位; 如果部分LUN能訪問,部分LUN不能訪問,則置LUN組上該路徑的路徑狀態為部分失敗,在LUN組內的那些不能訪問的LUN上置標志位,表示這些LUN不能使用這條路徑來路由1 ; 如果LUN組內所有LUN都不能通過該路徑訪問,則繼續檢查。
10.一種多路徑管理系統,用于管理從主機路由1到存儲系統的多個邏輯卷LUN的路徑,其中存儲系統的多個LUN被映射到主機上,該系統包括: 分組裝置,被配置為將在主機和存儲系統之間具有相同路徑的LUN劃分為一個LUN組; 路徑選擇裝置,被配置為對一個LUN組中的所有LUN使用一個路徑選擇線程管理所述相同路徑。
11.如權利要求10所述的系統,該系統還包括:獲得裝置,被配置為獲得在主機和存儲系統之間具有相同路徑的LUN。
12.如權利要求11所述的系統,其中獲得裝置包括: 掃描裝置,被配置為掃描獲得主機端映射的至少一部分LUN ; 查詢裝置,被配置為分別通過主機上的各總線適配器HBA端口向光纖交換機發送命令,來查詢HBA端口能夠訪問的存儲系統的各光纖適配器FC端口的端口 ID ; 接收裝置,被配置為分別接收光纖交換機返回的各HBA端口能夠訪問的各FC端口的端Π ID ; 不同路徑LUN獲得裝置,被配置為如果各HBA端口已經與返回的端口 ID對應的各FC端口建立了連接,分別通過各HBA端口對能夠訪問的各FC端口發送命令,獲得不同路徑上的LUN,其中,特定的HBA端口 ID到特定FC端口 ID為LUN的一條路徑; 相同路徑LUN獲得裝置,被配置為根據獲得的主機端映射的至少一部分LUN以及不同路徑上的LUN,獲得在主機和存儲系統之間具有相同路徑的LUN。
13.如權利要求10-12之一所述的系統,其中路徑選擇裝置包括:狀態維護裝置,被配置為對每一條路徑維護該路徑的路徑狀態,其中路徑狀態有3種: 可用一表示該路徑沒有故障,能夠路由1 ; 失敗一表示該路徑有故障,不能路由1 ; 部分失敗一表示該路徑對部分LUN不能路由10。
14.如權利要求13所述的系統,其中路徑選擇裝置進一步被配置為: 接收路由1到LUN的請求; 通過該LUN所在的LUN組使用的路徑選擇線程在所述相同路徑上選擇一條路徑狀態為可用或者部分失敗的路徑; 利用選擇的路徑路由該1到該LUN。
15.如權利要求14所述的系統,其中路徑選擇裝置利用選擇的路徑路由該1到該LUN后進一步配置為: 判斷1路由是否成功; 如果1路由失敗,進一步判斷該路徑是否為該LUN所在LUN組的最后一條路徑狀態為可用的路徑; 如果該路徑是該LUN所在LUN組的最后一條路徑狀態為可用的路徑,則 置該LUN組上的該路徑狀態為部分失敗; 在該LUN上置標志位,表示該LUN不能使用該路徑路由10。
16.如權利要求15所述的系統,其中路徑選擇裝置判斷如果該路徑不是該LUN所在LUN組的最后一條路徑狀態為可用的路徑,則 置該LUN組上的該路徑的路徑狀態為失敗從而使LUN組內的所有LUN不再使用該路徑來路由1 ;以及 應用該LUN所在的LUN組使用的路徑選擇線程在所述相同路徑上重新選擇另外一條可用路徑。
17.如權利要求16所述的系統,其中路徑選擇裝置置該LUN組上的該路徑的路徑狀態為失敗還被進一步配置為: 檢查LUN組內的其它LUN是否能夠使用該失敗路徑來訪問; 如果LUN組內所有其它LUN都不能夠使用該失敗路徑來訪問,則保持LUN組上的該路徑狀態為失敗; 如果LUN組內的其它LUN中有些LUN能給通過該失敗路徑訪問,則將LUN組上的該路徑的路徑狀態置為部分失敗,在LUN組內的所有不能通過該路徑訪問的LUN上置標志位,表示這些LUN不能夠使用該路徑來路由10。
18.如權利要求13-17之一所述的系統,該系統還包括路徑恢復裝置,被配置為: 對于路徑狀態為路徑失敗或者路徑部分失敗的路徑,檢查LUN組內是否所有的LUN都能夠重新使用該路徑訪問; 如果LUN組內所有LUN都能通過該路徑訪問,則置LUN組上該路徑的路徑狀態為可用,并且如果原來的路徑狀態為部分失敗,刪除LUN上的不能使用該路徑的標志位; 如果部分LUN能訪問,部分LUN不能訪問,則置LUN組上該路徑的路徑狀態為部分失敗,在LUN組內的那些不能訪問的LUN上置標志位,表示這些LUN不能使用這條路徑來路由
10;
如果LUN組內所有LUN都不能通過該路徑訪問,則繼續檢查。
【文檔編號】G06F3/06GK104423889SQ201310375639
【公開日】2015年3月18日 申請日期:2013年8月26日 優先權日:2013年8月26日
【發明者】張耀東, 付曉飛, 胡家樂, 石鵬, 余志華 申請人:國際商業機器公司