国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

郭曉金,王 超

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

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

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

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

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

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

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

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

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

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

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

圖2 MulPath驅(qū)動(dòng)實(shí)現(xiàn)方框圖

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

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

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

2.2 MulPath的I/O流程

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

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

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

2.3 MulPath的選擇路徑

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4 小結(jié)

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

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

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

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

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

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

[6]蔡斌,謝長生,忍勁.SCSI子系統(tǒng)中間層多啟動(dòng)互聯(lián)多路徑I/O的存儲方式的研究[J].小型微型計(jì)算機(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ū)動(dòng)程序
多路徑效應(yīng)對GPS多普勒測速的影響
多路徑助推肉牛產(chǎn)業(yè)穩(wěn)定發(fā)展
基于5.8G射頻的多路徑識別技術(shù)應(yīng)用探討
計(jì)算機(jī)硬件設(shè)備驅(qū)動(dòng)程序分析
Windows 7下USB存儲設(shè)備接入痕跡的證據(jù)提取
基于Flash芯片的新型存儲設(shè)備數(shù)據(jù)恢復(fù)技術(shù)研究
基于5.8GHz多路徑精確識別方案研究
用批處理管理計(jì)算機(jī)USB設(shè)備的使用
基于MPC8280的CPU單元與內(nèi)部總線驅(qū)動(dòng)程序設(shè)計(jì)
妙用鼠標(biāo)驅(qū)動(dòng)