關於儲存控制器的多重路徑機制
ALUA即“Asymmetric Logical Unit Access(非同步邏輯單元訪問)”的縮寫,它是前端控制器多重路徑機制之一。
前端控制器多重路徑機制一定程度上決定儲存的讀寫效能和可靠性,現有的前端控制器多重路徑機制可分為三大類:
A/A:Symmetric Active/Acivie,對於特定的LUN來說,在它的路勁中,兩個儲存控制器的目標連接埠均處於主動/最佳化(active/optimized)狀態。兩個控制器之間實現高速互聯的通訊,一個IO發到控制器端,兩個控制器可同時參與處理;當一個控制器繁忙,系統不需要主機端的負載平衡軟體參與就可以自動實現負載平衡。
ALUA:Asymmetric Active/Active,對於特定的LUN來說,在它的路徑中,一個控制器的目標連接埠處於主動/最佳化(active/optimized)狀態,另一個控制器的目標連接埠處於主動/非最佳化(active/unoptimized)狀態。在某一個時刻,某個LUN只是屬於某一個控制器,要想實現兩邊的負載平衡,就是將任務A扔給控制器A,將任務B扔給控制器B,對於同一個任務來說,任何時候只有一個控制器在控制。
A/P:Active/Passive,對於特定的LUN來說,在它的路徑中,一個控制器的目標連接埠處於主動/最佳化(active/optimized)狀態,另一個控制器的目標連接埠處於備用(standby)狀態。其負載平衡及任務處理方式與ALUA類似。
Active/optimized、Active/unoptimized、Standby和Unavailable是目標連接埠的四種訪問狀態,在相應訪問狀態下,裝置伺服器(即陣列控制器)只能回應相應的命令標準(命令標準由ISO/IEC 14776-453檔案Part 453:SPC-3制定),這就決定了在某一時刻是否可以通過某個目標連接埠訪問邏輯單元。
目標連接埠的狀態可以轉換,目標連接埠從一個狀態轉換到另一個狀態的過程稱為過渡。
Active/optimized:目標連接埠有能力立即訪問邏輯單元。
Active/unoptimized:只能回應相應的命令標準,可以過渡到Active/optimized。
Standby:只能回應相應的命令標準,可以過渡到Active/optimized。
Unavailable:只能回應有限的命令集,不可以過渡到其他三種狀態。
在A/A陣列中,管理員無需指定每個LUN的預設所有者,當路徑出現故障,將離線故障路徑並重新導向IO到其他路徑,IO重新導向期間,儲存控制器會充分考慮Server Load Balancer等因素並選擇最合適的路徑。對於應用程式,路徑切換過程是透明的的,幾乎不會有延遲(延遲時間一般為幾秒)。
在ALUA或A/P陣列中,管理員需指定每個LUN的預設所有者,設定一些LUN的預設所有者為控制器A,另外一些LUN的預設所有者為控制器 B, 人為在兩個控制器之間進行負載平衡;如果路徑發生故障,將重新分配IO流量到其他可用的路徑,同時,停止故障路徑上的IO。對於應用程式,路徑切換過程是透明的,然而,會有延遲(延遲時間一般為幾十秒)。
在制定Server Load Balancer策略時,必須同時兼顧多重路徑軟體功能及存放裝置陣列的多重路徑機制(A/A-ALUA-A/P)。
MS3000/MS5000屬於ALUA陣列,H公司的IX3000屬於A/P陣列,HDS推出的AMS2000屬於A/A陣列。從理論上來說,對於不同的多重路徑機制,最直觀的表現是路徑切換的延時不同,A/A機制最優且幾乎無延時,ALUA機制稍差且有延時,A/P機制最差且延時更大。
存放裝置有兩個I/O控制器,每個I/O控制器上有兩個串連主機的連接埠。存放裝置中還有n個磁碟,並假定每個磁碟對應一個LUN。對於存放裝置中的LUN,可以有幾種不同的多重路徑訪問方式:
Active-Active(A/A):如果對於存放裝置的同一個LUN的I/O請求訪問可以同時在兩個I/O控制器,或者某一個控制器的兩個連接埠上同時進行,則稱之為active-active(A/A)型的存放裝置。
Active-Passive(A/P)。如果存放裝置只在一個(primary)I/O控制器(連接埠)上接受和執行對LUN的I/O請求,但是,它可以被切換,或者fail over,到從另一個(secondary)I/O控制器(連接埠)來訪問這個LUN,則它稱為active-passive(A/P)型的存放裝置。這種切換,稱為LUN failover,或者LUN trespass。
Active-Active型的存放裝置又進而分為兩種: 對稱型(A/A-S)和非對稱型(A/A-A):
在active-active存放裝置中,LUN可以同時通過兩個I/O控制器 或者連接埠來訪問,唯一的限制在於通過兩個控制器(連接埠)訪問LUN的效能是否有差別。如果通過secondary控制器或者連接埠對LUN進行I/O的效能要比通過primary控制器(連接埠)低得多,則為非對稱型;如果兩者效能相同,則為對稱型。
Active-Passive型的存放裝置又可分為不同的類型:隱式failover型和顯式failover型:
隱式failover型存放裝置根據針對I/O請求接收的路徑不同來觸發LUN failover,即它在secondary路徑上接收到對LUN的請求時,會自動從primary I/O路徑failover到secondary路徑。因為LUN failover(也稱為trespass)是一個慢操作,會影響到效能,在A/P存放裝置上如何有效管理LUN trespass是一個關鍵課題,要使得在給定時刻對某個LUN的所有I/O應該只流向其中一個I/O控制器(連接埠)。而顯式failover型存放裝置只是在從主機上接收到特定的SCSI命令時才進行fail over。顯式failover提供了A/P存放裝置用在叢集環境(即多個主機可以直接對LUN發起I/O請求)中實現高效能所需的控制。如果沒有顯式failover能力,叢集軟體必須在發起隱式failover之前,仔細同步所有主機對LUN的訪問,防止來自多個主機的I/O請求導致持續的failover。
LUN failover型和LUN組failover型:
如果各個LUN獨立地從一個I/O控制器(連接埠)fail over到另一個I/O控制器(連接埠),則稱為LUN failover型。但是,某些active-passive存放裝置可以通過管理將多個LUN配置成LUN組,並且實現組中LUN同時fail over,即在組中一個LUN的所有primary I/O控制器(連接埠)故障時,將組中所有LUN都fail over到secondary I/O控制器(連接埠),具有這種能力的存放裝置稱為組failover型。組failover要比單個LUN的fail over快得多,可以降低I/O控制器(連接埠)故障對應用程式的衝擊,尤其在存放裝置存在大量的磁碟(LUN)的情況下。
如果同時考慮I/O控制器和連接埠,則還存在一種多重路徑並髮型Active-Passive(A/P-C)的訪問方式。這時,存放裝置可以在同一個I/O控制器的兩個連接埠同時接收並執行針對某個LUN的I/O請求,只是在當這個I/O控制器,或者說這個I/O控制器的兩個連接埠,出現故障之後,它會failover到另一個I/O控制器的連接埠。