專利名稱:基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及ー套分布式存儲(chǔ)系統(tǒng),具體地說,是涉及一套基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法。
背景技術(shù):
隨著數(shù)據(jù)密集型應(yīng)用的日益普及,人們需要對越來越多的數(shù)據(jù)進(jìn)行開放式存儲(chǔ)和高性能計(jì)算,這對存儲(chǔ)系統(tǒng)的可靠性,可擴(kuò)展性等提出 了苛刻的要求,而大規(guī)模分布式存儲(chǔ)系統(tǒng)以其較為低廉的價(jià)格,良好的可擴(kuò)展性等優(yōu)勢,得到了人們的青睞?,F(xiàn)有的基于多級(jí)映射的大規(guī)模多副本分布式存儲(chǔ)系統(tǒng)雖然具有支持權(quán)重、可擴(kuò)展型高、數(shù)據(jù)散列均勻、支持副本、易于管理等優(yōu)點(diǎn),然而該系統(tǒng)對于壓カ過大的存儲(chǔ)節(jié)點(diǎn)即過載存儲(chǔ)節(jié)點(diǎn)沒有可靠的負(fù)載調(diào)整方法;系統(tǒng)中存儲(chǔ)節(jié)點(diǎn)失效時(shí)也沒有有效的關(guān)于失效存儲(chǔ)節(jié)點(diǎn)的系統(tǒng)容錯(cuò)方法,且存儲(chǔ)節(jié)點(diǎn)中存儲(chǔ)聚集的多個(gè)副本間沒有可靠的心跳連接,無法確保通信暢通,因此無法準(zhǔn)確判定彼此的當(dāng)前狀態(tài),而存儲(chǔ)聚集的多個(gè)副本之間臨時(shí)建立連接的網(wǎng)絡(luò)耗費(fèi)及錯(cuò)誤率也較高;由于系統(tǒng)中存儲(chǔ)聚集與存儲(chǔ)聚集之間的序列號(hào)相差較大,造成了毎次上傳、刪除過程中會(huì)產(chǎn)生多余的序列號(hào)協(xié)商交互。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一套基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,解決現(xiàn)有技術(shù)中存在的大規(guī)模分布式存儲(chǔ)系統(tǒng)中沒有可靠的負(fù)載調(diào)整方法和系統(tǒng)容錯(cuò)方法及資源上傳、資源刪除流程不夠簡潔的問題。為了實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,包括以下步驟(I)系統(tǒng)初始化;(2)客戶端檢查是否需要更新規(guī)則,如果需要更新,則將規(guī)則更新至與規(guī)則節(jié)點(diǎn)相同的規(guī)則;(3)客戶端通過⑶ID生成算法確定待上傳資源的⑶ID,并根據(jù)⑶ID結(jié)合規(guī)則計(jì)算出存儲(chǔ)節(jié)點(diǎn)位置,將待上傳資源存儲(chǔ)至存儲(chǔ)節(jié)點(diǎn)之中;(4)客戶端得到需要獲取資源的GUID,并根據(jù)規(guī)則計(jì)算出需要獲取資源的副本對應(yīng)的存儲(chǔ)節(jié)點(diǎn)地址,然后由與存儲(chǔ)節(jié)點(diǎn)地址對應(yīng)的存儲(chǔ)節(jié)點(diǎn)查找該需要獲取的資源,再向客戶端回復(fù)查找結(jié)果;(5)管理節(jié)點(diǎn)檢查存儲(chǔ)節(jié)點(diǎn)發(fā)來的心跳信息,當(dāng)檢查到存儲(chǔ)節(jié)點(diǎn)壓カ過大即過載時(shí),采用負(fù)載調(diào)整方法對該壓カ過大的過載存儲(chǔ)節(jié)點(diǎn)進(jìn)行負(fù)載調(diào)整;當(dāng)檢查到存儲(chǔ)節(jié)點(diǎn)失效時(shí),采用系統(tǒng)容錯(cuò)方法對該失效存儲(chǔ)節(jié)點(diǎn)進(jìn)行系統(tǒng)容錯(cuò)。具體地說,所述每個(gè)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)有至少ー個(gè)存儲(chǔ)聚集,每個(gè)存儲(chǔ)聚集至少有ー個(gè)存儲(chǔ)聚集副本,且當(dāng)存儲(chǔ)聚集的存儲(chǔ)聚集副本為兩個(gè)以上吋,這兩個(gè)以上存儲(chǔ)聚集副本分別存儲(chǔ)在不同的存儲(chǔ)節(jié)點(diǎn)上,且該兩個(gè)以上存儲(chǔ)聚集副本兩兩之間保持心跳連接。
進(jìn)ー步地,所述負(fù)載調(diào)整方法包括以下步驟(a)設(shè)定過載存儲(chǔ)節(jié)點(diǎn)上的存儲(chǔ)聚集數(shù)量標(biāo)準(zhǔn)值,管理節(jié)點(diǎn)檢查過載存儲(chǔ)節(jié)點(diǎn)上的存儲(chǔ)聚集數(shù)量,若超過已設(shè)定的標(biāo)準(zhǔn)值則發(fā)布進(jìn)行存儲(chǔ)聚集變換的命令,若低于已設(shè)定的標(biāo)準(zhǔn)值則發(fā)布進(jìn)行存儲(chǔ)聚集擴(kuò)展的命令;(b)與管理節(jié)點(diǎn)保持心跳的存儲(chǔ)節(jié)點(diǎn)根據(jù)管理節(jié)點(diǎn)發(fā)布的命令進(jìn)行相應(yīng)的存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換;(C)存儲(chǔ)節(jié)點(diǎn)在完成相應(yīng)的存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換后,向管理節(jié)點(diǎn)回復(fù)負(fù)載調(diào)整成功;
(d)管理節(jié)點(diǎn)收到回復(fù)后對規(guī)則進(jìn)行相應(yīng)的存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換運(yùn)算,并通知規(guī)則節(jié)點(diǎn)集群更新規(guī)則。其中,所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行存儲(chǔ)聚集擴(kuò)展包括以下步驟(I)存儲(chǔ)節(jié)點(diǎn)在收到存儲(chǔ)聚集擴(kuò)展命令后將自身已保存的模數(shù)乘以ニ ;(2)該存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)聚集副本在序列號(hào)保持不變的情況下根據(jù)新的模數(shù)一分為ニ,且將新的存儲(chǔ)聚集副本的狀態(tài)設(shè)置為啟動(dòng)狀態(tài),并在存儲(chǔ)聚集副本之間建立心跳,之后向管理節(jié)點(diǎn)回復(fù)存儲(chǔ)聚集擴(kuò)展成功;(3)管理節(jié)點(diǎn)收到回復(fù)之后,對規(guī)則執(zhí)行存儲(chǔ)聚集擴(kuò)展運(yùn)算,并通知規(guī)則節(jié)點(diǎn)集群更新規(guī)則。其中,所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行存儲(chǔ)聚集變換包括以下步驟( I)管理節(jié)點(diǎn)在系統(tǒng)中選擇負(fù)載最輕的存儲(chǔ)節(jié)點(diǎn)作為存儲(chǔ)聚集變換的目的存儲(chǔ)節(jié)點(diǎn),并選擇過載存儲(chǔ)節(jié)點(diǎn)和目的存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)聚集副本集合的差集最小的ー個(gè)存儲(chǔ)聚集副本作為待遷移存儲(chǔ)聚集副本;(2)目的存儲(chǔ)節(jié)點(diǎn)根據(jù)管理節(jié)點(diǎn)的通知同步過載存儲(chǔ)節(jié)點(diǎn)中待遷移存儲(chǔ)聚集副本的數(shù)據(jù),并在自身重建與管理節(jié)點(diǎn)保持心跳連接的待遷移存儲(chǔ)聚集副本;(3)目的存儲(chǔ)節(jié)點(diǎn)根據(jù)過載存儲(chǔ)節(jié)點(diǎn)中待遷移存儲(chǔ)聚集副本的數(shù)據(jù)向過載存儲(chǔ)節(jié)點(diǎn)獲取資源,并將獲取的資源保存到重建的待遷移存儲(chǔ)聚集副本中,完成后向管理節(jié)點(diǎn)回復(fù)存儲(chǔ)聚集變換成功;(4)管理節(jié)點(diǎn)收到回復(fù)之后,對規(guī)則執(zhí)行存儲(chǔ)聚集變換運(yùn)算,并通知規(guī)則節(jié)點(diǎn)集群更新規(guī)則,之后將客戶端對過載存儲(chǔ)節(jié)點(diǎn)的訪問重新定向到目的存儲(chǔ)節(jié)點(diǎn);(5)將重建的待遷移存儲(chǔ)聚集副本設(shè)定為啟動(dòng)狀態(tài),該重建的待遷移存儲(chǔ)聚集副本將剩余沒有完全同步的資源同步過來,在同步完成后,對應(yīng)的存儲(chǔ)聚集開始工作;(6)過載存儲(chǔ)節(jié)點(diǎn)中斷與其對應(yīng)的存儲(chǔ)聚集副本的心跳連接,并刪除該存儲(chǔ)聚集副本。進(jìn)ー步地,所述系統(tǒng)容錯(cuò)方法中,若設(shè)定存儲(chǔ)節(jié)點(diǎn)失效后的重啟時(shí)間上限值,則該系統(tǒng)容錯(cuò)流程包括以下兩種情況第一種情況,當(dāng)存儲(chǔ)節(jié)點(diǎn)失效后的重啟時(shí)間超過上限值,則容錯(cuò)流程中管理節(jié)點(diǎn)對失效存儲(chǔ)節(jié)點(diǎn)中的每ー個(gè)存儲(chǔ)聚集執(zhí)行以下操作(I)管理節(jié)點(diǎn)選擇系統(tǒng)內(nèi)負(fù)載最輕的存儲(chǔ)節(jié)點(diǎn)作為目的存儲(chǔ)節(jié)點(diǎn);(2)目的存儲(chǔ)節(jié)點(diǎn)根據(jù)管理節(jié)點(diǎn)的通知向與失效存儲(chǔ)節(jié)點(diǎn)具有相同存儲(chǔ)聚集副本的其中一個(gè)存儲(chǔ)節(jié)點(diǎn)同步待遷移的存儲(chǔ)聚集副本的數(shù)據(jù),并在自身重建待遷移存儲(chǔ)聚集副本;(3)我們將與失效存儲(chǔ)節(jié)點(diǎn)具有相同存儲(chǔ)聚集副本的存儲(chǔ)節(jié)點(diǎn)作為源存儲(chǔ)節(jié)點(diǎn),則目的存儲(chǔ)節(jié)點(diǎn)根據(jù)源存儲(chǔ)節(jié)點(diǎn)中待遷移存儲(chǔ)聚集副本的數(shù)據(jù)向源存儲(chǔ)節(jié)點(diǎn)獲取資源,并將獲取的資源保存到重建的待遷移存儲(chǔ)聚集副本中;(4)管理節(jié)點(diǎn)對規(guī)則進(jìn)行存儲(chǔ)聚集變換操作,并通知規(guī)則節(jié)點(diǎn)更新規(guī)則,之后,將目的存儲(chǔ)節(jié)點(diǎn)對應(yīng)的存儲(chǔ)聚集副本設(shè)置為啟動(dòng)狀態(tài),并將客戶端對失效存儲(chǔ)節(jié)點(diǎn)的訪問重新定向到目的存儲(chǔ)節(jié)點(diǎn);
第二種情況,當(dāng)存儲(chǔ)節(jié)點(diǎn)失效后的重啟時(shí)間低于上限值,該容錯(cuò)流程包括以下步驟(I)失效存儲(chǔ)節(jié)點(diǎn)重新啟動(dòng)后向規(guī)則節(jié)點(diǎn)獲取最新的規(guī)則;(2)若在失效存儲(chǔ)節(jié)點(diǎn)失效期間系統(tǒng)進(jìn)行了存儲(chǔ)聚集擴(kuò)展運(yùn)算,失效儲(chǔ)節(jié)點(diǎn)則根據(jù)擴(kuò)展后的規(guī)則對已有的存儲(chǔ)聚集副本進(jìn)行分裂,之后將已有的存儲(chǔ)聚集副本和規(guī)則進(jìn)行對比,對比之后刪除已經(jīng)不屬于該失效存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)聚集副本;(3)失效存儲(chǔ)節(jié)點(diǎn)將其上的存儲(chǔ)聚集副本狀態(tài)設(shè)定為啟動(dòng)狀態(tài),并將失效期間的數(shù)據(jù)同步過來。更進(jìn)一歩地,還包括資源上傳流程,該上傳流程包括以下步驟( I)客戶端根據(jù)⑶ID生產(chǎn)算法,生成待上傳資源的⑶ID ;(2)客戶端檢查自身是否緩存有規(guī)則,如沒有則更新規(guī)則,如有則根據(jù)緩存的規(guī)則計(jì)算出對應(yīng)GUID應(yīng)該被存儲(chǔ)的存儲(chǔ)節(jié)點(diǎn)地址,井隨機(jī)向其中ー個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)起連接,且將該存儲(chǔ)節(jié)點(diǎn)作為該次上傳的發(fā)起節(jié)點(diǎn);(3)發(fā)起節(jié)點(diǎn)連接到待存儲(chǔ)資源的⑶ID,在確定客戶端定位正確且對應(yīng)的存儲(chǔ)聚集為工作狀態(tài)后,向與其保持心跳連接的存儲(chǔ)聚集副本發(fā)送待上傳資源的⑶ID ;(4)客戶端開始上傳,發(fā)起節(jié)點(diǎn)發(fā)送對應(yīng)的數(shù)據(jù)到存儲(chǔ)與其保持心跳連接的存儲(chǔ)聚集副本的存儲(chǔ)節(jié)點(diǎn),完成上傳。再進(jìn)ー步地,還包括資源刪除流程,該刪除流程包括以下步驟(I)客戶端獲得待刪除資源的⑶ID ;(2)客戶端檢查自身是否緩存有規(guī)則,如沒有則更新規(guī)則,如有則根據(jù)緩存的規(guī)則計(jì)算出對應(yīng)GUID應(yīng)該被存儲(chǔ)的存儲(chǔ)節(jié)點(diǎn)地址,井隨機(jī)向其中ー個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)起連接,且將該存儲(chǔ)節(jié)點(diǎn)作為該次刪除的發(fā)起節(jié)點(diǎn);(3)發(fā)起節(jié)點(diǎn)連接到待刪除資源的⑶ID,在確定客戶端定位正確且對應(yīng)的存儲(chǔ)聚集為工作狀態(tài)后,向與其保持心跳連接的存儲(chǔ)聚集副本發(fā)送待刪除資源的GUID,并為待刪除資源打上刪除標(biāo)簽;(4)在所有保持心跳連接的存儲(chǔ)聚集副本同時(shí)在線時(shí),將打有刪除標(biāo)簽的資源進(jìn)行刪除。具體地說,所述規(guī)則節(jié)點(diǎn)集群上的規(guī)則更新具體包括以下步驟( I)管理節(jié)點(diǎn)對規(guī)則進(jìn)行一次操作,其將規(guī)則版本遞增一,并將對應(yīng)的改動(dòng)寫入版本信息列表;(2)管理節(jié)點(diǎn)通知規(guī)則節(jié)點(diǎn)規(guī)則已更新,并讓規(guī)則節(jié)點(diǎn)更新規(guī)則;(3)規(guī)則節(jié)點(diǎn)將當(dāng)前規(guī)則的版本號(hào)發(fā)送到管理節(jié)點(diǎn),管理節(jié)點(diǎn)將該版本號(hào)與最新的版本號(hào)進(jìn)行對比,并將規(guī)則的變更序列發(fā)送給規(guī)則節(jié)點(diǎn);(4)規(guī)則節(jié)點(diǎn)收到管理節(jié)點(diǎn)發(fā)來的規(guī)則變更序列之后,按版本序列號(hào)從小到大的順序在自身緩存的規(guī)則上逐個(gè)執(zhí)行存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換操作,直至將當(dāng)前規(guī)則更新至最新。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果I.本發(fā)明中,存儲(chǔ)節(jié)點(diǎn)上的存儲(chǔ)聚集的多個(gè)副本間保持心跳連接,每隔ー個(gè)固定時(shí)間這幾個(gè)保持心跳連接的多個(gè)副本通過心跳連 接交互一次,這樣充分保證了存儲(chǔ)聚集的多個(gè)副本間通信暢通,降低了它們之間建立連接的網(wǎng)絡(luò)耗費(fèi)和錯(cuò)誤率。2.本發(fā)明中,存儲(chǔ)聚集的多個(gè)副本存儲(chǔ)在不同的存儲(chǔ)節(jié)點(diǎn)上,且它們之間可以感知到心跳連接的建立與斷開情況,從而能準(zhǔn)確判定對應(yīng)的其他存儲(chǔ)聚集副本的當(dāng)前狀態(tài),若其中ー個(gè)存儲(chǔ)聚集副本失效,我們可以從與其保持心跳連接的存儲(chǔ)聚集副本中獲取相應(yīng)的信息,這樣的設(shè)置有助于錯(cuò)誤恢復(fù)。3.本發(fā)明支持存儲(chǔ)聚集的多個(gè)副本之間相互協(xié)調(diào)存儲(chǔ)聚集的序列號(hào),且多個(gè)存儲(chǔ)聚集副本序列號(hào)之間的差距不會(huì)超過ー個(gè)心跳的變化,這樣的設(shè)置有效避免了毎次上傳、刪除過程中多余的序列號(hào)協(xié)商交互。4.本發(fā)明根據(jù)過載存儲(chǔ)節(jié)點(diǎn)上的存儲(chǔ)聚集數(shù)量分別使用存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換對其進(jìn)行相應(yīng)調(diào)整,當(dāng)過載存儲(chǔ)節(jié)點(diǎn)上存儲(chǔ)聚集數(shù)量較少時(shí)進(jìn)行存儲(chǔ)聚集擴(kuò)展,當(dāng)其數(shù)量較多時(shí)進(jìn)行存儲(chǔ)聚集變換,這種對過載存儲(chǔ)節(jié)點(diǎn)的分類調(diào)整使得負(fù)載調(diào)整更精確有效。5.本發(fā)明根據(jù)重啟時(shí)間長短分兩種情況對失效存儲(chǔ)節(jié)點(diǎn)進(jìn)行相應(yīng)的系統(tǒng)容錯(cuò),這種對失效存儲(chǔ)節(jié)點(diǎn)的分情況容錯(cuò)使得容錯(cuò)流程更具有科學(xué)性、更有效。
圖I為分布式存儲(chǔ)系統(tǒng)的系統(tǒng)架構(gòu)。圖2為原始的模數(shù)以及散列映射規(guī)則第二級(jí)對應(yīng)表的圖示。圖3為存儲(chǔ)聚集變換運(yùn)算后的模數(shù)及散列映射規(guī)則第二級(jí)對應(yīng)表的圖示。圖4為存儲(chǔ)聚集擴(kuò)展運(yùn)算后的模數(shù)及散列映射規(guī)則第二級(jí)對應(yīng)表的圖示圖5為本發(fā)明中負(fù)載調(diào)整方法的流程圖。圖6為本發(fā)明中系統(tǒng)容錯(cuò)方法的流程圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)ー步說明,本發(fā)明的實(shí)施方式包括但不限于下列實(shí)施例。實(shí)施例I如圖I所示,現(xiàn)有的分布式存儲(chǔ)系統(tǒng),包括用于存儲(chǔ)資源的存儲(chǔ)節(jié)點(diǎn)集群,分別與該存儲(chǔ)節(jié)點(diǎn)集群連接的對存儲(chǔ)節(jié)點(diǎn)集群進(jìn)行管理的管理節(jié)點(diǎn)和根據(jù)散列機(jī)制獲取資源存儲(chǔ)位置的客戶端,以及連接該管理節(jié)點(diǎn)和客戶端并接受管理節(jié)點(diǎn)管理、為客戶端提供散列映射規(guī)則的規(guī)則節(jié)點(diǎn)集群。以下為對分布式存儲(chǔ)系統(tǒng)中各部分的詳細(xì)說明
存儲(chǔ)節(jié)點(diǎn)集群,由所有的存儲(chǔ)節(jié)點(diǎn)構(gòu)成,系統(tǒng)中的所有資源都存儲(chǔ)在該集群中的存儲(chǔ)節(jié)點(diǎn)上,存儲(chǔ)節(jié)點(diǎn)和管理節(jié)點(diǎn)之間維持大周期I分鐘以上的心跳,以匯報(bào)自身情況,即磁盤使用情況及當(dāng)前壓力,并接受管理節(jié)點(diǎn)統(tǒng)一管理。規(guī)則節(jié)點(diǎn)集群,由所有的規(guī)則節(jié)點(diǎn)構(gòu)成,每個(gè)規(guī)則節(jié)點(diǎn)都保存有當(dāng)前系統(tǒng)的最新映射存儲(chǔ)規(guī)則,該集群負(fù)責(zé)響應(yīng)客戶端更新規(guī)則的請求,并接受管理節(jié)點(diǎn)的統(tǒng)ー管理,當(dāng)管理節(jié)點(diǎn)對規(guī)則進(jìn)行更新之后,其會(huì)以版本更新的方式通知所有的規(guī)則節(jié)點(diǎn)更新規(guī)則,作為優(yōu)選對規(guī)則集群采用DNS重定位或者反向路由的方式進(jìn)行訪問,以分散壓力。管理節(jié)點(diǎn),該節(jié)點(diǎn)是系統(tǒng)的中心控制節(jié)點(diǎn),作為優(yōu)選我們采用雙機(jī)熱備的方法,防止單點(diǎn)失效的發(fā)生,雖然該節(jié)點(diǎn)是系統(tǒng)的中心 ,但其只與存儲(chǔ)節(jié)點(diǎn)維持大周期的心跳,并不對外服務(wù),因此其壓力非常小,其可以通過自動(dòng),或管理員手動(dòng)的方式,對系統(tǒng)的負(fù)載均衡進(jìn)行總體的控制,并在每次對系統(tǒng)的負(fù)載作出調(diào)整后,通知規(guī)則節(jié)點(diǎn)集群進(jìn)行規(guī)則更新。客戶端通過資源的全局唯一標(biāo)識(shí)符⑶ID結(jié)合散列映射規(guī)則進(jìn)行運(yùn)算,得到資源的具體存儲(chǔ)位置,對資源進(jìn)行訪問,客戶端會(huì)緩存規(guī)則,只有在其沒有規(guī)則或定位資源出現(xiàn)錯(cuò)誤吋,客戶端才會(huì)向規(guī)則集群更新規(guī)則。具體地說,上述散列映射規(guī)則分為兩級(jí),第一級(jí)規(guī)則將⑶ID空間通過取模運(yùn)算分散為數(shù)量較少的、較為平均的多個(gè)存儲(chǔ)聚集;第二級(jí)規(guī)則是ー張定位表,行代表存儲(chǔ)聚集的索引號(hào),每行有多列,每列對應(yīng)ー個(gè)存放存儲(chǔ)聚集副本的存儲(chǔ)節(jié)點(diǎn)。第一級(jí)散列映射規(guī)則可以表示為以下形式B= {b I b = i mod KX 2n, i e 1}其中B為存儲(chǔ)聚集的集合,K為任意初始值,η為2的指數(shù),I為資源的GUID的集合,資源的⑶ID通過取模運(yùn)算規(guī)則,被分散為|Β|個(gè)存儲(chǔ)聚集,存儲(chǔ)聚集是資源的⑶ID的集合,存儲(chǔ)聚集X表示為以下形式bx = {i I X = i mod KX 2n, i e 1}作為優(yōu)選,我們建議選用較好的GUID生成算法,使分配到存儲(chǔ)聚集的資源數(shù)量更為平均,而資源的均勻分配也能更好的達(dá)到負(fù)載均衡。如圖2所示,第二級(jí)規(guī)則為ー張定位表,圖中令每個(gè)存儲(chǔ)聚集的副本數(shù)為2,其中K=I, n=l,因此模數(shù)為2,該定位表有2行,bx代表存儲(chǔ)聚集X,dx代表存儲(chǔ)節(jié)點(diǎn)X的地址。進(jìn)ー步地,定義在該散列映射規(guī)則上的運(yùn)算有兩種,存儲(chǔ)聚集變換運(yùn)算和存儲(chǔ)聚集擴(kuò)展運(yùn)算。存儲(chǔ)聚集變換運(yùn)算作用在上述散列映射規(guī)則的第二級(jí)規(guī)則的定位表上,該運(yùn)算的語義為將某個(gè)存儲(chǔ)節(jié)點(diǎn)上的某個(gè)存儲(chǔ)聚集遷移到另ー個(gè)存儲(chǔ)節(jié)點(diǎn)上,表現(xiàn)為第二級(jí)規(guī)則中定位表的變化為將某個(gè)存儲(chǔ)聚集索引號(hào)所對應(yīng)的某個(gè)副本的地址從ー個(gè)值更新為另ー個(gè)值。如圖2和圖3所示,該運(yùn)算的效果為將I號(hào)存儲(chǔ)聚集在d4上的副本遷移到了 d2上。存儲(chǔ)聚集擴(kuò)展運(yùn)算主要作用在上述散列映射規(guī)則的第一級(jí)規(guī)則上,因兩級(jí)規(guī)則的依賴關(guān)系,第二級(jí)規(guī)則也會(huì)隨第一級(jí)規(guī)則的變化相應(yīng)變化,該運(yùn)算的語義為將每個(gè)存儲(chǔ)聚集一分為ニ,以達(dá)到増加存儲(chǔ)聚集數(shù)量,縮小單個(gè)存儲(chǔ)聚集大小的目的,表現(xiàn)為第一級(jí)規(guī)則η值的遞増,以及第二級(jí)規(guī)則中對應(yīng)表的擴(kuò)展。第一級(jí)規(guī)則中η值的遞增表明了模數(shù)的翻倍。模數(shù)翻倍后,以前的每個(gè)存儲(chǔ)聚集都變?yōu)榱藘蓚€(gè)。令存儲(chǔ)聚集為X,其在通過該運(yùn)算前的集合表示為
bx = {i I X = i mod KX 2n, i e 1}在通過該運(yùn)算后變?yōu)槿缦聝蓚€(gè)集合b' x = {i |x = i mod KX2n+1, i e 1}b^j-x,n = {i|s ~ K X 2n = i mod K X 233*1, i E 1}這里 b£ = blj U b^Kx;tt AND 0 = H Kv^n通過該方法,原來的存儲(chǔ)聚集X被劃分為了互不相交的兩個(gè)存儲(chǔ)聚集,且保存在原來的存儲(chǔ)節(jié)點(diǎn)上。如圖2、4所示,隨著第一級(jí)規(guī)則中模數(shù)的翻倍,第二級(jí)規(guī)則中的對應(yīng)表需要進(jìn)行擴(kuò)展,根據(jù)以上的集合表示,可很容易構(gòu)造出擴(kuò)展后的對應(yīng)表。以上規(guī)則有ー個(gè)限制,即某個(gè)存儲(chǔ)聚集的兩個(gè)副本不能存儲(chǔ)在同一個(gè)存儲(chǔ)節(jié)點(diǎn)上,在散列映射規(guī)則上不能做到這個(gè)限制,因此需要在算法上加以實(shí)現(xiàn)。由于散列映射規(guī)則的體積會(huì)隨著系統(tǒng)規(guī)模的擴(kuò)大而増大,為了盡可能的減少客戶端在更新散列映射規(guī)則時(shí)的等待時(shí)間,提升用戶體驗(yàn),采用如下兩種策略策略一,客戶端對散列映射規(guī)則的更新采用基于版本的増量更新策略,只有在客戶端并沒有緩存規(guī)則或緩存的規(guī)則過于老舊時(shí),進(jìn)行散列映射規(guī)則的全量更新,盡可能的減少傳輸量,以加快散列映射規(guī)則更新速度,降低散列映射規(guī)則節(jié)點(diǎn)集群的壓力。策略ニ,首先,在對應(yīng)表中,存儲(chǔ)節(jié)點(diǎn)的地址使用IP ニ進(jìn)制表示法,以壓縮散列映射規(guī)則本身的體積,另外,在進(jìn)行全量更新時(shí),散列映射規(guī)則需要經(jīng)過壓縮,以減少傳輸過程的耗費(fèi)。此外,散列映射規(guī)則的毎次更新,均只改變系統(tǒng)中極少量的定位信息,大部分定位信息仍然可以使用,系統(tǒng)并不需告知客戶端更新散列映射規(guī)則,客戶端只需要在感知到散列映射規(guī)則失效之后,對其進(jìn)行更新即可。在不考慮網(wǎng)絡(luò)分區(qū)的情況下,上述基于多級(jí)映射的大規(guī)模多副本分布式存儲(chǔ)系統(tǒng)的應(yīng)用方法,從整體上看包括以下幾個(gè)步驟(a)系統(tǒng)初始化;(b)客戶端檢查是否需要更新散列映射規(guī)則,如果需要更新,則更新至與規(guī)則節(jié)點(diǎn)相同的散列映射規(guī)則;(C)客戶端通過⑶ID生成算法確定待上傳資源的⑶ID,并根據(jù)⑶ID和散列映射規(guī)則計(jì)算出存儲(chǔ)節(jié)點(diǎn)位置,將待上傳資源存儲(chǔ)至存儲(chǔ)節(jié)點(diǎn)之中;(d)客戶端得到需要獲取資源的GUID,并根據(jù)散列映射規(guī)則計(jì)算出需要獲取資源的副本對應(yīng)的存儲(chǔ)節(jié)點(diǎn)地址,然后由與存儲(chǔ)節(jié)點(diǎn)地址對應(yīng)的存儲(chǔ)節(jié)點(diǎn)查找該需要獲取的資源,再向客戶端回復(fù)查找結(jié)果。下面對上述整體步驟進(jìn)行一一說明。(一)系統(tǒng)初始化,具體步驟如下(I)以初始化方式啟動(dòng)管理節(jié)點(diǎn)的主機(jī)和備機(jī),此時(shí),散列映射規(guī)則的模數(shù)為O ;(2)以初始化方式啟動(dòng)存儲(chǔ)節(jié)點(diǎn)集群和規(guī)則節(jié)點(diǎn)集群,此時(shí),所有存儲(chǔ)節(jié)點(diǎn)上沒有存儲(chǔ)聚集,規(guī)則節(jié)點(diǎn)上的模數(shù)為0,版本為0,在存儲(chǔ)節(jié)點(diǎn)啟動(dòng)完成時(shí),管理節(jié)點(diǎn)會(huì)收到所有存儲(chǔ)節(jié)點(diǎn)的心跳,得到整個(gè)系統(tǒng)中存儲(chǔ)節(jié)點(diǎn)的配置,以反映其能力;(3 )管理員初始化系統(tǒng)中第一級(jí)規(guī)則的K值和η值,并讓管理節(jié)點(diǎn)針對系統(tǒng)中每個(gè)存儲(chǔ)節(jié)點(diǎn)的能力即權(quán)重,計(jì)算出合理的存儲(chǔ)聚集分配情況,即對應(yīng)表,對應(yīng)表也可以由管理員手動(dòng)設(shè)置;對應(yīng)表的初始化算法如下(I)計(jì)算系統(tǒng)中所有存儲(chǔ)節(jié)點(diǎn)的權(quán)重,并得到權(quán)重總和,權(quán)重的算法可根據(jù)磁盤空間、CPU、網(wǎng)卡等的配置計(jì)算; (2)用每個(gè)存儲(chǔ)節(jié)點(diǎn)的權(quán)重除以總權(quán)重得到該存儲(chǔ)節(jié)點(diǎn)應(yīng)該存儲(chǔ)的存儲(chǔ)聚集比例;(3)根據(jù)存儲(chǔ)節(jié)點(diǎn)應(yīng)該存儲(chǔ)的存儲(chǔ)聚集比例,將所有存儲(chǔ)聚集的副本依次按帶狀分配給存儲(chǔ)節(jié)點(diǎn),在毎次分配時(shí),避免在同一個(gè)存儲(chǔ)節(jié)點(diǎn)上放置ー個(gè)存儲(chǔ)聚集的多個(gè)副本,直到分配完成;(4)管理員令管理節(jié)點(diǎn)根據(jù)得到的兩級(jí)散列映射規(guī)則的信息,對系統(tǒng)進(jìn)行初始化,管理節(jié)點(diǎn)根據(jù)對應(yīng)表的設(shè)置,依次向存儲(chǔ)節(jié)點(diǎn)發(fā)送當(dāng)前的映射中的模數(shù)及存儲(chǔ)聚集初始化的命令,存儲(chǔ)節(jié)點(diǎn)保存該模數(shù),并初始化對應(yīng)的存儲(chǔ)聚集,每個(gè)存儲(chǔ)聚集的初始序列號(hào)在這里被設(shè)置為O ;(5)管理節(jié)點(diǎn)向規(guī)則節(jié)點(diǎn)集群發(fā)送初始化規(guī)則,規(guī)則節(jié)點(diǎn)集群將版本號(hào)自增,在初始化規(guī)則完成后,系統(tǒng)開始對外服務(wù);(ニ)客戶端檢查是否需要更新散列映射規(guī)則,如果需要更新,則更新至與規(guī)則節(jié)點(diǎn)相同的散列映射規(guī)則。客戶端內(nèi)散列映射規(guī)則的更新步驟如下(I)客戶端向規(guī)則節(jié)點(diǎn)集群中的任一規(guī)則節(jié)點(diǎn)發(fā)送自身緩存規(guī)則的版本號(hào),如果自身一開始沒有規(guī)則的緩存,發(fā)送版本號(hào)O ;(2)規(guī)則節(jié)點(diǎn)將客戶端發(fā)來的版本號(hào)與自身最新的版本號(hào)進(jìn)行對比,如果該版本號(hào)為0,表明客戶端沒有規(guī)則,需要全量更新,如果該版本號(hào)過于老舊,也應(yīng)該全量更新,其他情況下,使用増量更新,全量更新發(fā)送壓縮后的散列映射規(guī)則以及最新版本號(hào),増量更新發(fā)送兩個(gè)版本之間的變化序列以及最新版本號(hào),判斷版本過于老舊的算法須結(jié)合具體實(shí)現(xiàn)進(jìn)行優(yōu)化;(3)客戶端接收到回復(fù)之后,或者將全量規(guī)則解壓進(jìn)行緩存,或者利用規(guī)則節(jié)點(diǎn)發(fā)來的變化序列更新本地緩存規(guī)則;(三)客戶端通過⑶ID生成算法和散列映射規(guī)則確定待上傳資源的⑶ID,并將待上傳資源存儲(chǔ)至存儲(chǔ)節(jié)點(diǎn)之中,具體如下(I)客戶端根據(jù)⑶ID生成算法,生成所需存儲(chǔ)資源的⑶ID ;(2)客戶端通過GUID結(jié)合散列映射規(guī)則計(jì)算出資源的副本應(yīng)該被存儲(chǔ)的存儲(chǔ)節(jié)點(diǎn)地址,井隨機(jī)向其中ー個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)起連接,該存儲(chǔ)節(jié)點(diǎn)作為該次上傳的發(fā)起節(jié)點(diǎn),當(dāng)發(fā)起節(jié)點(diǎn)連接無誤時(shí),客戶端向發(fā)起節(jié)點(diǎn)發(fā)送其需要上傳資源的GUID以及該資源的所有副本對應(yīng)的所有存儲(chǔ)節(jié)點(diǎn)地址,當(dāng)發(fā)起節(jié)點(diǎn)連接錯(cuò)誤時(shí),隨機(jī)選取另ー個(gè)存儲(chǔ)節(jié)點(diǎn)重試,如果全部存儲(chǔ)節(jié)點(diǎn)都連接錯(cuò)誤,則更新規(guī)則并回到步驟(I)重新生成新的⑶ID ;(3)發(fā)起節(jié)點(diǎn)和與其對應(yīng)的其他存儲(chǔ)節(jié)點(diǎn)建立連接,并將⑶ID發(fā)送給與其對應(yīng)的其他存儲(chǔ)節(jié)點(diǎn),所有存儲(chǔ)節(jié)點(diǎn)都進(jìn)行GUID和模數(shù)的取模運(yùn)算,得到ー個(gè)存儲(chǔ)聚集號(hào),并將該存儲(chǔ)聚集號(hào)與自身所有的存儲(chǔ)聚集號(hào)進(jìn)行比較,驗(yàn)證客戶端定位的準(zhǔn)確性;(4)如果連接上的存儲(chǔ)節(jié)點(diǎn)數(shù)量達(dá)到上傳的副本數(shù)量的最小值,且所有對應(yīng)的存儲(chǔ)節(jié)點(diǎn)確認(rèn)定位準(zhǔn)確,發(fā)起節(jié)點(diǎn)則向客戶端回復(fù)確認(rèn)信息,客戶端開始上傳資源,并由發(fā)起節(jié)點(diǎn)轉(zhuǎn)發(fā)給其他存儲(chǔ)節(jié)點(diǎn),如果對應(yīng)的存儲(chǔ)節(jié)點(diǎn)定位不準(zhǔn)確,則客戶端更新規(guī)則到步驟
(2);在上傳過程中,如果發(fā)起節(jié)點(diǎn)失效,客戶端回到步驟(2)重試,如果其他存儲(chǔ)節(jié)點(diǎn)失效,則由發(fā)起節(jié)點(diǎn)判斷副本數(shù)量是否達(dá)標(biāo),如果不達(dá)標(biāo),回復(fù)客戶端上傳失敗并回到步驟(I)重新生成新的⑶ID ; (5)發(fā)起節(jié)點(diǎn)在收到超過要求副本數(shù)量的確認(rèn)之后,回復(fù)客戶端上傳成功,如沒有收到超過要求副本數(shù)量的確認(rèn),則向客戶端回復(fù)上傳失敗,進(jìn)行資源刪除。在該上傳過程中,序列號(hào)的確認(rèn)由存儲(chǔ)節(jié)點(diǎn)自行確認(rèn)即可,心跳交換序列號(hào)的過程使得各個(gè)存儲(chǔ)節(jié)點(diǎn)上關(guān)于某個(gè)桶的序列號(hào)不會(huì)超過ー個(gè)心跳的差值;出現(xiàn)不能恢復(fù)的錯(cuò)誤時(shí),發(fā)起節(jié)點(diǎn)只需要斷開和其他存儲(chǔ)節(jié)點(diǎn)的連接即可,存儲(chǔ)節(jié)點(diǎn)感知到連接異常斷開也只需直接刪除掉該資源即可,序列號(hào)有兩個(gè)作用,ー個(gè)是作為資源是否上傳完成的標(biāo)識(shí),用于垃圾清理,另ー個(gè)是使各個(gè)存儲(chǔ)聚集副本中的資源維持相同的單調(diào)不減序列,便于在存儲(chǔ)節(jié)點(diǎn)出錯(cuò)時(shí)進(jìn)行増量恢復(fù)。(四)客戶端得到需要獲取資源的GUID,并計(jì)算出需要獲取資源的副本對應(yīng)的存儲(chǔ)節(jié)點(diǎn)地址,然后由與存儲(chǔ)節(jié)點(diǎn)地址對應(yīng)的存儲(chǔ)節(jié)點(diǎn)查找該需要獲取的資源,再向客戶端回復(fù)查找結(jié)果。具體步驟如下(I)客戶端得到需要獲取的資源的GUID,并據(jù)該GUID結(jié)合散列映射規(guī)則計(jì)算出資源的副本應(yīng)該被存儲(chǔ)的存儲(chǔ)節(jié)點(diǎn)地址;(2)客戶端隨機(jī)向其中ー個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)起連接,當(dāng)發(fā)起連接錯(cuò)誤時(shí),隨機(jī)選取另一個(gè)存儲(chǔ)節(jié)點(diǎn)重試,如果全部都連接錯(cuò)誤,更新規(guī)則并回到步驟(I)重試;(3)客戶端向連接上的存儲(chǔ)節(jié)點(diǎn)發(fā)送需要獲取的資源的⑶ID,存儲(chǔ)節(jié)點(diǎn)進(jìn)行⑶ID和模數(shù)的取模運(yùn)算,得到ー個(gè)存儲(chǔ)聚集號(hào),并將該存儲(chǔ)聚集號(hào)與自身所有的存儲(chǔ)聚集號(hào)進(jìn)行比較,以驗(yàn)證客戶端定位的準(zhǔn)確性,當(dāng)存儲(chǔ)節(jié)點(diǎn)發(fā)現(xiàn)客戶端定位錯(cuò)誤吋,回絕客戶端請求,并告知規(guī)則過期,客戶端更新規(guī)則后回到步驟(I)重試;(4)在通過驗(yàn)證之后,存儲(chǔ)節(jié)點(diǎn)在對應(yīng)存儲(chǔ)聚集中查找該對應(yīng)資源的GUID,如找到相應(yīng)的GUID,則向客戶端回復(fù)對應(yīng)資源的數(shù)據(jù);如沒有找到相應(yīng)的GUID,則向客戶端回復(fù)出錯(cuò),客戶端回到步驟(2)。以上述應(yīng)用方法為基礎(chǔ),本發(fā)明還提供了相應(yīng)的故障恢復(fù)方法,流程如下存儲(chǔ)節(jié)點(diǎn)向規(guī)則節(jié)點(diǎn)集群獲取規(guī)則,找到保存該存儲(chǔ)聚集副本的其他存儲(chǔ)節(jié)點(diǎn),向這些存儲(chǔ)聚集確認(rèn)對應(yīng)GUID的存在情況,如發(fā)現(xiàn)該GUID確認(rèn)存在,則向其他存儲(chǔ)節(jié)點(diǎn)獲取該資源,如不存在,則結(jié)束會(huì)話。在上述分布式存儲(chǔ)系統(tǒng)的基礎(chǔ)上,我們對其實(shí)現(xiàn)方法進(jìn)行了進(jìn)ー步地改進(jìn),具體包括管理節(jié)點(diǎn)檢查存儲(chǔ)節(jié)點(diǎn)發(fā)來的心跳信息,當(dāng)檢查到存儲(chǔ)節(jié)點(diǎn)壓カ過大即過載時(shí),采用負(fù)載調(diào)整方法對該壓力過大的過載存儲(chǔ)節(jié)點(diǎn)進(jìn)行負(fù)載調(diào)整;當(dāng)檢查到存儲(chǔ)節(jié)點(diǎn)失效時(shí),采用系統(tǒng)容錯(cuò)方法對該失效存儲(chǔ)節(jié)點(diǎn)進(jìn)行系統(tǒng)容錯(cuò)。所述分布式存儲(chǔ)系統(tǒng)中,每個(gè)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)有至少ー個(gè)存儲(chǔ)聚集,每個(gè)存儲(chǔ)聚集至少有ー個(gè)存儲(chǔ)聚集副本,且當(dāng)存儲(chǔ)聚集的存儲(chǔ)聚集副本為兩個(gè)以上吋,這兩個(gè)以上存儲(chǔ)聚集副本分別存儲(chǔ)在不同的存儲(chǔ)節(jié)點(diǎn)上,且該兩個(gè)以上存儲(chǔ)聚集副本兩兩之間保持心跳連接。在同一個(gè)存儲(chǔ)節(jié)點(diǎn)上的多個(gè)存儲(chǔ)聚集副本共用存儲(chǔ)節(jié)點(diǎn)提供的網(wǎng)絡(luò)資源,且存儲(chǔ)聚集的多個(gè)副本之間相互維持心跳連接,每隔ー個(gè)固定的時(shí)間,同一存儲(chǔ)聚集的多個(gè)存儲(chǔ)聚集副本之間進(jìn)行心跳交互,且多個(gè)存儲(chǔ)聚集副本之間的資源數(shù)據(jù)轉(zhuǎn)發(fā)、刪除等都復(fù)用該心跳連接,存儲(chǔ)聚集間通過心跳連接捎帶同一序列號(hào),且存儲(chǔ)聚集與存儲(chǔ)聚集之間的序列號(hào)相差ー個(gè)心跳范圍內(nèi)。在本發(fā)明中,存儲(chǔ)聚集的每個(gè)副本均有以下四種狀態(tài)
啟動(dòng)狀態(tài)當(dāng)存儲(chǔ)節(jié)點(diǎn)啟動(dòng)時(shí),在其上的每ー個(gè)存儲(chǔ)聚集都處于啟動(dòng)狀態(tài),在該狀態(tài)下,存儲(chǔ)聚集會(huì)等待一段時(shí)間,這段時(shí)間內(nèi),如有其他處于工作狀態(tài)的相同存儲(chǔ)聚集的副本連接到它,和它建立心跳,其即進(jìn)入恢復(fù)狀態(tài);如沒有其他處于工作狀態(tài)的相同存儲(chǔ)聚集的副本連接到它,則其進(jìn)入工作狀態(tài)。工作狀態(tài)只有在該狀態(tài)下,存儲(chǔ)聚集才對客戶端服務(wù),在其他三種狀態(tài)下,如有客戶端連接,則回絕客戶端請求,在該狀態(tài)下,若存儲(chǔ)聚集副本并沒有和另外對應(yīng)的副本中的任ー個(gè)建立心跳連接,則其會(huì)周期性試探和其他未建立心跳的副本建立心跳連接。在此過程中,由于存在失效副本異地重建的可能性,該處于工作狀態(tài)的副本也會(huì)定期向規(guī)則節(jié)點(diǎn)拖取對應(yīng)存儲(chǔ)聚集的存儲(chǔ)節(jié)點(diǎn)列表。恢復(fù)狀態(tài)當(dāng)某存儲(chǔ)聚集副本進(jìn)入該狀態(tài)時(shí),絕大部分情況是其處于失效重啟的過程中,存儲(chǔ)聚集副本會(huì)向連結(jié)上它的處于工作狀態(tài)的存儲(chǔ)聚集副本進(jìn)行數(shù)據(jù)的同步恢復(fù),其向正常工作的副本發(fā)送其保持的最大的序列號(hào)值,該值根據(jù)副本之間心跳的誤差稍作減小,正常工作的副本會(huì)將其維護(hù)的處在該序列號(hào)之后的所有資源數(shù)據(jù)的GUID發(fā)送回該副本,之后,該副本會(huì)逐個(gè)遍歷得到的GUID列表,并向正常工作的副本進(jìn)行數(shù)據(jù)同步。在這個(gè)恢復(fù)的過程中,存儲(chǔ)聚集副本可以接收由發(fā)起節(jié)點(diǎn)轉(zhuǎn)發(fā)來的數(shù)據(jù),并進(jìn)行存儲(chǔ),但絕不會(huì)成為發(fā)起節(jié)點(diǎn),對用戶服務(wù),于恢復(fù)狀態(tài)的存儲(chǔ)聚集副本,在向ー個(gè)存儲(chǔ)聚集副本同歩數(shù)據(jù)完成以后,會(huì)檢查當(dāng)前的心跳連接的狀態(tài),若與另外兩個(gè)存儲(chǔ)聚集副本的心跳連接都已建立,則立即啟動(dòng)與另ー個(gè)存儲(chǔ)聚集副本的數(shù)據(jù)同步流程,若此時(shí)仍然只有ー個(gè)存儲(chǔ)聚集副本的心跳連接,則處于恢復(fù)狀態(tài)的存儲(chǔ)聚集副本將自己再次設(shè)置為啟動(dòng)狀態(tài),再等待另ー個(gè)超時(shí)時(shí)間后,來決定進(jìn)行再一次的恢復(fù)或是進(jìn)入工作狀態(tài)。重建狀態(tài)該狀態(tài)僅在存儲(chǔ)聚集變換時(shí)使用。該狀態(tài)下,存儲(chǔ)聚集副本并不對外服務(wù),也不對外建立心跳,甚至另與其對應(yīng)的存儲(chǔ)聚集副本也無法感知到該副本的存在。如圖5所示,所述分布式存儲(chǔ)系統(tǒng)的負(fù)載調(diào)整方法包括以下步驟(a)設(shè)定過載存儲(chǔ)節(jié)點(diǎn)上的存儲(chǔ)聚集數(shù)量標(biāo)準(zhǔn)值,管理節(jié)點(diǎn)檢查過載存儲(chǔ)節(jié)點(diǎn)上的存儲(chǔ)聚集數(shù)量,若超過已設(shè)定的標(biāo)準(zhǔn)值則發(fā)布進(jìn)行存儲(chǔ)聚集變換的命令,若低于已設(shè)定的標(biāo)準(zhǔn)值則發(fā)布進(jìn)行存儲(chǔ)聚集擴(kuò)展的命令;(b)與管理節(jié)點(diǎn)保持心跳的存儲(chǔ)節(jié)點(diǎn)根據(jù)管理節(jié)點(diǎn)發(fā)布的命令進(jìn)行相應(yīng)的存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換;(C)存儲(chǔ)節(jié)點(diǎn)在完成相應(yīng)的存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換后,向管理節(jié)點(diǎn)回復(fù)負(fù)載調(diào)整成功;(d)管理節(jié)點(diǎn)收到回復(fù)后對規(guī)則進(jìn)行相應(yīng)的存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換運(yùn)算,并通知規(guī)則節(jié)點(diǎn)集群更新規(guī)則。具體地說,所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行存儲(chǔ)聚集擴(kuò)展包括以下步驟(I)存儲(chǔ)節(jié)點(diǎn)在收到存儲(chǔ)聚集擴(kuò)展命令后將自身已保存的模數(shù)乘以ニ ;(2)該存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)聚集副本在序列號(hào)保持不變的情況下根據(jù)新的模數(shù)一分為ニ,且將新的存儲(chǔ)聚集副本的狀態(tài)設(shè)置為啟動(dòng)狀態(tài),并在存儲(chǔ)聚集副本之間建立心跳,之后向管理節(jié)點(diǎn)回復(fù)存儲(chǔ)聚集擴(kuò)展成功;(3)管理節(jié)點(diǎn)收到回復(fù)之后,對規(guī)則執(zhí)行存儲(chǔ)聚集擴(kuò)展運(yùn)算,并通知規(guī)則節(jié)點(diǎn)集群更新規(guī)則。
所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行存儲(chǔ)聚集變換包括以下步驟( I)管理節(jié)點(diǎn)在系統(tǒng)中選擇負(fù)載最輕的存儲(chǔ)節(jié)點(diǎn)作為存儲(chǔ)聚集變換的目的存儲(chǔ)節(jié)點(diǎn),并選擇過載存儲(chǔ)節(jié)點(diǎn)和目的存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)聚集副本集合的差集最小的ー個(gè)存儲(chǔ)聚集副本作為待遷移存儲(chǔ)聚集副本;(2)目的存儲(chǔ)節(jié)點(diǎn)根據(jù)管理節(jié)點(diǎn)的通知同步過載存儲(chǔ)節(jié)點(diǎn)中待遷移存儲(chǔ)聚集副本的數(shù)據(jù),并在自身重建與管理節(jié)點(diǎn)保持心跳連接的待遷移存儲(chǔ)聚集副本;(3)目的存儲(chǔ)節(jié)點(diǎn)根據(jù)過載存儲(chǔ)節(jié)點(diǎn)中待遷移存儲(chǔ)聚集副本的數(shù)據(jù)向過載存儲(chǔ)節(jié)點(diǎn)獲取資源,并將獲取的資源保存到重建的待遷移存儲(chǔ)聚集副本中,完成后向管理節(jié)點(diǎn)回復(fù)存儲(chǔ)聚集變換成功;(4)管理節(jié)點(diǎn)收到回復(fù)之后,對規(guī)則執(zhí)行存儲(chǔ)聚集變換運(yùn)算,并通知規(guī)則節(jié)點(diǎn)集群更新規(guī)則,之后將客戶端對過載存儲(chǔ)節(jié)點(diǎn)的訪問重新定向到目的存儲(chǔ)節(jié)點(diǎn);(5)將重建的待遷移存儲(chǔ)聚集副本設(shè)定為啟動(dòng)狀態(tài),該重建的待遷移存儲(chǔ)聚集副本將剩余沒有完全同步的資源同步過來,在同步完成后,對應(yīng)的存儲(chǔ)聚集開始工作;(6)過載存儲(chǔ)節(jié)點(diǎn)中斷與其對應(yīng)的存儲(chǔ)聚集副本的心跳連接,并刪除該存儲(chǔ)聚集副本。與該存儲(chǔ)聚集副本保持心跳連接的副本發(fā)現(xiàn)其心跳中斷后,周期性重連另ー個(gè)存儲(chǔ)聚集副本,并在這一周期性的重連過程中周期性獲取規(guī)則,由于規(guī)則已經(jīng)改變,便可以連接上目的存儲(chǔ)節(jié)點(diǎn)。如圖6所示,所述分布式存儲(chǔ)系統(tǒng)的系統(tǒng)容錯(cuò)方法,若設(shè)定存儲(chǔ)節(jié)點(diǎn)失效后的重啟時(shí)間上限值,則該系統(tǒng)容錯(cuò)流程包括以下兩種情況第一種情況,當(dāng)存儲(chǔ)節(jié)點(diǎn)失效后的重啟時(shí)間超過上限值,則容錯(cuò)流程中管理節(jié)點(diǎn)對失效存儲(chǔ)節(jié)點(diǎn)中的每ー個(gè)存儲(chǔ)聚集執(zhí)行以下操作(I)管理節(jié)點(diǎn)選擇系統(tǒng)內(nèi)負(fù)載最輕的存儲(chǔ)節(jié)點(diǎn)作為目的存儲(chǔ)節(jié)點(diǎn);該目的存儲(chǔ)節(jié)點(diǎn)不包含有待重建存儲(chǔ)聚集副本的存儲(chǔ)節(jié)點(diǎn);(2)目的存儲(chǔ)節(jié)點(diǎn)根據(jù)管理節(jié)點(diǎn)的通知向與失效存儲(chǔ)節(jié)點(diǎn)具有相同存儲(chǔ)聚集副本的其中一個(gè)存儲(chǔ)節(jié)點(diǎn)同步待遷移的存儲(chǔ)聚集副本的數(shù)據(jù),并在自身重建待遷移存儲(chǔ)聚集副本;(3)我們將與失效存儲(chǔ)節(jié)點(diǎn)具有相同存儲(chǔ)聚集副本的存儲(chǔ)節(jié)點(diǎn)作為源存儲(chǔ)節(jié)點(diǎn),則目的存儲(chǔ)節(jié)點(diǎn)根據(jù)待遷移存儲(chǔ)聚集副本的數(shù)據(jù)向源存儲(chǔ)節(jié)點(diǎn)獲取資源,并將獲取的資源保存到重建的待遷移存儲(chǔ)聚集副本中;(4)管理節(jié)點(diǎn)對規(guī)則進(jìn)行存儲(chǔ)聚集變換操作,并通知規(guī)則節(jié)點(diǎn)更新規(guī)則,之后,將目的存儲(chǔ)節(jié)點(diǎn)對應(yīng)的存儲(chǔ)聚集副本設(shè)置為啟動(dòng)狀態(tài),并將客戶端對失效存儲(chǔ)節(jié)點(diǎn)的訪問重新定向到目的存儲(chǔ)節(jié)點(diǎn);與其保持心跳連接的其他存儲(chǔ)聚集副本會(huì)周期性重連另ー個(gè)存儲(chǔ)聚集副本,在這個(gè)周期性的重連過程中同時(shí)會(huì)周期性的獲取規(guī)則,由于規(guī)則已經(jīng)改變,便可以連接上目的存儲(chǔ)節(jié)點(diǎn),該新連的存儲(chǔ)聚集副本會(huì)進(jìn)入恢復(fù)狀態(tài),將剩余沒有完全同步的資源同步過來,在同步完成后,對應(yīng)的存儲(chǔ)聚集進(jìn)入工作狀態(tài),開始對外服務(wù);第二種情況,當(dāng)存儲(chǔ)節(jié)點(diǎn)失效后的重啟時(shí)間低于上限值,該容錯(cuò)流程包括以下步驟(I)失效存儲(chǔ)節(jié)點(diǎn)重新啟動(dòng)后向規(guī)則節(jié)點(diǎn)獲取最新的規(guī)則;(2)若在失效存儲(chǔ)節(jié)點(diǎn)失效期間系統(tǒng)進(jìn)行了存儲(chǔ)聚 集擴(kuò)展運(yùn)算,失效儲(chǔ)節(jié)點(diǎn)則根據(jù)擴(kuò)展后的規(guī)則對已有的存儲(chǔ)聚集副本進(jìn)行分裂,之后將已有的存儲(chǔ)聚集副本和規(guī)則進(jìn)行對比,對比之后刪除已經(jīng)不屬于該失效存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)聚集副本;(3)失效存儲(chǔ)節(jié)點(diǎn)將其上的存儲(chǔ)聚集副本狀態(tài)設(shè)定為啟動(dòng)狀態(tài),并將失效期間的數(shù)據(jù)同步過來。所述分布式存儲(chǔ)系統(tǒng)中資源上傳流程包括以下步驟(I)客戶端根據(jù)⑶ID生產(chǎn)算法,生成待上傳資源的⑶ID ;(2)客戶端檢查自身是否緩存有規(guī)則,如沒有則更新規(guī)則,如有則根據(jù)緩存的規(guī)則計(jì)算出對應(yīng)GUID應(yīng)該被存儲(chǔ)的存儲(chǔ)節(jié)點(diǎn)地址,井隨機(jī)向其中ー個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)起連接,且將該存儲(chǔ)節(jié)點(diǎn)作為該次上傳的發(fā)起節(jié)點(diǎn);如連接錯(cuò)誤,則更換其他存儲(chǔ)節(jié)點(diǎn)重試,如多次均重試失敗,則更新規(guī)則,也可以通過更換⑶ID重新開始上傳流程;(3)發(fā)起節(jié)點(diǎn)連接到待存儲(chǔ)資源的⑶ID,在確定客戶端定位正確且對應(yīng)的存儲(chǔ)聚集為工作狀態(tài)后,向與其保持心跳連接的存儲(chǔ)聚集副本發(fā)送待上傳資源的GUID ;發(fā)起節(jié)點(diǎn)首先將客戶端上傳的GUID與自身保存的模數(shù)進(jìn)行取模運(yùn)算,得到相應(yīng)的存儲(chǔ)聚集號(hào),驗(yàn)證自身是否確實(shí)擁有該存儲(chǔ)聚集,如得到的存儲(chǔ)聚集號(hào)并不是自身所擁有的,向客戶端回復(fù)定位失敗,如對應(yīng)的存儲(chǔ)聚集并不是工作狀態(tài),則向客戶端拒絕服務(wù);(4)客戶端開始上傳,發(fā)起節(jié)點(diǎn)發(fā)送對應(yīng)的數(shù)據(jù)到存儲(chǔ)與其保持心跳連接的存儲(chǔ)聚集副本的存儲(chǔ)節(jié)點(diǎn),完成上傳;在該過程中,若發(fā)起節(jié)點(diǎn)失效,則客戶端連接其他對應(yīng)的存儲(chǔ)聚集副本所在的存儲(chǔ)節(jié)點(diǎn)進(jìn)行重新上傳。在上傳完成之后,所有的存儲(chǔ)聚集均將自身維護(hù)的序列號(hào)作為當(dāng)前資源的序列號(hào)進(jìn)行保存,以用于系統(tǒng)容錯(cuò)流程。所述分布式存儲(chǔ)系統(tǒng)中資源刪除流程包括以下步驟(I)客戶端獲得待刪除資源的⑶ID ;(2)客戶端檢查自身是否緩存有規(guī)則,如沒有則更新規(guī)則,如有則根據(jù)緩存的規(guī)則計(jì)算出對應(yīng)GUID應(yīng)該被存儲(chǔ)的存儲(chǔ)節(jié)點(diǎn)地址,井隨機(jī)向其中ー個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)起連接,且將該存儲(chǔ)節(jié)點(diǎn)作為該次刪除的發(fā)起節(jié)點(diǎn);若連接錯(cuò)誤,則更換其他存儲(chǔ)節(jié)點(diǎn)重試,若多次重試失敗,則更新規(guī)則;在該過程中,發(fā)起節(jié)點(diǎn)首先將客戶端上傳的GUID與自身保存的模數(shù)進(jìn)行取模運(yùn)算,得到相應(yīng)的存儲(chǔ)聚集號(hào),驗(yàn)證自身是否確實(shí)擁有該存儲(chǔ)聚集,如得到的存儲(chǔ)聚集號(hào)并不是自身所擁有的,其向客戶端回復(fù)定位失敗錯(cuò)誤,如對應(yīng)的存儲(chǔ)聚集并不是工作狀態(tài),則向客戶端拒絕服務(wù);(3)發(fā)起節(jié)點(diǎn)連接到待刪除資源的⑶ID,在確定客戶端定位正確且對應(yīng)的存儲(chǔ)聚集為工作狀態(tài)后,向與其保持心跳連接的存儲(chǔ)聚集副本發(fā)送待刪除資源的GUID,并為待刪除資源打上刪除標(biāo)簽;(4)在所有保持心跳連接的存儲(chǔ)聚集副本同時(shí)在線時(shí),將打有刪除標(biāo)簽的資源進(jìn)行刪除。具體地說,所述規(guī)則節(jié)點(diǎn)集群上的規(guī)則更新具體包括以下步驟(I)管理節(jié)點(diǎn)對規(guī)則進(jìn)行一次操作,其將規(guī)則版本遞增一,并將對應(yīng)的改動(dòng)寫入版本信息列表;
在該分布式存儲(chǔ)系統(tǒng)中,我們采用基于版本的規(guī)則更新,規(guī)則在規(guī)則節(jié)點(diǎn)和客戶端的更新均采用版本機(jī)制,當(dāng)管理節(jié)點(diǎn)對規(guī)則進(jìn)行一次相應(yīng)的存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換運(yùn)算之后,其將對應(yīng)的規(guī)則的變化發(fā)送給規(guī)則節(jié)點(diǎn),規(guī)則節(jié)點(diǎn)根據(jù)該對應(yīng)的變化將自身的規(guī)則更新;客戶端在定位發(fā)生錯(cuò)誤需要更新規(guī)則時(shí),則將自己緩存的規(guī)則的當(dāng)前版本號(hào)發(fā)送給規(guī)則節(jié)點(diǎn),規(guī)則節(jié)點(diǎn)只將客戶提供的規(guī)則版本號(hào)和自身具有的規(guī)則版本號(hào)之間的變化發(fā)送給客戶端;發(fā)送的變化的版本信息格式如下
權(quán)利要求
1.基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,包括以下步驟 (1)系統(tǒng)初始化; (2)客戶端檢查是否需要更新規(guī)則,如果需要更新,則將規(guī)則更新至與規(guī)則節(jié)點(diǎn)相同的規(guī)則; (3)客戶端通過⑶ID生成算法確定待上傳資源的⑶ID,并根據(jù)⑶ID結(jié)合規(guī)則計(jì)算出存儲(chǔ)節(jié)點(diǎn)位置,將待上傳資源存儲(chǔ)至存儲(chǔ)節(jié)點(diǎn)之中; (4)客戶端得到需要獲取資源的GUID,并根據(jù)規(guī)則計(jì)算出需要獲取資源的副本對應(yīng)的存儲(chǔ)節(jié)點(diǎn)地址,然后由與存儲(chǔ)節(jié)點(diǎn)地址對應(yīng)的存儲(chǔ)節(jié)點(diǎn)查找該需要獲取的資源,再向客戶端回復(fù)查找結(jié)果; (5)管理節(jié)點(diǎn)檢查存儲(chǔ)節(jié)點(diǎn)發(fā)來的心跳信息,當(dāng)檢查到存儲(chǔ)節(jié)點(diǎn)壓カ過大即過載時(shí),采用負(fù)載調(diào)整方法對該壓カ過大的過載存儲(chǔ)節(jié)點(diǎn)進(jìn)行負(fù)載調(diào)整;當(dāng)檢查到存儲(chǔ)節(jié)點(diǎn)失效時(shí),采用系統(tǒng)容錯(cuò)方法對該失效存儲(chǔ)節(jié)點(diǎn)進(jìn)行系統(tǒng)容錯(cuò)。
2.根據(jù)權(quán)利要求I所述的基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,其特征在干,所述每個(gè)存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)有至少ー個(gè)存儲(chǔ)聚集,每個(gè)存儲(chǔ)聚集至少有ー個(gè)存儲(chǔ)聚集副本,且當(dāng)存儲(chǔ)聚集的存儲(chǔ)聚集副本為兩個(gè)以上吋,這兩個(gè)以上存儲(chǔ)聚集副本分別存儲(chǔ)在不同的存儲(chǔ)節(jié)點(diǎn)上,且該兩個(gè)以上存儲(chǔ)聚集副本兩兩之間保持心跳連接。
3.根據(jù)權(quán)利要求2所述的基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,所述負(fù)載調(diào)整方法包括以下步驟 (a)設(shè)定過載存儲(chǔ)節(jié)點(diǎn)上的存儲(chǔ)聚集數(shù)量標(biāo)準(zhǔn)值,管理節(jié)點(diǎn)檢查過載存儲(chǔ)節(jié)點(diǎn)上的存儲(chǔ)聚集數(shù)量,若超過已設(shè)定的標(biāo)準(zhǔn)值則發(fā)布進(jìn)行存儲(chǔ)聚集變換的命令,若低于已設(shè)定的標(biāo)準(zhǔn)值則發(fā)布進(jìn)行存儲(chǔ)聚集擴(kuò)展的命令; (b)與管理節(jié)點(diǎn)保持心跳的存儲(chǔ)節(jié)點(diǎn)根據(jù)管理節(jié)點(diǎn)發(fā)布的命令進(jìn)行相應(yīng)的存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換; (C)存儲(chǔ)節(jié)點(diǎn)在完成相應(yīng)的存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換后,向管理節(jié)點(diǎn)回復(fù)負(fù)載調(diào)整成功; Cd)管理節(jié)點(diǎn)收到回復(fù)后對規(guī)則進(jìn)行相應(yīng)的存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換運(yùn)算,并通知規(guī)則節(jié)點(diǎn)集群更新規(guī)則。
4.根據(jù)權(quán)利要求3所述的基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行存儲(chǔ)聚集擴(kuò)展包括以下步驟 (1)存儲(chǔ)節(jié)點(diǎn)在收到存儲(chǔ)聚集擴(kuò)展命令后將自身已保存的模數(shù)乘以ニ; (2)該存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)聚集副本在序列號(hào)保持不變的情況下根據(jù)新的模數(shù)一分為ニ,且將新的存儲(chǔ)聚集副本的狀態(tài)設(shè)置為啟動(dòng)狀態(tài),并在存儲(chǔ)聚集副本之間建立心跳,之后向管理節(jié)點(diǎn)回復(fù)存儲(chǔ)聚集擴(kuò)展成功; (3)管理節(jié)點(diǎn)收到回復(fù)之后,對規(guī)則執(zhí)行存儲(chǔ)聚集擴(kuò)展運(yùn)算,并通知規(guī)則節(jié)點(diǎn)集群更新規(guī)則。
5.根據(jù)權(quán)利要求3所述的基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,所述存儲(chǔ)節(jié)點(diǎn)進(jìn)行存儲(chǔ)聚集變換包括以下步驟 (I)管理節(jié)點(diǎn)在系統(tǒng)中選擇負(fù)載最輕的存儲(chǔ)節(jié)點(diǎn)作為存儲(chǔ)聚集變換的目的存儲(chǔ)節(jié)點(diǎn),并選擇過載存儲(chǔ)節(jié)點(diǎn)和目的存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)聚集副本集合的差集最小的一個(gè)存儲(chǔ)聚集副本作為待遷移存儲(chǔ)聚集副本; (2)目的存儲(chǔ)節(jié)點(diǎn)根據(jù)管理節(jié)點(diǎn)的通知同步過載存儲(chǔ)節(jié)點(diǎn)中待遷移存儲(chǔ)聚集副本的數(shù)據(jù),并在自身重建與管理節(jié)點(diǎn)保持心跳連接的待遷移存儲(chǔ)聚集副本; (3)目的存儲(chǔ)節(jié)點(diǎn)根據(jù)過載存儲(chǔ)節(jié)點(diǎn)中待遷移存儲(chǔ)聚集副本的數(shù)據(jù)向過載存儲(chǔ)節(jié)點(diǎn)獲取資源,并將獲取的資源保存到重建的待遷移存儲(chǔ)聚集副本中,完成后向管理節(jié)點(diǎn)回復(fù)存儲(chǔ)聚集變換成功; (4)管理節(jié)點(diǎn)收到回復(fù)之后,對規(guī)則執(zhí)行存儲(chǔ)聚集變換運(yùn)算,并通知規(guī)則節(jié)點(diǎn)集群更新規(guī)則,之后將客戶端對過載存儲(chǔ)節(jié)點(diǎn)的訪問重新定向到目的存儲(chǔ)節(jié)點(diǎn); (5)將重建的待遷移存儲(chǔ)聚集副本設(shè)定為啟動(dòng)狀態(tài),該重建的待遷移存儲(chǔ)聚集副本將剰余沒有完全同步的資源同步過來,在同步完成后,對應(yīng)的存儲(chǔ)聚集開始工作; (6)過載存儲(chǔ)節(jié)點(diǎn)中斷與其對應(yīng)的存儲(chǔ)聚集副本的心跳連接,并刪除該存儲(chǔ)聚集副本。
6.根據(jù)權(quán)利要求2所述的基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,所述系統(tǒng)容錯(cuò)方法中,若設(shè)定存儲(chǔ)節(jié)點(diǎn)失效后的重啟時(shí)間上限值,則該系統(tǒng)容錯(cuò)流程包括以下兩種情況 當(dāng)存儲(chǔ)節(jié)點(diǎn)失效后的重啟時(shí)間超過上限值,則容錯(cuò)流程中管理節(jié)點(diǎn)對失效存儲(chǔ)節(jié)點(diǎn)中的每ー個(gè)存儲(chǔ)聚集執(zhí)行以下操作 (O管理節(jié)點(diǎn)選擇系統(tǒng)內(nèi)負(fù)載最輕的存儲(chǔ)節(jié)點(diǎn)作為目的存儲(chǔ)節(jié)點(diǎn); (2)目的存儲(chǔ)節(jié)點(diǎn)根據(jù)管理節(jié)點(diǎn)的通知向與失效存儲(chǔ)節(jié)點(diǎn)具有相同存儲(chǔ)聚集副本的其中一個(gè)存儲(chǔ)節(jié)點(diǎn)同步待遷移的存儲(chǔ)聚集副本的數(shù)據(jù),并在自身重建待遷移存儲(chǔ)聚集副本; (3)我們將與失效存儲(chǔ)節(jié)點(diǎn)具有相同存儲(chǔ)聚集副本的存儲(chǔ)節(jié)點(diǎn)作為源存儲(chǔ)節(jié)點(diǎn),則目的存儲(chǔ)節(jié)點(diǎn)根據(jù)源存儲(chǔ)節(jié)點(diǎn)中待遷移存儲(chǔ)聚集副本的數(shù)據(jù)向源存儲(chǔ)節(jié)點(diǎn)獲取資源,并將獲取的資源保存到重建的待遷移存儲(chǔ)聚集副本中; (4)管理節(jié)點(diǎn)對規(guī)則進(jìn)行存儲(chǔ)聚集變換操作,并通知規(guī)則節(jié)點(diǎn)更新規(guī)則,之后,將目的存儲(chǔ)節(jié)點(diǎn)對應(yīng)的存儲(chǔ)聚集副本設(shè)置為啟動(dòng)狀態(tài),并將客戶端對失效存儲(chǔ)節(jié)點(diǎn)的訪問重新定向到目的存儲(chǔ)節(jié)點(diǎn); 當(dāng)存儲(chǔ)節(jié)點(diǎn)失效后的重啟時(shí)間低于上限值,該容錯(cuò)流程包括以下步驟 (O失效存儲(chǔ)節(jié)點(diǎn)重新啟動(dòng)后向規(guī)則節(jié)點(diǎn)獲取最新的規(guī)則; (2)若在失效存儲(chǔ)節(jié)點(diǎn)失效期間系統(tǒng)進(jìn)行了存儲(chǔ)聚集擴(kuò)展運(yùn)算,失效儲(chǔ)節(jié)點(diǎn)則根據(jù)擴(kuò)展后的規(guī)則對已有的存儲(chǔ)聚集副本進(jìn)行分裂,之后將已有的存儲(chǔ)聚集副本和規(guī)則進(jìn)行對比,對比之后刪除已經(jīng)不屬于該失效存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)聚集副本; (3)失效存儲(chǔ)節(jié)點(diǎn)將其上的存儲(chǔ)聚集副本狀態(tài)設(shè)定為啟動(dòng)狀態(tài),并將失效期間的數(shù)據(jù)同步過來。
7.根據(jù)權(quán)利要求2所述的基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,還包括資源上傳流程,該上傳流程包括以下步驟 (O客戶端根據(jù)⑶ID生產(chǎn)算法,生成待上傳資源的⑶ID ; (2)客戶端檢查自身是否緩存有規(guī)則,如沒有則更新規(guī)則,如有則根據(jù)緩存的規(guī)則計(jì)算出對應(yīng)GUID應(yīng)該被存儲(chǔ)的存儲(chǔ)節(jié)點(diǎn)地址,井隨機(jī)向其中ー個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)起連接,且將該存儲(chǔ)節(jié)點(diǎn)作為該次上傳的發(fā)起節(jié)點(diǎn);(3)發(fā)起節(jié)點(diǎn)連接到待存儲(chǔ)資源的GUID,在確定客戶端定位正確且對應(yīng)的存儲(chǔ)聚集為工作狀態(tài)后,向與其保持心跳連接的存儲(chǔ)聚集副本發(fā)送待上傳資源的⑶ID ; (4)客戶端開始上傳,發(fā)起節(jié)點(diǎn)發(fā)送對應(yīng)的數(shù)據(jù)到存儲(chǔ)與其保持心跳連接的存儲(chǔ)聚集副本的存儲(chǔ)節(jié)點(diǎn),完成上傳。
8.根據(jù)權(quán)利要求2所述的基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,還包括資源刪除流程,該刪除流程包括以下步驟 (1)客戶端獲得待刪除資源的GUID; (2)客戶端檢查自身是否緩存有規(guī)則,如沒有則更新規(guī)則,如有則根據(jù)緩存的規(guī)則計(jì)算出對應(yīng)GUID應(yīng)該被存儲(chǔ)的存儲(chǔ)節(jié)點(diǎn)地址,井隨機(jī)向其中ー個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)起連接,且將該存儲(chǔ)節(jié)點(diǎn)作為該次刪除的發(fā)起節(jié)點(diǎn); (3)發(fā)起節(jié)點(diǎn)連接到待刪除資源的GUID,在確定客戶端定位正確且對應(yīng)的存儲(chǔ)聚集為工作狀態(tài)后,向與其保持心跳連接的存儲(chǔ)聚集副本發(fā)送待刪除資源的GUID,并為待刪除資源打上刪除標(biāo)簽; (4)在所有保持心跳連接的存儲(chǔ)聚集副本同時(shí)在線時(shí),將打有刪除標(biāo)簽的資源進(jìn)行刪除。
9.根據(jù)權(quán)利要求4 8中任意一項(xiàng)所述的基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,所述規(guī)則節(jié)點(diǎn)集群上的規(guī)則更新具體包括以下步驟 (1)管理節(jié)點(diǎn)對規(guī)則進(jìn)行一次操作,其將規(guī)則版本遞增一,并將對應(yīng)的改動(dòng)寫入版本信息列表; (2)管理節(jié)點(diǎn)通知規(guī)則節(jié)點(diǎn)規(guī)則已更新,并讓規(guī)則節(jié)點(diǎn)更新規(guī)則; (3)規(guī)則節(jié)點(diǎn)將當(dāng)前規(guī)則的版本號(hào)發(fā)送到管理節(jié)點(diǎn),管理節(jié)點(diǎn)將該版本號(hào)與最新的版本號(hào)進(jìn)行對比,并將規(guī)則的變更序列發(fā)送給規(guī)則節(jié)點(diǎn); (4)規(guī)則節(jié)點(diǎn)收到管理節(jié)點(diǎn)發(fā)來的規(guī)則變更序列之后,按版本序列號(hào)從小到大的順序在自身緩存的規(guī)則上逐個(gè)執(zhí)行存儲(chǔ)聚集擴(kuò)展或存儲(chǔ)聚集變換操作,直至將當(dāng)前規(guī)則更新至最新。
全文摘要
本發(fā)明公開了一套基于負(fù)載調(diào)整和系統(tǒng)容錯(cuò)的分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法,解決了現(xiàn)有技術(shù)中存在的大規(guī)模分布式存儲(chǔ)系統(tǒng)中沒有可靠的負(fù)載調(diào)整方法和系統(tǒng)容錯(cuò)方法及資源上傳、資源刪除流程不夠簡潔的問題。該分布式存儲(chǔ)系統(tǒng)的實(shí)現(xiàn)方法主要包括使用分布式存儲(chǔ)系統(tǒng)中的管理節(jié)點(diǎn)檢查存儲(chǔ)節(jié)點(diǎn)發(fā)來的心跳信息,當(dāng)檢查到存儲(chǔ)節(jié)點(diǎn)壓力過大即過載時(shí),采用負(fù)載調(diào)整方法對該壓力過大的過載存儲(chǔ)節(jié)點(diǎn)進(jìn)行負(fù)載調(diào)整;當(dāng)檢查到存儲(chǔ)節(jié)點(diǎn)失效時(shí),采用系統(tǒng)容錯(cuò)方法對該失效存儲(chǔ)節(jié)點(diǎn)進(jìn)行系統(tǒng)容錯(cuò)。
文檔編號(hào)H04L29/08GK102694863SQ201210172660
公開日2012年9月26日 申請日期2012年5月30日 優(yōu)先權(quán)日2012年5月30日
發(fā)明者向小可, 李林, 梅玫, 段翰聰, 聶曉文, 詹文翰 申請人:電子科技大學(xué)