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