本發(fā)明涉及存儲技術領域,特別涉及一種分布式存儲系統(tǒng)中重構熱點消除方法和裝置。
背景技術:
分布式存儲系統(tǒng)是將數(shù)據(jù)分散存儲在多臺服務器上,利用多機的并行處理能力,提高穩(wěn)定性和線性擴展能力的一種形式。它相對于以往的集中存儲系統(tǒng),更加注重并發(fā)處理、避免單點故障和性能瓶頸。
分布式存儲系統(tǒng)對外是單一的IO接口,對內(nèi)會包括分散的存儲節(jié)點、節(jié)點間的通訊線路和各節(jié)點協(xié)同工作的管控機制。數(shù)據(jù)的存儲格式雖然多樣,但是原則都是增加其冗余性,典型的如RAID。通過對各個節(jié)點上直連的存儲進行切片。外部數(shù)據(jù)在存儲時會分散到各個節(jié)點的各個存儲上,同時會依據(jù)數(shù)學公式計算出冗余性的校驗數(shù)據(jù)parity,parity也會分散在各個節(jié)點。這樣,針對寫請求,系統(tǒng)能夠充分利用多節(jié)點、多磁盤同時寫入的優(yōu)勢,縮短寫入所需要的時間。針對讀請求,可以并發(fā)讀取,并且如果部分原始數(shù)據(jù)無法訪問(物理介質損壞或者所在節(jié)點不可訪問),系統(tǒng)可以利用冗余數(shù)據(jù)來得到并修復原始數(shù)據(jù)。
當損壞的物理介質被更換或者掉線的節(jié)點重新上線之后,系統(tǒng)再將需要更新的數(shù)據(jù)重新寫到其物理介質上,保證存儲數(shù)據(jù)的正確性,也保證用戶數(shù)據(jù)和校驗數(shù)據(jù)的一致性。這個寫入的過程叫做重構。
實際經(jīng)常發(fā)生的情況是網(wǎng)絡故障或者維護行為造成的節(jié)點短暫離線。節(jié)點上線后該節(jié)點上就會集中大量的重構IO。過量的IO請求會造成底層磁盤的負載加大,拖慢其處理速度,延長請求的響應時間,也會造成系統(tǒng)自身資源,尤其是緩沖區(qū)的浪費。因為系統(tǒng)緩沖區(qū)是有限制的,被單個節(jié)點拖慢后,其他節(jié)點雖然空閑,但是沒法執(zhí)行進一步的處理。如此,原本的高并發(fā)就被串行化了,極大削弱了分布式系統(tǒng)的并發(fā)能力。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種分布式存儲系統(tǒng)中重構熱點消除方法和裝置,能夠對重構過程進行管控,保證分布式系統(tǒng)的并發(fā)處理能力。
為了達到上述目的,本發(fā)明提供了如下技術方案:
一種分布式存儲系統(tǒng)中重構熱點消除方法,分布式存儲系統(tǒng)中的一節(jié)點上線后觸發(fā)針對該節(jié)點中需要進行數(shù)據(jù)更新的所有存儲區(qū)域的重構過程,該方法用于執(zhí)行針對該節(jié)點中需要進行數(shù)據(jù)更新的任一存儲區(qū)域的重構過程,包括:
步驟A、下發(fā)指向該節(jié)點中該存儲區(qū)域的重構IO到該節(jié)點;
步驟B、檢測是否發(fā)生重構熱點事件,如果發(fā)生重構熱點事件,則執(zhí)行步驟C,否則,返回執(zhí)行步驟A;
步驟C、按照預設算法確定是否需要結束重構過程,如果需要結束重構過程,則執(zhí)行步驟D,否則,返回執(zhí)行步驟A。
步驟D、結束針對該節(jié)點中該存儲區(qū)域的重構過程。
一種分布式存儲系統(tǒng)中重構熱點消除裝置,分布式存儲系統(tǒng)中的一節(jié)點上線后觸發(fā)針對該節(jié)點中需要進行數(shù)據(jù)更新的所有存儲區(qū)域的重構過程,該裝置用于執(zhí)行針對該節(jié)點中需要進行數(shù)據(jù)更新的任一存儲區(qū)域的重構過程,包括:下發(fā)單元、檢測單元、處理單元;
所述下發(fā)單元,用于下發(fā)指向該節(jié)點中該存儲區(qū)域的重構IO到該節(jié)點;
所述檢測單元,用于下發(fā)單元下發(fā)指向該節(jié)點中該存儲區(qū)域的重構IO到該節(jié)點后,檢測是否發(fā)生重構熱點事件;
所述處理單元,用于如果檢測單元檢測確定未發(fā)生重構熱點事件,則指示下發(fā)單元繼續(xù)下發(fā)指向該節(jié)點中該存儲區(qū)域的重構IO到該節(jié)點;如果檢測單元檢測確定發(fā)生重構熱點事件,則按照預設算法確定是否需要結束重構過程,若需要結束重構過程,則結束針對該節(jié)點中該存儲區(qū)域的重構過程,若不需要結束重構過程,則指示下發(fā)單元繼續(xù)下發(fā)指向該節(jié)點中該存儲區(qū)域的重構IO到該節(jié)點。
由上面的技術方案可知,本發(fā)明中,在執(zhí)行重構的過程中,每次下發(fā)指向該節(jié)點中該存儲區(qū)域的一個重構IO到該節(jié)點后,就檢測是否發(fā)生重構熱點事件,當發(fā)生重構熱點事件,按照預設算法確定是否需要結束重構過程,從而可以結束部分重構過程,同時保留另一部分重構過程繼續(xù)正常執(zhí)行,實現(xiàn)對重構過程進行管控,保證分布式系統(tǒng)的并發(fā)處理能力。
附圖說明
圖1是本發(fā)明實施例分布式存儲系統(tǒng)中重構熱點消除方法流程圖;
圖2是本發(fā)明實施例分布式存儲系統(tǒng)中重構熱點消除裝置的結構示意圖。
具體實施方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,下面結合附圖并據(jù)實施例,對本發(fā)明的技術方案進行詳細說明。
在分布式存儲系統(tǒng)中,當因損壞的物理介質被更換或節(jié)點掉線再上線的時段內(nèi),如果用戶寫入新的數(shù)據(jù),則會造成該節(jié)點中的部分存儲區(qū)域上所存的原始的用戶數(shù)據(jù)或者系統(tǒng)生成的冗余校驗數(shù)據(jù)需要更新。當節(jié)點重新上線后,為保證存儲數(shù)據(jù)的正確性,保證用戶數(shù)據(jù)和校驗數(shù)據(jù)的一致性,需要針對該節(jié)點中的需要進行數(shù)據(jù)更新的所有存儲區(qū)域啟動重構過程,其中,對于每個需要進行數(shù)據(jù)更新的存儲區(qū)域,均啟動一個對應的重構過程(也即重構進程)。
為了避免多個重構過程因爭奪資源而導致分布式系統(tǒng)的并發(fā)能力的削弱,本發(fā)明中,在每個重構過程中引入重構熱點事件的概念,當重構速度過慢,和,磁盤響應時間(wait)值過大時,確定發(fā)生重構熱點事件。
一般情況下,在一個重構過程中檢測到重構熱點事件時,其它重構過程檢測到重構熱點事件的概率也很大,如果此時都結束重構過程,并都在此后選擇其他時間進行重構的話,則還會造成擁塞。因此,本發(fā)明中,在檢測確定發(fā)生重構熱點事件時,按照預設算法確定是繼續(xù)執(zhí)行重構過程或暫時結束重構過程,從而可以避免同時結束過多重構過程。
參見圖1,圖1是本發(fā)明實施例分布式存儲系統(tǒng)中重構熱點消除方法流程圖,其特征在于,分布式存儲系統(tǒng)中的一節(jié)點上線后觸發(fā)針對該節(jié)點中需要進行數(shù)據(jù)更新的所有存儲區(qū)域的重構過程,該方法用于執(zhí)行針對該節(jié)點中需要進行數(shù)據(jù)更新的任一存儲區(qū)域的重構過程,包括:
步驟101、下發(fā)指向該節(jié)點中該存儲區(qū)域的重構IO到該節(jié)點;
步驟102、檢測是否發(fā)生重構熱點事件,如果發(fā)生重構熱點事件,則執(zhí)行步驟103,否則,返回執(zhí)行步驟101;
步驟103、按照預設算法確定是否需要結束重構過程,如果需要結束重構過程,則執(zhí)行步驟104,否則,返回執(zhí)行步驟101。
步驟104、結束針對該節(jié)點中該存儲區(qū)域的重構過程。
結束針對該節(jié)點中該存儲區(qū)域的重構過程之后,還可以等待一段時間后,再次重啟重構過程,也即再次執(zhí)行上述下發(fā)重構步驟101-104,而且再次重啟的重構過程只針對尚未下發(fā)的指向該節(jié)點中該存儲區(qū)域的重構IO即可,因此,本實施例還包括以下步驟105:
步驟105、在預設時長后,基于尚未下發(fā)的指向該節(jié)點中該存儲區(qū)域的重構IO,重啟針對該節(jié)點中該存儲區(qū)域的重構過程。
在實際應用中,過量的IO請求會導致底層磁盤的負載加大,拖慢其處理速度,延長請求的響應時間,此時該存儲區(qū)域的重構速度必然會變慢,而該存儲區(qū)域所屬磁盤的響應時間(wait)值也會變大,因此,將該存儲區(qū)域的重構速度和/或該存儲區(qū)域所屬磁盤的wait值作為衡量是否出現(xiàn)重構熱點事件的衡量因素。
檢測是否發(fā)生重構熱點事件的方法至少有以下三種:
1)計算該節(jié)點中該存儲區(qū)域的重構速度,如果該存儲區(qū)域的重構速度低于預設重構速度,則確定發(fā)生重構熱點事件,否則,確定未發(fā)生重構熱點事件;
2)獲取該節(jié)點中該存儲區(qū)域所屬磁盤的wait值,如果該磁盤wait值大于預設響應時間閾值,則確定發(fā)生重構熱點事件,否則,確定未發(fā)生重構熱點事件;
3)計算該節(jié)點中該存儲區(qū)域的重構速度,并獲取該節(jié)點中該存儲區(qū)域所屬磁盤的響應時間wait值,如果該存儲區(qū)域的重構速度低于預設重構速度且該磁盤wait值大于預設響應時間閾值,則確定發(fā)生重構熱點事件,否則,確定未發(fā)生重構熱點事件。
其中,
上述存儲區(qū)域的重構速度,也即該存儲區(qū)域的寫入速度,可以使用最近一段時間內(nèi)下發(fā)到該存儲區(qū)域的重構IO的平均寫入速度衡量,也可以使用最近一次下發(fā)到該存儲區(qū)域的重構IO的寫入速度衡量。
上述磁盤的wait值,根據(jù)操作系統(tǒng)不同,獲取手段也不相同,但是均可以使用命令獲得,例如,在linux環(huán)境下可以通過iostat(1)命令獲得。wait值越大,表明IO等待磁盤處理的時間越長,表明磁盤越繁忙。
在本實施例中,按照檢測到重構熱點事件的次數(shù)越多,結束重構過程的幾率越大的原則設計判斷是否需要結束重構過程的算法。
在本發(fā)明的一個實施例中,當首次檢測到重構熱點事件時,需要將該節(jié)點中該存儲區(qū)域ID除以第一預設值(例如16)的余數(shù)設置為第一衡量值x,同時還獲取檢測到重構熱點事件的時間T,將T除以第一預設值的余數(shù)作為第二衡量值y。
將上述第一衡量值x和第二衡量值y用于判斷是否需要結束重構過程的算法中,其中第一衡量值x隨檢測到重構熱點事件的次數(shù)變化而變化。
具體地,按照預設算法確定是否需要結束重構過程包括:
如果不是首次檢測到重構熱點事件,則將x賦值為x與第二預設值(例如2)的商;
比較x與y的大小,如果x小于y,則確定需要結束重構過程,否則,確定不需要結束重構過程。
這里,第二預設值為大于1的自然數(shù)。
在實際實現(xiàn)中,當連續(xù)多次未檢測到重構熱點事件時,說明節(jié)點在此段時間內(nèi)的節(jié)點底層磁盤負載不大,此后如果再次檢測到重構熱點事件,可以將該次重構熱點事件視為首次發(fā)生重構熱點事件,從而降低此時結束重構過程的概率。
為此,本發(fā)明中以重構沖突次數(shù)標記檢測到重構熱點事件的次數(shù),以重構未沖突次數(shù)標記未檢測到重構熱點事件的次數(shù),在初始情況下,可以將重構沖突次數(shù)和重構未沖突次數(shù)初始化為0。
在執(zhí)行重構的過程中,在檢測確定發(fā)生重構熱點事件之后,可以將重構沖突次數(shù)增1,將重構未沖突次數(shù)清零。而在檢測確定未發(fā)生重構熱點事件之后,可以將重構未沖突次數(shù)增1,如果重構未沖突次數(shù)大于第三預設值(例如4),則將重構沖突次數(shù)清零。相應地,判斷是否為首次檢測到重構熱點事件的方法具體為:如果重構沖突次數(shù)為1,則確定是首次檢測到重構熱點事件,否則,確定不是首次檢測到重構熱點事件??梢钥闯?,當連續(xù)多次未檢測到重構熱點事件時,如果再次檢測到重構熱點事件時,重構沖突次數(shù)為0,之后執(zhí)行增1操作后變?yōu)?,因此視為首次檢測到重構熱點事件。
以上對本發(fā)明分布式存儲系統(tǒng)中重構熱點消除方法進行了詳細說明,本發(fā)明還提供了一種分布式存儲系統(tǒng)中重構熱點消除裝置,以下結合圖2進行詳細說明。
參見圖2,圖2是本發(fā)明實施例分布式存儲系統(tǒng)中重構熱點消除裝置的結構示意圖,其中,分布式存儲系統(tǒng)中的一節(jié)點上線后觸發(fā)針對該節(jié)點中需要進行數(shù)據(jù)更新的所有存儲區(qū)域的重構過程,該裝置用于執(zhí)行針對該節(jié)點中需要進行數(shù)據(jù)更新的任一存儲區(qū)域的重構過程,包括:下發(fā)單元201、檢測單元202、處理單元203;其中,
下發(fā)單元201,用于下發(fā)指向該節(jié)點中該存儲區(qū)域的重構IO到該節(jié)點;
檢測單元202,用于下發(fā)單元201下發(fā)指向該節(jié)點中該存儲區(qū)域的重構IO到該節(jié)點后,檢測是否發(fā)生重構熱點事件;
處理單元203,用于如果檢測單元202檢測確定未發(fā)生重構熱點事件,則指示下發(fā)單元201繼續(xù)下發(fā)指向該節(jié)點中該存儲區(qū)域的重構IO到該節(jié)點;如果檢測單元202檢測確定發(fā)生重構熱點事件,則按照預設算法確定是否需要結束重構過程,若需要結束重構過程,則結束針對該節(jié)點中該存儲區(qū)域的重構過程,若不需要結束重構過程,則指示下發(fā)單元201繼續(xù)下發(fā)指向該節(jié)點中該存儲區(qū)域的重構IO到該節(jié)點。
圖2所示裝置中,
所述處理單元203,結束針對該節(jié)點中該存儲區(qū)域的重構過程之后,進一步用于:在預設時長后,基于尚未下發(fā)的指向該節(jié)點中該存儲區(qū)域的重構IO,重啟針對該節(jié)點中該存儲區(qū)域的重構過程。
圖2所示裝置中,
所述檢測單元202,檢測是否發(fā)生重構熱點事件時,用于:計算該節(jié)點中該存儲區(qū)域的重構速度,如果該存儲區(qū)域的重構速度低于預設重構速度,則確定發(fā)生重構熱點事件,否則,確定未發(fā)生重構熱點事件;
或者,
所述檢測單元202,檢測是否發(fā)生重構熱點事件時,用于:獲取該節(jié)點中該存儲區(qū)域所屬磁盤的響應時間wait值,如果該磁盤wait值大于預設響應時間閾值,則確定發(fā)生重構熱點事件,否則,確定未發(fā)生重構熱點事件;
或者,
所述檢測單元202,檢測是否發(fā)生重構熱點事件時,用于:計算該節(jié)點中該存儲區(qū)域的重構速度,并獲取該節(jié)點中該存儲區(qū)域所屬磁盤的響應時間wait值,如果該存儲區(qū)域的重構速度低于預設重構速度且該磁盤wait值大于預設響應時間閾值,則確定發(fā)生重構熱點事件,否則,確定未發(fā)生重構熱點事件。
圖2所示裝置中,
所述處理單元203,在檢測單元202首次檢測到重構熱點事件時,進一步將該節(jié)點中該存儲區(qū)域ID除以第一預設值的余數(shù)設置為第一衡量值x,同時還獲取檢測到重構熱點事件的時間T,將T除以第一預設值的余數(shù)作為第二衡量值y;
所述處理單元203,按照預設算法確定是否需要結束重構過程包括:
如果不是首次檢測到重構熱點事件,則將x賦值為x與第二預設值的商;
比較x與y的大小,如果x小于y,則確定需要結束重構過程,否則,確定不需要結束重構過程。
圖2所示裝置中,
所述處理單元203,在檢測單元202檢測確定發(fā)生重構熱點事件之后,進一步用于:將重構沖突次數(shù)增1,將重構未沖突次數(shù)清零;
所述處理單元203,在檢測單元202檢測確定未發(fā)生重構熱點事件之后,進一步用于:將重構未沖突次數(shù)增1,如果重構未沖突次數(shù)大于第三預設值,則將重構沖突次數(shù)清零;
所述處理單元203,判斷是否為首次檢測到重構熱點事件時,用于:如果重構沖突次數(shù)為1,則確定是首次檢測到重構熱點事件,否則,確定不是首次檢測到重構熱點事件。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明保護的范圍之內(nèi)。