本發(fā)明涉及數(shù)據(jù)訪問技術(shù)領(lǐng)域,更具體地說,涉及一種實(shí)現(xiàn)存儲多路徑負(fù)載平衡的方法,還涉及一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡的裝置。
背景技術(shù):
在信息化快速發(fā)展的大數(shù)據(jù)時代,很多公司和部門如金融、醫(yī)療等對于計(jì)算機(jī)的實(shí)用性有了很高的要求。單臺主機(jī)開展業(yè)務(wù)工作已不能滿足要求,越來越多的企業(yè)紛紛構(gòu)建自己的服務(wù)器管理系統(tǒng),并搭載高可用的存儲設(shè)備,對海量數(shù)據(jù)進(jìn)行處理。尤其在使用SAN(Storage Area Networking)存儲設(shè)備時,在服務(wù)器端部署多路徑軟件(DM-Multipath)來訪問SAN存儲設(shè)備,充分利用其負(fù)載均衡、數(shù)據(jù)冗余、鏈路故障切換等特性提高存儲的可用性和可靠性。
然而,當(dāng)前Linux系統(tǒng)自帶的多路徑軟件為了下發(fā)IO而進(jìn)行路徑選擇時,一般采用如下算法:1、輪詢選擇路徑算法,即在路徑組中循環(huán)每個路徑,向每個路徑發(fā)送同樣數(shù)量的IO,該算法不能保證所有IO得到及時處理;2、最少IO請求數(shù)算法,即將IO發(fā)送到具有最少未處理IO請求的路徑,該算法只是計(jì)算IO請求數(shù),而沒有計(jì)算真正的負(fù)載數(shù)據(jù)量等。這些算法功能比較單一,不能檢測路徑故障,而且路徑的狀態(tài)以及可承載的數(shù)據(jù)量的不確定導(dǎo)致路徑選擇不準(zhǔn)確,常常導(dǎo)致選擇的路徑不是最優(yōu)路徑。
因此,如何選擇最優(yōu)路徑來實(shí)現(xiàn)存儲設(shè)備的快速準(zhǔn)確訪問是本領(lǐng)域技術(shù)人員急需要解決的技術(shù)問題。
技術(shù)實(shí)現(xiàn)要素:
為解決上述技術(shù)問題,本發(fā)明提供一種實(shí)現(xiàn)存儲多路徑負(fù)載平衡的方法,通過測量故障路徑,提高路徑選擇的準(zhǔn)確率,選擇最優(yōu)路徑來實(shí)現(xiàn)存儲設(shè)備的快速準(zhǔn)確訪問。
為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法,包括:
實(shí)時獲取所有路徑的路徑屬性信息;
依次檢測所有所述路徑是否存在故障,如果存在有故障的路徑,則將故障路徑記錄至故障隊(duì)列中;
選擇待分配路徑,依據(jù)所述路徑屬性信息查詢所述待分配路徑在所述故障隊(duì)列中是否有記錄;
如果所述待分配路徑在所述故障隊(duì)列中沒有記錄,則根據(jù)IO請求數(shù)確定均衡的負(fù)載路徑。
優(yōu)選的,在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法中,根據(jù)IO請求數(shù)確定負(fù)載路徑,具體包括:
若IO請求數(shù)為0,則認(rèn)定所述待分配路徑為所述負(fù)載路徑;
若IO請求數(shù)不為0,則根據(jù)IO請求數(shù)和IO請求的大小計(jì)算總負(fù)載數(shù)據(jù)量,認(rèn)定最小負(fù)載數(shù)據(jù)量的待分配路徑作為負(fù)載路徑;
若IO請求數(shù)都不為0,且存在兩個及以上相同最小負(fù)載數(shù)據(jù)量的待分配路徑,計(jì)算所述相同最小負(fù)載數(shù)據(jù)量的待分配路徑的預(yù)計(jì)總體服務(wù)時間,認(rèn)定最少服務(wù)時間的待分配路徑作為負(fù)載路徑。
優(yōu)選的,在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法中,所述將故障路徑記錄至故障隊(duì)列中之后,還包括:
檢測所述故障路徑是否恢復(fù),如果恢復(fù),則將其從所述故障隊(duì)列中清除。
優(yōu)選的,在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法中,如果所述待分配路徑在所述故障隊(duì)列中有記錄,則放棄所述待分配路徑,重新選擇下一路徑。
本發(fā)明還提供了一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡裝置,包括:
路徑實(shí)時監(jiān)控模塊,用于實(shí)時獲取所有路徑的路徑屬性信息;
路徑故障記錄模塊,與所述路徑實(shí)時監(jiān)控模塊相連,用于檢測所有所述路徑是否存在故障,如果存在有故障的路徑,則將故障路徑記錄至故障隊(duì)列中;
路徑故障查詢模塊,與所述路徑故障記錄模塊相連,用于依據(jù)所述路徑屬性信息查詢所述待分配路徑在所述故障隊(duì)列中是否有記錄;
路徑選擇模塊,與所述路徑故障查詢模塊相連,如果所述待分配路徑在所述故障隊(duì)列中沒有記錄,則根據(jù)IO請求數(shù)認(rèn)定均衡的負(fù)載路徑。
優(yōu)選的,在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡裝置中,所述路徑選擇模塊包括:
負(fù)載數(shù)據(jù)量計(jì)算單元,用于根據(jù)IO請求數(shù)和IO請求的塊大小計(jì)算總負(fù)載數(shù)據(jù)量;
服務(wù)時間計(jì)算單元,用于計(jì)算所述相同最小負(fù)載數(shù)據(jù)量的待分配路徑的預(yù)計(jì)總體服務(wù)時間。
優(yōu)選的,在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡裝置中,所述路徑實(shí)時監(jiān)控模塊還用于檢測所述故障路徑是否恢復(fù),如果恢復(fù),則將其從所述故障隊(duì)列中清除。
從上述技術(shù)方案可以看出,本發(fā)明所提供的一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法,包括:實(shí)時獲取所有路徑的路徑屬性信息;檢測所有所述路徑是否存在故障,如果存在有故障的路徑,則將故障路徑記錄至故障隊(duì)列中;選擇待分配路徑,依據(jù)所述路徑屬性信息查詢所述待分配路徑在所述故障隊(duì)列中是否有記錄;如果所述待分配路徑在所述故障隊(duì)列中沒有記錄,則根據(jù)IO請求數(shù)認(rèn)定均衡的負(fù)載路徑。通過檢測所有所述路徑是否存在故障,將故障路徑排除,提高路徑選擇的準(zhǔn)確率,并根據(jù)IO請求數(shù)認(rèn)定均衡的負(fù)載路徑,選擇最優(yōu)路徑來實(shí)現(xiàn)存儲設(shè)備的快速準(zhǔn)確訪問。
本發(fā)明還提供一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡裝置,能夠提高路徑選擇的準(zhǔn)確率,選擇最優(yōu)路徑來實(shí)現(xiàn)存儲設(shè)備的快速準(zhǔn)確訪問。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法示意圖;
圖2為本發(fā)明實(shí)施例提供的一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡裝置示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
請參閱圖1,圖1為本發(fā)明實(shí)施例提供的一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法示意圖。
在一種具體的實(shí)施方式中,提供了一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法,包括如下步驟:
步驟S1:實(shí)時獲取所有路徑的路徑屬性信息。
其中,前端服務(wù)器與后端網(wǎng)絡(luò)存儲設(shè)備進(jìn)行連接,向從后端網(wǎng)絡(luò)存儲設(shè)備中的存儲響應(yīng)模塊發(fā)送查詢命令,依據(jù)查詢命令獲取并記錄所有路徑的路徑屬性信息。
步驟S2:檢測所有所述路徑是否存在故障,如果存在有故障的路徑,則將故障路徑記錄至故障隊(duì)列中;
其中,檢測的順序可以為依次檢測,還可以同時檢測,視具體情況而定。故障隊(duì)列用于記錄故障路徑,便于后續(xù)排除故障路徑。
步驟S3:選擇待分配路徑,依據(jù)所述路徑屬性信息查詢所述待分配路徑在所述故障隊(duì)列中是否有記錄;
其中,具體的查詢方法可以為,將所述待分配路徑與故障隊(duì)列中的路徑逐一進(jìn)行比較,根據(jù)相同的路徑屬性信息,查看故障隊(duì)列中是否有記錄?;蛘吒鶕?jù)路徑屬性信息的關(guān)鍵詞來查詢,查看故障隊(duì)列中是否有記錄。
步驟S4:如果所述待分配路徑在所述故障隊(duì)列中沒有記錄,則根據(jù)IO請求數(shù)認(rèn)定均衡的負(fù)載路徑。其中,根據(jù)路徑屬性信息分發(fā)IO至各個負(fù)載路徑達(dá)到負(fù)載平衡。
本實(shí)施例通過檢測所有所述路徑是否存在故障,將故障路徑排除,提高路徑選擇的準(zhǔn)確率,并根據(jù)IO請求數(shù)認(rèn)定均衡的負(fù)載路徑,選擇最優(yōu)路徑來實(shí)現(xiàn)存儲設(shè)備的快速準(zhǔn)確訪問。
在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法的基礎(chǔ)上,根據(jù)IO請求數(shù)認(rèn)定負(fù)載路徑,具體包括:
若IO請求數(shù)為0,則認(rèn)定所述待分配路徑為所述負(fù)載路徑;
若IO請求數(shù)不為0,則根據(jù)IO請求數(shù)和IO請求的大小計(jì)算總負(fù)載數(shù)據(jù)量,認(rèn)定最小負(fù)載數(shù)據(jù)量的待分配路徑作為負(fù)載路徑;
若IO請求數(shù)都不為0,且存在兩個及以上相同最小負(fù)載數(shù)據(jù)量的待分配路徑,計(jì)算所述相同最小負(fù)載數(shù)據(jù)量的待分配路徑的預(yù)計(jì)總體服務(wù)時間,認(rèn)定最少服務(wù)時間的待分配路徑作為負(fù)載路徑。
其中,首先實(shí)時統(tǒng)計(jì)各路徑的IO請求數(shù),并實(shí)時計(jì)算各路徑的平均服務(wù)時間,將IO下發(fā)至平均服務(wù)時間最小,最少故障次數(shù)的路徑。根據(jù)這些路徑再選擇預(yù)計(jì)總體服務(wù)時間最小的路徑,即通過根據(jù)IO請求數(shù)和IO請求的塊大小計(jì)算總負(fù)載數(shù)據(jù)量,除以監(jiān)控模塊獲取該條路徑的相對流量,得到出該路徑預(yù)計(jì)總體服務(wù)時間,選擇最少服務(wù)時間的路徑。
在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法的基礎(chǔ)上,在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法中,所述將故障路徑記錄至故障隊(duì)列中之后,還包括:
檢測所述故障路徑是否恢復(fù),如果恢復(fù),則將其從所述故障隊(duì)列中清除。
在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法的基礎(chǔ)上,在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡方法中,如果所述待分配路徑在所述故障隊(duì)列中有記錄,則放棄所述待分配路徑,重新選擇下一路徑。選擇下一路徑之后重復(fù)執(zhí)行步驟S3。
本發(fā)明還提供了一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡裝置,包括:
路徑實(shí)時監(jiān)控模塊01,用于實(shí)時獲取所有路徑的路徑屬性信息;
路徑故障記錄模塊02,與所述路徑實(shí)時監(jiān)控模塊01相連,用于檢測所有所述路徑是否存在故障,如果存在有故障的路徑,則將故障路徑記錄至故障隊(duì)列中;
路徑故障查詢模塊03,與所述路徑故障記錄模塊02相連,用于依據(jù)所述路徑屬性信息將所述待分配路徑與故障隊(duì)列中的路徑進(jìn)行比較,查詢所述待分配路徑在所述故障隊(duì)列中是否有記錄;
路徑選擇模塊04,與所述路徑故障查詢模塊03相連,如果所述待分配路徑在所述故障隊(duì)列中沒有記錄,則根據(jù)IO請求數(shù)確定負(fù)載路徑。
進(jìn)一步的,在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡裝置中,所述路徑選擇模塊04包括:
負(fù)載數(shù)據(jù)量計(jì)算單元,用于根據(jù)IO請求數(shù)和IO請求的塊大小計(jì)算總負(fù)載數(shù)據(jù)量;
服務(wù)時間計(jì)算單元,用于計(jì)算所述相同最小負(fù)載數(shù)據(jù)量的待分配路徑的預(yù)計(jì)總體服務(wù)時間。
進(jìn)一步的,在上述實(shí)現(xiàn)存儲多路徑負(fù)載均衡裝置中,所述路徑實(shí)時監(jiān)控模塊01還用于檢測所述故障路徑是否恢復(fù),如果恢復(fù),則將其從所述故障隊(duì)列中清除。
具體的,多個前端服務(wù)器通過網(wǎng)絡(luò),以太網(wǎng)交換機(jī)或FC交換機(jī)作為中傳播中介,將前端服務(wù)器與多個后端存儲設(shè)備建立連接。路徑實(shí)時監(jiān)控模塊01,路徑故障記錄模塊02,路徑故障查詢模塊03,路徑選擇模塊04,以及路徑管理模塊集成到前端服務(wù)器的多路徑軟件中。當(dāng)前端服務(wù)器與后端存儲設(shè)備建立連接時,路徑實(shí)時監(jiān)控模塊監(jiān)控進(jìn)程開啟,并不斷向后端存儲設(shè)備發(fā)送探測指令,后端存儲設(shè)備中的后端存儲響應(yīng)模塊接收探測指令,發(fā)送所有路徑的路徑屬性信息至路徑實(shí)時監(jiān)控模塊01。路徑故障記錄模塊02檢測所有所述路徑是否存在故障,當(dāng)存在故障路徑時,記錄故障路徑,將其記錄至故障路徑隊(duì)中。由于路徑實(shí)時監(jiān)控模塊01對于故障路徑的查詢頻度相對較高,能夠快速監(jiān)測故障路徑以及故障路徑是否恢復(fù),當(dāng)故障路徑恢復(fù)后,將其從故障隊(duì)里中清除。為減小對業(yè)務(wù)IO的影響,路徑實(shí)時監(jiān)控模塊01還可以對于空閑路徑進(jìn)行低頻度地探測,以便提前發(fā)現(xiàn)路徑的故障,從而避免造成IO發(fā)送失敗。路徑管理模塊負(fù)責(zé)與后端存儲上的后端存儲響應(yīng)模塊的交互連接,探測路徑、設(shè)備掃描,并負(fù)責(zé)管理的路徑屬性信息的不斷更新。路徑選擇模塊04負(fù)責(zé)IO分發(fā),在選擇路徑時經(jīng)過計(jì)算后并根據(jù)路徑監(jiān)控信息判斷IO最終分發(fā)至哪條路徑,路徑選擇模塊04最終選擇的路徑是IO負(fù)載最小,前期不存在頻繁故障切換的路徑。
本發(fā)明提供一種實(shí)現(xiàn)存儲多路徑負(fù)載均衡裝置,能夠定期與后端存儲設(shè)備交互,探測并記錄各個路徑的狀態(tài)及優(yōu)劣,從而在分配IO時,選擇性能最優(yōu)的路徑。
本說明書中各個實(shí)施例采用遞進(jìn)的方式描述,每個實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個實(shí)施例之間相同相似部分互相參見即可。
對所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實(shí)施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。