• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種新的Linux主機冗余存儲路徑設(shè)計與實現(xiàn)

      2012-06-25 03:31:16郭曉金
      電視技術(shù) 2012年3期
      關(guān)鍵詞:多路徑存儲設(shè)備驅(qū)動程序

      郭曉金,王 超

      (重慶郵電大學通信與信息工程學院,重慶 400065)

      多路徑就是使用冗余的物理路徑組件(適配器、電纜和交換機)在服務(wù)器與存儲設(shè)備之間創(chuàng)建邏輯路徑。如果這些組件中的一個或多個發(fā)生故障,導(dǎo)致路徑無法使用,多路徑軟件就使用I/O的備用路徑使應(yīng)用程序仍然能夠訪問其數(shù)據(jù)。每個網(wǎng)絡(luò)接口卡(在使用iSCSI的情況下)或HBA都應(yīng)通過使用冗余的交換機基礎(chǔ)結(jié)構(gòu)連接起來,以便在存儲結(jié)構(gòu)組件發(fā)生故障時能繼續(xù)訪問存儲?,F(xiàn)在企業(yè)對數(shù)據(jù)的穩(wěn)定性、可靠性的要求越來越高,特別是在企業(yè)級的數(shù)據(jù)業(yè)務(wù)上,需要非常高的數(shù)據(jù)傳輸可靠性。業(yè)界常用的方法是為數(shù)據(jù)業(yè)務(wù)提供多路徑傳輸通道,來避免單點故障(單點故障是指網(wǎng)絡(luò)中的某處發(fā)生故障,可能導(dǎo)致整個網(wǎng)絡(luò)癱瘓)[1]。

      由于多路徑軟件是需要和存儲設(shè)備在一起配合使用的,不同的廠商基于不同的操作系統(tǒng),都提供了不同的版本。本文提出一種多路徑的設(shè)計方法,它基于Linux主機的設(shè)備驅(qū)動程序,用來控制對存儲設(shè)備的訪問,實現(xiàn)主機到存儲設(shè)備之間的路徑選擇,提高主機與存儲設(shè)備之間的路徑可靠性與性能。在有多路徑軟件的情況下,多路徑就可以屏蔽冗余設(shè)備、避免造成混淆,并且創(chuàng)建一個新的設(shè)備,由新的設(shè)備去對應(yīng)多條通路。

      1 多路徑設(shè)計的思想和方法

      MulPath作為內(nèi)核模塊被加載到Linux操作系統(tǒng)中。它在操作系統(tǒng)內(nèi)部被注冊成為一個虛擬設(shè)備。通過該軟件,可以使應(yīng)用服務(wù)器與存儲系統(tǒng)之間選擇合適的路徑進行通信。如圖1所示,當存儲系統(tǒng)是多路徑組網(wǎng)時,系統(tǒng)啟動時MulPath通過設(shè)備的注冊,發(fā)現(xiàn)每條路徑上的設(shè)備,并將路徑狀態(tài)信息記錄在數(shù)據(jù)結(jié)構(gòu)的相應(yīng)位置。對于每個設(shè)備(LUN),MulPath下發(fā)命令,查詢設(shè)備當前歸屬于陣列的哪個控制器,并將主機到這個陣列控制器之間的路徑作為優(yōu)先選擇路徑,即主路徑。如果主機到這個陣列控制器之間有多條路徑,MulPath就會將I/O分擔,從而在這幾條路徑上形成負載均衡[2]。

      如圖1所示,當主路徑(路徑1和路徑2)由于某種原因出現(xiàn)故障后,MulPath所提供的Faiover功能能夠自動將業(yè)務(wù)切換到備用路徑上(路徑3),避免了因單點故障而造成業(yè)務(wù)中斷。當主路徑的故障得以解除或修復(fù)后即能夠重新正常傳輸I/O流時,MulPath所提供的Faiback功能會自動地將I/O傳輸路徑從備用路徑切換回主路徑上[3]。

      圖1 Linux主機冗余存儲路徑組網(wǎng)圖

      2 多路徑軟件的設(shè)計

      MulPath由安裝程序、管理工具和驅(qū)動程序組成,其中安裝程序和管理工具運行在用戶態(tài),而驅(qū)動程序運行在內(nèi)核態(tài)。驅(qū)動實現(xiàn)在內(nèi)核SCSI體系上,這樣比較容易實現(xiàn)搜集并屏蔽物理設(shè)備信息,而求方便形成虛擬設(shè)備信息。

      2.1 MulPath的驅(qū)動實現(xiàn)和系統(tǒng)框圖

      MulPath驅(qū)動實現(xiàn)方框圖如圖2所示。

      圖2 MulPath驅(qū)動實現(xiàn)方框圖

      MulPath軟件編譯后成為驅(qū)動程序模塊,它主要位于HBA卡驅(qū)動之上,對應(yīng)用程序提供對陣列的訪問入口而屏蔽掉具體的HBA卡和光纖通道。各種應(yīng)用程序,如數(shù)據(jù)庫服務(wù)程序、Web服務(wù)程序等,都將具體的對陣列的I/O請求傳送給驅(qū)動程序,而驅(qū)動程序負責選擇具體傳送數(shù)據(jù)的路徑并返回I/O結(jié)果。

      本驅(qū)動程序模塊需要運行在具有可識別類型的HBA卡的主機上,并且主機上安裝了相應(yīng)的HBA驅(qū)動程序,HBA卡通過光纖與主機陣列相聯(lián)。

      這類實現(xiàn)方法具有很好的兼容性,能夠兼容多種HBA卡驅(qū)動。

      2.2 MulPath的I/O流程

      當應(yīng)用程序下發(fā)讀LUN的命令時,例如dd if=/dev/sdb of=/dev/null,經(jīng)過系統(tǒng)多個層次的傳遞,I/O數(shù)據(jù)到達驅(qū)動這一層,使用不同的HBA卡會有不同的scsi_host_template結(jié)構(gòu)體,對不同的HBA卡,均有它自己的queuecommand函數(shù)指針,在此函數(shù)中對下發(fā)的I/O命令排隊,并在恰當?shù)臅r候?qū)⒚畎l(fā)送出去[4]。

      由于在MulPath初始化階段,已經(jīng)將真實HBA卡對應(yīng)的HOST下的LUN屏蔽,所以用戶程序操作的都是虛擬HOST下的LUN,虛擬HOST(由多路徑軟件創(chuàng)建)的queuecommand(將SCSI命令包加入到等待隊列中)將收到的I/O命令加入鏈表,并設(shè)置相應(yīng)的回調(diào)函數(shù)、發(fā)送狀態(tài)(如重試、超時次數(shù)等)。

      由于MulPath注冊使用虛擬的HBA卡,雖然用戶使用dd等命令操作的是虛擬HBA卡,但是虛擬的HBA卡并不具備真實物理HBA卡真正將數(shù)據(jù)發(fā)送出去的能力。所有MulPath中,需要將利用虛擬HBA卡發(fā)送信息到對應(yīng)LUN的能力轉(zhuǎn)換為利用真實HBA卡發(fā)送信息。這一點就是在選路模塊中,將虛擬LUN轉(zhuǎn)換為“物理”LUN來實現(xiàn)的。

      2.3 MulPath的選擇路徑

      系統(tǒng)啟動時,MulPath通過設(shè)備的注冊,發(fā)現(xiàn)每條路徑上的設(shè)備,并將路徑狀態(tài)信息記錄在數(shù)據(jù)結(jié)構(gòu)的相應(yīng)位置。對于每個設(shè)備(LUN),MulPath下發(fā)命令,查詢設(shè)備CurrentOwner,將此信息記錄在 CurrentOwningPath中,作為優(yōu)先選擇路徑的依據(jù)[5]。

      每次發(fā)送命令時要檢測使用路徑的狀態(tài),MulPath對路徑狀態(tài)的判斷是通過讀取存放在RdacInfo數(shù)據(jù)結(jié)構(gòu)中的路徑狀態(tài)變量來進行判斷的,這些狀態(tài)的更新主要是由定時器定時掃描路徑后根據(jù)I/O狀態(tài)來刷新的,因而,它們不一定能實時地反映當前路徑的狀態(tài)。雖然路徑出現(xiàn)故障了,但是RdacInfo中的狀態(tài)正常,仍然發(fā)送命令,發(fā)送產(chǎn)生的I/O錯誤再交給錯誤分析函數(shù)處理。

      定時器利用異步發(fā)送命令發(fā)送對標準頁的查詢命令,通過返回的狀態(tài)對路徑狀態(tài)進行檢測。對于每條路徑,只要對一個LUN發(fā)送成功,就繼續(xù)檢測下一條路徑,并修改RdacInfo結(jié)構(gòu)中的狀態(tài)信息。

      MulPath總是首先選擇使用RdacInfo結(jié)構(gòu)體中定義的CurrentOwningPath所描述的控制器上的路徑作為首選路徑,當CurrentOwningPath所描述的控制器上的所有路徑都為FAILED時,才會選擇下一個控制器上的路徑。如果當前使用的控制器可用,則在此控制器上的所有路徑進行輪循操作,分擔使用每條可用路徑。

      通過選路模塊,MulPath將最初的虛擬LUN通過查找RdacInfo數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成“物理”LUN,這個“物理”LUN有真實HBA卡的發(fā)送數(shù)據(jù)的能力,隨后將數(shù)據(jù)發(fā)送出去[6]。

      2.4 MulPath的路徑狀態(tài)定時刷新

      路徑狀態(tài)定時刷新通過定時器進行,定時器每1 s觸發(fā)一次。路徑狀態(tài)包括最優(yōu)、最優(yōu)需要檢測、最優(yōu)檢測中、失敗、失敗需要檢測、失敗檢測中、系統(tǒng)特定狀態(tài)7種。處理過程如圖3所示。

      圖3 路徑狀態(tài)刷新流程圖

      若檢測時路徑狀態(tài)處于最優(yōu),則使該路徑處于最優(yōu)狀態(tài)時間值加1,若此時該路徑的最優(yōu)狀態(tài)時間值大于配置文件中設(shè)置的最優(yōu)檢測時間IdlePathCheckingInterval,則設(shè)置該路徑狀態(tài)為最優(yōu)需要檢測。

      若檢測時路徑狀態(tài)處于最優(yōu)需要檢測,則設(shè)置該路徑狀態(tài)為最優(yōu)檢測中,并生成一個異步路徑狀態(tài)檢測命令。若生成異步路徑狀態(tài)檢測命令失敗,則還原設(shè)置該路徑狀態(tài)為最優(yōu),并設(shè)置路徑處于最優(yōu)狀態(tài)時間為0。

      若檢測時路徑狀態(tài)處于失敗,則使該路徑處于失敗狀態(tài)時間值加1,若此時該路徑的失敗狀態(tài)時間值大于配置文件中設(shè)置的失敗等待時間RecheckFailedPathWait-Time,則設(shè)置該路徑及路徑上所有設(shè)備的狀態(tài)為失敗需要檢測[7]。

      若檢測時路徑狀態(tài)處于失敗需要檢測,則使該路徑處于失敗狀態(tài)時間值加1,若此時該路徑的失敗狀態(tài)時間值大于配置文件中設(shè)置的失敗檢測時間FailedPathCheckingInterval,則設(shè)置該路徑及路徑上所有設(shè)備的狀態(tài)為失敗檢測中,并生成一個異步路徑狀態(tài)檢測命令,若生成異步路徑狀態(tài)檢測命令失敗,則還原設(shè)置該路徑及路徑上所有設(shè)備狀態(tài)為失敗,并設(shè)置路徑處于失敗狀態(tài)時間為0[8]。

      若路徑狀態(tài)為最優(yōu)檢測中、失敗檢測中、系統(tǒng)特定這3種狀態(tài),則不做任何處理。

      3 模擬性能測試及結(jié)果分析

      針對多路徑軟件主要解決路徑切換和負載均衡兩個問題,設(shè)計了兩種組網(wǎng)來分別測試并選擇各大存儲設(shè)備廠商廣泛使用的Iometer作為I/O測試的工具。

      測試硬件由dell2950主機(裝有SUSE10和MulPath,并配有雙口4GFC_HBA扣卡),IBM的DS4700存儲陣列(陣列上創(chuàng)建RAID5)以及若干光纖線。

      3.1 MulPath的路徑切換測試(測試1)

      如圖4所示,主機到存儲陣列有兩條路徑,分別是從主機HBA扣卡的1口和2口接到存儲陣列的控制器A和控制器B上。存儲陣列上創(chuàng)建有一個用于測試的歸屬于控制器A的LUN。根據(jù)MulPath的路徑選擇策略,路徑1為優(yōu)先選擇路徑。

      圖4 路徑切換測試組網(wǎng)圖

      每隔10 s拔插一次路徑1(拔一次后間隔10 s再插一次),觀察I/O狀況。測試結(jié)果如表1所示。

      表1 測試1的結(jié)果

      初始狀態(tài)的時候,路徑1是優(yōu)先選擇的路徑,所以I/O跑在路徑1上;當拔掉路徑1的光纖后,MulPath的路徑狀態(tài)定時刷新發(fā)現(xiàn)路徑1故障,I/O就返回到路徑2上;當路徑1回復(fù)后,MulPath的路徑狀態(tài)定時刷新發(fā)現(xiàn)路徑1恢復(fù),I/O就返回路徑1上。

      3.2 MulPath的負載均衡測試(測試2)

      如圖5所示,主機到存儲陣列有兩條路徑,分別是從主機HBA扣卡的1口和2口全部接到存儲陣列的控制器A。存儲陣列上創(chuàng)建有一個用于測試的歸屬于控制器A的LUN。根據(jù)MulPath的路徑選擇策略,路徑1和路徑2都為優(yōu)先選擇路徑。

      圖5 負載均衡測試組網(wǎng)圖

      每隔10 s拔插一次路徑1(拔一次后間隔10 s再插一次),觀察I/O狀況。測試結(jié)果如表2所示。

      表2 測試2的結(jié)果

      本次測試中,設(shè)置I/O測試工具iometer的壓力大概在1000 IOPS,由表2可知,MulPath能較好地實現(xiàn)負載均衡,提高了I/O的性能。

      4 小結(jié)

      本文中提出的MulPath實現(xiàn)基于HBA卡的驅(qū)動,能在內(nèi)核SCSI體系上很好地實現(xiàn)主機到存儲設(shè)備之間的路徑選擇,提高主機與存儲設(shè)備之間的路徑可靠性與性能,并且有很好的兼容性,能夠兼容多種HBA卡驅(qū)動。能夠自動選擇優(yōu)選的路徑,當前路徑不能使用時,可使用其他冗余路徑,這樣就避免了系統(tǒng)因單點故障造成的業(yè)務(wù)中斷。當有多條優(yōu)選路徑時,在多條路徑上能夠?qū)崿F(xiàn)靜態(tài)及動態(tài)負載均衡,極大地提高了I/O的性能。

      [1]姜寧康,時成閣.網(wǎng)絡(luò)存儲導(dǎo)論[M].北京:清華大學出版社,2007.

      [2]闞闖,戚瑋瑋.一種新結(jié)構(gòu)的DM_MulPath與動態(tài)負載平衡[J].計算機應(yīng)用,2008,28(2):289-291.

      [3]金惠芳,陶利民,張基溫.Linux下多線程技術(shù)分析及應(yīng)用[J].計算機系統(tǒng)應(yīng)用,2003(9):30-32.

      [4]董峰,王樹武,譚毓安.冗余存儲路徑在Linux的設(shè)計和實現(xiàn)[J].現(xiàn)代圖書情報技術(shù),2004(5):17-20.

      [5]曹強,黃建忠.海量網(wǎng)絡(luò)存儲系統(tǒng)原理與設(shè)計[M].武漢:華中科技大學出版社,2010.

      [6]蔡斌,謝長生,忍勁.SCSI子系統(tǒng)中間層多啟動互聯(lián)多路徑I/O的存儲方式的研究[J].小型微型計算機系統(tǒng),2005,26(8):1420-1426.

      [7]崔超.淺析存儲虛擬化和數(shù)據(jù)遷移技術(shù)[J].信息與電腦:理論版.2010(6):87-88.

      [8]LOBUE M T,MASON H.Surveying today’s most popular storage interfaces[J].IEEE Computer,2002,35(12):48-50.

      猜你喜歡
      多路徑存儲設(shè)備驅(qū)動程序
      多路徑效應(yīng)對GPS多普勒測速的影響
      基于5.8G射頻的多路徑識別技術(shù)應(yīng)用探討
      Windows 7下USB存儲設(shè)備接入痕跡的證據(jù)提取
      基于Flash芯片的新型存儲設(shè)備數(shù)據(jù)恢復(fù)技術(shù)研究
      基于5.8GHz多路徑精確識別方案研究
      用批處理管理計算機USB設(shè)備的使用
      華東理工大學學報(自然科學版)(2014年1期)2014-02-27 13:48:36
      驅(qū)動程序更新與推薦
      驅(qū)動程序更新與推薦
      驅(qū)動程序更新與推薦
      西和县| 龙州县| 玛沁县| 三河市| 辽阳市| 马山县| 芮城县| 建德市| 琼中| 阿克苏市| 南平市| 宁陵县| 游戏| 高安市| 永春县| 新竹县| 扬州市| 兴宁市| 平塘县| 元谋县| 安仁县| 上虞市| 兴仁县| 武清区| 峨边| 临安市| 汕头市| 天等县| 龙山县| 郧西县| 双峰县| 弋阳县| 高陵县| 泸溪县| 深水埗区| 即墨市| 翁源县| 视频| 大悟县| 苍梧县| 台东县|