摘要:通過介紹高可用性系統的設計思想和iSCSI協議的基本原理,以節點級VSCU(虛擬存儲控制單元)高可用性子系統的設計和實現為研究重點,提出一種利用iSCSI技術構建遠程數據容災系統的結構模型,并給出了其實現方案和實驗平臺的構建#65377;
關鍵詞:iSCSI協議; 高可用性; 虛擬存儲控制單元; 容災
中圖分類號:TP393.01文獻標志碼:A
文章編號:1001-3695(2007)04-0226-03
隨著社會信息化程度的不斷提高,計算機系統與Internet服務在各個領域的應用越來越廣,企業也面臨著數據量急速增長的問題#65377;網絡存儲技術越來越被企業所接受,并在企業的商業活動中充當著非常重要的角色#65377;企業依靠網絡存儲系統記錄關鍵數據和各種有用信息,這些數據和信息在各種業務應用中起著至關重要的作用#65377;一旦數據丟失,所有的計算能力將變得毫無價值#65377;因此構建具備高可用性的網絡存儲系統是企業必須面對的問題#65377;
計算機系統的可用性通常在三種情況下會受到影響:①在系統維護和升級時,由于安裝新的硬件或軟件而引起的系統正常關機;②系統死機#65380;錯誤操作和管理引起的異常失敗;③非計算機系統因素,即系統所在區域遭受自然災害或者計算機系統遭到破壞等不可預測的因素#65377;有效避免或盡量減少上述情況對系統的影響,保證系統能夠為客戶提供全天候不間斷的可靠服務,正是高可用性系統需要解決的問題#65377;
iSCSI協議是網絡存儲領域最活躍的研究方向之一#65377;它建立在SCSI和TCP/IP協議的基礎上,不僅解決了原有的SCSI 總線長度有限,存儲設備擴展能力不足的問題,還可以利用現有的以太網絡構建基于TCP/IP 協議的存儲網絡,大大減少了企業在存儲方面的開支#65377;
相對于以往的網絡接入存儲,iSCSI在成本#65380;開放性#65380;傳輸距離#65380;兼容性#65380;安全性等方面都有其自身的優勢#65377;iSCSI存儲系統之間的連接是通過標準的TCP/IP網絡基礎設施實現的,因此使用iSCSI協議可以構建廣域網范圍內的遠程存儲系統,從而為遠程容災系統的建立提供了可能#65377;利用Cluster技術構建的本地容災系統雖然技術成熟,可靠性高,但局限性也非常明顯,即可保護的災難物理距離過小,地震和洪災等自然災害#65380;戰爭等人為因素都有可能同時摧毀數據中心和備份中心#65377;因此,基于iSCSI存儲系統和高可用性技術的研究,對于構建遠程數據容災系統有著重要的意義#65377;
1高可用性系統設計思路
所謂計算機系統的可用性(Availability),一般定義為計算機系統正常工作時間與計算機系統總運行時間的百分比#65377;為了實現高可用性,不僅要求系統盡可能不發生故障,而且要求系統發生故障后的修復時間盡可能短#65377;高可用性技術能夠自動檢測服務器節點和服務進程錯誤#65380;失效,并且當發生這種情況時能夠自動適當地重新配置系統,使得系統中的其他節點能夠自動承擔這些服務,以實現服務不中斷#65377;
可靠性理論中一般采用RAS指標來定義系統環境的健壯性與完善性#65377;
(1)可靠性(Reliability):一般用平均無故障時間MTTF(Mean Time To Failure)來評測,即兩次故障之間相隔的時間越長,系統的可靠性越高#65377;
(2)可維護性(Maintainability):一般用平均故障修復時間MTTR(Mean Time To Repair)來評測,即修復故障的時間越短,系統的可維護性越高#65377;
(3)可用性(Availability):在允許的極限故障機器數內,系統規范成功運行的概率#65377;已知系統的平均故障發生時間和平均故障修復時間,則系統的可用性為
從上式中可看出,為了提高系統的可用性,可以增加MTTF或者減少MTTR#65377;影響系統高可用性的主要因素是系統失效#65380;錯誤#65380;故障及災難#65377;
高可用性設計就是利用冗余的思想,將可能失效的部件采用兩個或多個作為冗余,從而避免甚至消除單點故障(Single PointOfFailure,SOF)#65377;單點故障是指引起系統整體失效的部件,包括硬件和軟件#65377;當該部件失效時,會使整個系統無法工作#65377;通常高可用性一般是指本地(或一個站點內的)技術,高可用性設計的重點可以從以下幾個方面來考慮#65377;
1.1硬件部件冗余
在一個信息系統中,冗余的硬件部件常常包括電源適配器#65380;存儲子系統控制器#65380;磁盤#65380;內存#65380;固件等#65377;一般而言,硬件部件的冗余由設備提供商提供#65377;因此,創建高可用性系統的第一步就是要考慮應當在何種程度上將備份的硬件部件構建到系統中#65377;例如,冗余供電#65380;磁盤陣列#65380;線路板#65380;風扇和機架均對降低MTTR具有關鍵意義#65377;此外,將這些部件設計成能夠熱插拔可以極大地提高正常運行時間#65377;
1.2路徑冗余
路徑冗余也稱為多路徑技術,目的是防止由于數據傳輸路徑失效而導致整個信息系統的失效,這也是高可用性系統需要考慮的另一個方面#65377;冗余路徑通常由冗余網卡(或者冗余的主機適配卡)#65380;冗余物理線路#65380;冗余的路由器#65380;交換機等設備組成#65377;
冗余路徑可以僅僅作為主要傳輸路徑的后備路徑,在主要傳輸路徑正常工作時,處于不活動狀態,僅當主要傳輸路徑失效時,后備路徑才發揮作用#65377;冗余路徑也可以與主要路徑同時發揮作用,在正常狀態下共同承擔傳輸流量,當主要傳輸路徑失效時,冗余路徑承擔全部流量,直到主要傳輸路徑恢復正常#65377;這兩種冗余方式通常稱為“活動—后備(ActiveStandby)”和“活動—活動(ActiveActive)”模式#65377;
在高可用性系統的設計中,通常采用“活動—后備(ActiveStandby)”模式,為系統提高兩條傳輸路徑,當主要傳輸路徑失效時切換到后備路徑#65377;為了保證系統中主路徑和后備路徑之間的相互切換,在軟件上可以利用尋徑技術#65377;尋徑技術用于管理服務器到存儲子系統之間的冗余連接#65377;在尋徑技術中,對錯誤路徑的發現主要通過計時器和心跳發信機制來實現#65377;計時器原理是發起者在發出命令后啟動計時器,并期望在指定的時間內會從目標接收到預期的反饋信息#65377;
1.3系統集群
為了防止應用系統的失效,系統和應用也需要冗余,這實際上就是集群技術#65377;一個典型的集群包含多臺擁有共享數據存儲空間的服務器,各服務器通過內部局域網相互通信#65377;當一臺服務器發生故障時,它所運行的應用程序將由其他服務器自動接管#65377;在大多數模式下,群集中所有的計算機擁有一個共同的名稱,集群內的任一系統上運行的服務均可被所有的網絡客戶使用#65377;
對于本地化的高可用性系統,集群技術的引入無疑是一種很好的解決方案#65377;但對于iSCSI存儲系統,由于涉及到遠程存儲管理,并且利用TCP/IP網絡進行數據傳輸,不可能利用現有的集群技術實現系統的高可用性#65377;這就需要使用路徑冗余的思想和尋徑技術#65377;
2iSCSI遠程數據容災系統結構設計
iSCSI協議定義了在TCP/IP網絡上發送#65380;接收Block(數據塊)級的存儲數據的規則和方法#65377;Initiator端將需要執行的命令封裝在IP包中,再通過網絡轉發,接收端(Target)收到IP包時,將其還原為SCSI命令和數據并執行,完成之后將返回的SCSI命令和數據封裝到IP包中再傳送回發送端#65377;整個過程在Initiator端的用戶看來,使用遠端的存儲設備和訪問本地的SCSI設備一樣簡單#65377;支持iSCSI技術的服務器和存儲設備能夠直接連接到現有的IP交換機和路由器上,因此iSCSI技術易于安裝#65380;成本低廉#65380;不受地理限制#65380;具有良好的互操作性#65377;
利用iSCSI技術實現的多級協同存儲系統整合了現有的各類存儲設備,形成統一的存儲池,實現存儲數據共享,并對外提供標準接口#65377;在實現單級存儲虛擬化技術的基礎上,利用多臺虛擬存儲控制單元級聯,通過遞階控制手段,構建整個系統環境下的存儲池#65377;以iSCSI多級存儲系統為基礎的遠程數據容災系統結構示意圖如圖1所示#65377;
其中的關鍵部件是虛擬存儲控制單元(VSCU)#65377;它是各類應用服務和存儲資源之間的軟硬件結合體,VSCU一方面為各種應用提供統一的連接和通信手段;另一方面還提供存儲管理功能#65377;VSCU包含iSCSI Target模塊#65380;iSCSI Initiator模塊#65380;虛擬邏輯單元管理#65380;虛擬邏輯卷管理模塊#65380;Web管理模塊等子模塊,并且連接客戶端#65380;Web管理客戶端#65380;SCSI設備端,幾乎包含了多級協同存儲系統中最重要的模塊和提供了幾乎全部的功能,在整個系統中占有非常重要的作用#65377;在考慮系統的高可用性時,把它看作系統中最重要的單點故障點#65377;
整個存儲系統中,Standby Target作為應用系統的遠程數據備份點,為Active Target提供高可用性#65377;Initiator訪問Active Target主服務器VSCU,這一條數據傳輸路徑為主傳輸路徑#65377;Standby Target為備份服務器,不斷監聽主服務器的狀態,主服務器和備份服務器通過Heartbeat心跳信息相互傳遞狀態信息#65377;當Active Target失效時,采用一種客戶端主動尋址的方式,使各Initiator端登錄到新的Target服務器上,備份服務器接管主服務器中的任務,繼續對Initiator端的用戶提供服務支持,此時的數據傳輸路徑為后備路徑#65377;Active和Standby的后端存儲池中的數據通過同步數據備份技術來實現數據的一致性#65377;
3具體實現方案和實驗平臺的構建
由于VSCU是系統中最重要的單點故障點,將節點級VSCU高可用性子系統的實現過程作為研究重點,在VSCU這一層實現心跳信息的傳遞#65377;為了實現主要傳輸路徑和備份路徑之間的路徑切換和相應的服務接管,必須在提供服務的數據中心出現故障或發生災難性事故時,使Initiator端可以盡快知道備份服務器VSCU的IP地址,從而實現重新登錄#65377;同時,對于后臺數據,同步鏡像功能保證了當前數據服務的同步性#65377;具體實現步驟如下:
(1)在Active Target 和Standby Target站點的VSCU之間,傳遞必要的節點信息,確保當災難事件出現時,能以最大能力恢復現場狀況#65377;對于iSCSI服務,關鍵信息就是Target和Initiator之間的協商參數信息,在Active和Standby站點之間互通這些協商參數,能最大限度地恢復Active Target的現場狀態#65377;
(2)iSCSI多級存儲系統中,VSCU中有關Initiator端的地址信息以及Target和Initiator之間協商參數的信息存放在文件/proc/scsi_target/iscsi_target/n中(n代表Host的值,可以為0,1,2,…),從文件中可以讀取當前所有的協商參數信息#65377;但只需要使用登錄到Target端的Initiator的IP地址,將這些IP地址信息提取出來,并存放到一個文件中,形成當前Target端為Initiator提供服務的各Initiator端的IP地址列表#65377;在心跳信息的傳送過程中,此IP地址列表信息也同時傳遞給備份服務器#65377;
(3)Standby Target 接收來自Active Target的心跳信息和信息文件Initiator Info#65377;當確認Active Target失效以后,首先檢測本機的Target的狀態是否啟動;如果沒有啟動,則立刻啟動Target服務,準備好提供數據服務#65377;然后依據Initiator Info文件中的Initiator的IP地址,向各個Initiator發出Active失效#65380;Target地址更改的通知#65377;在Initiator確認了Standby的身份之后,Standby將有關的協商參數傳遞給Initiator#65377;
(4)在Initiator端,開啟一個監聽進程,主要監聽來自Standby Target節點的通知信息,當確認是來自Standby Target節點發來的消息時,接收關于先前與Active Target的協商參數的信息,注銷連接Active Target的信息,依據Standby的IP地址和協商的參數信息,重新生成連接Target的腳本文件iniag,然后執行腳本文件,連接Standby Target#65377;當Active數據中心恢復正常時,Standby 重新接收到正常的心跳信息,將Initiator Info傳入到Active Target,執行相同的操作,通知各Initiator,Active數據中心已經恢復,各Initiator通過重定位到Active Target,整個系統恢復到初始狀態#65377;
實驗測試的主要設備:Intel IQ31244評估板,Intel 80321開發板,服務器四臺(其中三臺具有千兆網卡),PC機二或三臺#65377;
其中PC機作為iSCSI環境下的Initiator端,31244為Active Target,同時為了提供數據中心服務,31244又可以作為iSCSI網絡存儲中的Initiator#65377;裝有80321開發板的服務器作為Standby Target#65377;Active和Standby端各自有相應的磁盤陣列作為數據存儲設備#65377;因此,可以將31244和80321看成是iSCSI多級存儲系統中的虛擬存儲控制管單元(VSCU),協調Initiator并為它們提供存取底層數據的服務#65377;
為了模擬廣域網環境下的iSCSI存儲系統,還必須構建一個廣域網環境,這里采用Nistnet軟件模擬一個廣域網環境#65377;在Active和Standby之間加一臺服務器,Active>A>Standby#65377;其中Nistnet軟件裝在A機器上,并且A機器上有兩塊網卡#65377;此時A服務器充當路由器的功能,Active向Standby發送的心跳信息必須通過A服務器,才能轉發到Standby上#65377;這樣就模擬了廣域網環境下的Standby對Active的探測過程#65377;
實驗平臺原理圖如圖2所示#65377;
本設計方案在VSCU這一層(Intel IQ 31244評估板和Intel 80321開發板)上傳遞心跳信息,具體方式是通過利用帶外數據實現的客戶—服務器心搏函數#65377;
利用帶外數據實現的客戶—服務器心搏函數模仿了Heartbeat軟件包中雙機節點的通信機制,只是心跳通信必須建立在TCP的連接上,因此開銷稍大#65377;但在通信開始之前只用建立一次TCP連接即可,以后的心跳信息傳遞都是基于此TCP連接上的,因此總的來說由連接所導致的開銷是可以忽略的#65377;
在ActiveStandby結構的雙節點高可用性系統中,對于主節點來說,本機是心搏函數中的客戶端(heartbeat_cli),而與之相連接的要求檢測主節點狀態的節點(備份節點)被稱為心搏函數中的服務端(hearbeat_serv),客戶端不斷向服務端發送自己的狀態信息,而服務端檢測這個狀態#65377;當發現客戶端異常時,實現服務接管#65377;以這個實驗平臺為基礎,進行長時間的工作測試,人工模擬Active端的多種失效方式#65377;諸如斷電#65380;系統停機#65380;主節點重啟#65380;拔掉雙機互連網線等#65377;Standby端均可實現對客戶端的服務接管#65377; 根據長期測試,應用系統的兩次故障間隔時間在24 h以上,Standby端探測到Active端失效的平均時間為1 min左右,在網絡狀況良好的情況下,客戶端重新登錄到Standby端的時間小于30 s#65377;因此可以認為,平均故障修復時間MTTR為1.5 min#65377;在非災難性事故的情況下,假定故障恢復時間為10 min,采用iSCSI遠程數據容災系統模型,MTTR由5 min縮短為1.5 min#65377;根據系統的可用性公式
一般應用系統
A1≥24×60/(24×60+10)≈99.31%
采用iSCSI遠程數據容災系統模型
A2≥24×60/(24×60+1.5)≈99.89%
如果出現災難性事故,那么一般應用系統的故障恢復時間MTTR不可預知,此時應用系統的可用性很可能會降為0,但采用iSCSI遠程數據容災系統模型的應用系統可以利用后備路徑繼續對客戶端提供服務支持,保持較高的可用性#65377;
4結束語
iSCSI多級協同存儲系統中,VSCU概念的提出,整合了各類應用服務和存儲資源,為各種應用提供統一的連接和通信手段#65377;同時利用ActiveStandby模式和心跳發信機制,為VSCU子系統提供了盡可能高的可用性#65377;基于iSCSI協議的網絡存儲方案為遠程數據存儲#65380;遠程容災系統等領域提供了一種全新的解決方案,對實際網絡存儲系統的構建有一定的參考價值。
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。