一種PG成員選擇方法、裝置、存儲池和分布式文件系統與流程
2023-05-11 18:25:36
本發明涉及數據存儲領域,特別涉及一種PG成員選擇方法、裝置、存儲池和分布式文件系統。
技術背景
隨著現代社會科技的發展,大數據已經成為未來發展的一種趨勢。計算機通過文件系統管理、存儲數據,而處於大數據時代中的人們可獲取的數據成指數倍的增長,單純通過增加硬碟個數來擴展計算機文件系統的存儲容量的方式,在容量大小、容量增長速度、數據備份、數據安全等方面的表現都差強人意,這就使得分布式文件系統的應用越來越廣泛。
分布式文件系統可以有效解決數據的存儲和管理難題,通過將固定於某個地點的某個文件系統,擴展到任意多個地點/多個文件系統,使眾多的節點組成一個文件系統網絡。每個節點可以分布在不同的地點,通過網絡進行節點間的通信和數據傳輸。人們在使用分布式文件系統時,無需關心數據是存儲在哪個節點上、或者是從哪個節點從獲取的,只需要像使用本地文件系統一樣管理和存儲文件系統中的數據。
現有技術中,對於分布式文件系統中easure類型的存儲池,存放數據的PG(放置組,數據遷移與改變的最小單位)的成員osd若發生故障,會產生不必要的數據遷移。如圖1和圖2所示的crush算法在osd out之前和osd out之後的osd選取過程。可以看出,兩次選擇的最終結果分別為{0,2,1}和{2,-1,1},儘管是osd1發生了故障,但也導致osd2的位置也發生了變化,也就是非故障osd的位置發生了改變,致使非故障的osd中的數據會從當前osd遷移至通過crush算法計算出的新的osd上,這種數據的遷移是不必要的,並且速度比較緩慢,會影響系統的效率。
技術實現要素:
本發明實施例所要解決的技術問題是,提供一種PG成員選擇方法、裝置、存儲池和分布式文件系統,以保證PG非故障成員的位置不會發生變化,減少數據遷移量,保證系統的高效穩定。
為解決上述技術問題,本發明提供了一種PG成員選擇方法,該方法包括:
計算出每個item的osd值後,遍歷臨時數組判斷是否與臨時數組中記錄的選中osd值相同;
若否,將所述osd值作為選中osd值記錄到所述臨時數組,並判斷所述osd值是否out;當所述osd值out時,所述item不選擇所述osd值;當所述osd值沒有out時,所述item選擇所述osd值;
若是,判斷是否達到預設遍歷次數;
當達到預設遍歷次數時,則所述item不選擇所述osd值;
當沒有達到預設遍歷次數時,則繼續計算出所述item新的osd值。
可選的,還包括:
當所述臨時數組中存在out的選中osd值時,新一輪選擇開始前刪除所述臨時數組中的out的選中osd值。
可選的,還包括:
當PG成員選擇完成後,清空所述臨時數組中的選中osd值。
此外,本發明提供了一種PG成員選擇裝置,該裝置包括:
遍歷模塊,用於計算出每個item的osd值後,遍歷臨時數組判斷是否與臨時數組中記錄的選中osd值相同;若否,向記錄模塊和第一判斷模塊發送選中信號;若是,向第二判斷模塊發送衝突信號;
記錄模塊,用於接收所述選中信號,將所述osd值作為選中osd值記錄到所述臨時數組;
第一判斷模塊,用於接收所述選中信號,判斷所述osd值是否out;若是,向選擇模塊發送不選擇信號;若否向選擇模塊發送選擇信號;
選擇模塊,用於接收所述選擇信號或所述不選擇信號,對所述item選擇所述osd值或不選擇所述osd值;
第二判斷模塊,用於接收所述衝突信號,判斷是否達到預設遍歷次數;若是,向選擇模塊發送不選擇信號;若否,向計算模塊發送計算信號。
計算模塊,用於接收所述計算信號,繼續計算出所述item新的osd值。
可選的,還包括:
刪除模塊,用於當所述臨時數組中存在out的選中osd值時,新一輪選擇開始前刪除所述臨時數組中的out的選中osd值。
可選的,還包括:
清空模塊,用於當PG成員選擇完成後,清空所述臨時數組中的選中osd值。
本發明還提供了一種存儲池,包括:如上述任一項所述的PG成員選擇裝置。
本發明還提供了一種分布式文件系統,包括:如上一項所述的存儲池。
本發明所提供的一種PG成員選擇方法,包括計算出每個item的osd值後,遍歷臨時數組判斷是否與臨時數組中記錄的選中osd值相同;若否,將所述osd值作為選中osd值記錄到所述臨時數組,並判斷所述osd值是否out;當所述osd值out時,所述item不選擇所述osd值;當所述osd值沒有out時,所述item選擇所述osd值;若是,判斷是否達到預設遍歷次數;當達到預設遍歷次數時,則所述item不選擇所述osd值;當沒有達到預設遍歷次數時,則繼續計算出所述item新的osd值;
可見,本發明通過加入臨時數組記錄選中osd值,每個item選擇前先遍歷臨時數組,使得第一輪選擇結束後就可以把所有item選擇的osd值確定,後面的輪次只針對不選擇osd值的item;這樣就保證了PG非故障成員osd中的數據不會發生變化,減少了數據遷移量,並且可以減少選擇的輪次,使得選擇的效率顯著提高。本發明還提供了的一種PG成員選擇裝置、存儲池和分布式文件系統,同樣具有上述有益效果。
附圖說明
為了更清楚地說明本申請實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為現有技術中crush算法在osd out之前的PG成員選擇流程圖;
圖2為現有技術中crush算法在osd out之後的PG成員選擇流程圖;
圖3為本發明實施例提供的一種PG成員選擇方法的流程圖;
圖4為本發明實施例提供的另一種PG成員選擇方法的流程圖;
圖5為本發明實施例提供的另一種PG成員選擇方法的osd out之前的整體示意圖;
圖6為本發明實施例提供的另一種PG成員選擇方法的osd out之後的整體示意圖;
圖7為本發明實施例提供的一種PG成員選擇裝置的結構圖。
具體實施方式
下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基於本申請中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本申請保護的範圍。
為了解決PG中osd的非故障osd數據遷移的問題,經研究發現,PG會處於穩定的degrade狀態和不穩定的degrade+remapped狀態,處於後一種狀態的PG,會使數據從當前osd遷移至通過crush算法計算出的新的osd上,也就是發生非故障osd中的數據遷移。
為了解決非故障osd中的數據遷移,需要從現象入手,調研PG的remapped狀態是如何產生的。通過不斷的調研與嘗試,發現osd故障狀態變為out之後,部分pg成員的狀態變為remapped,根本原因就在於多輪次選擇的時候,會不斷的發生衝突,從而重新開始新一輪的選擇。只要解決了衝突問題,選取的過程就會快很多,從而解決PG非故障成員osd中的數據遷移問題。
請參考圖3,圖3為本發明實施例提供的一種PG成員選擇方法的流程圖。該方法可以包括:
步驟101:計算出每個item的osd值後,遍歷臨時數組判斷是否與臨時數組中記錄的選中osd值相同;若否,進入步驟102;若是,進入步驟105。
其中,本實施例中的步驟,是針對PG成員選擇過程中的item選擇osd的過程,計算出的item的osd值就可以是此item進行選擇後的osd。例如,計算出item1的osd值為1,若此osd值可以供item1選擇,那麼item1就可以選擇osd1。
可以理解的是,計算出每個item的osd值後進行的遍歷,是指PG中所有的item按照預定順序或隨機,逐個item進行的遍歷。並不是所有item都計算出osd值後共同進行遍歷。
需要說明的是,臨時數組中記錄選中osd值可以是其他item已經選擇的osd值,因為每個item只可以選擇一個不相同的osd值,所以判斷osd值與選中osd值是否相同也可以說是查看是否已經有item選取了此osd值。
步驟102:將所述osd值作為選中osd值記錄到所述臨時數組,並判斷所述osd值是否out;若是,進入步驟103;若否,進入步驟104。
其中,判斷osd值是否out,可以通過傳入此osd值對應的weight參數,根據weight參數是否為0判斷osd值是否out。weight參數為0則證明此osd值out了。
可以理解的是,osd值out可以是此osd值代表的osd發生了故障,不能供item選擇。
步驟103:所述item不選擇所述osd值。
其中,item不選擇osd值可以將此item選擇-1表示,證明沒有osd供此item選擇,對於不選擇osd值的表示方式可以是-1,也可以是其他值,本實施例對此不受任何限制。
步驟104:所述item選擇所述osd值。
其中,item選擇osd值可以是此item選擇此osd值代表的osd。例如:若此item為item1,此osd值為1,則item1選擇了osd1。
步驟105:判斷是否達到預設遍歷次數;若是,進入步驟103;若否,進入步驟106。
可以理解的是,本步驟是針對第一輪選擇以上的輪次選擇中,對於選取的osd值out的item來說,每計算出一個osd值就需要遍歷臨時數組,若遍歷次數達到預定值,就可以證明排除了所有臨時數組中記錄的選中osd值,也就是說此item計算出的osd值都是被其他item選擇過的或out的。
其中,預設遍歷次數可以為設計人員預先設置可以保證排除所有臨時數組中記錄的選中osd值的次數,本實施例於次數的設置不做任何限制。
步驟106:繼續計算出所述item新的osd值。
其中,計算出item新的osd值可以是繼續計算此item的osd值,然後再進行遍歷臨時數組的步驟。
需要說明的是,計算出的item新的osd值,可以與上次計算出的osd值相同,也可以不同。這是根據原先設置的計算方式導致的。
可以理解的是,本實施例中的步驟,是針對PG成員選擇過程中的item選擇osd的過程,對於每一輪所有item的選取過程結束後,存在不選擇osd值的item且此item沒有遍歷臨時數組達到預設遍歷次數,需要進行新一輪選擇。新一輪選擇開始前可以刪除臨時數組中的out的選中osd值,因為對於存在上層結構的PG成員選擇來說,不刪除臨時數組中的out的選中osd值可能無法進行新一輪的選擇。若不存在上層結構,可以刪除臨時數組中的out的選中osd值,也可以不刪除。本實施例對此不受任何限制。
對於臨時數組中的數據可以在PG成員選擇完成後,清空所述臨時數組中的選中osd值。當然,也可以在在PG成員選擇開始前對臨時數組中的數據進行清除或不清除,本實施例對此不受任何限制。
本實施例中,通過加入臨時數組記錄選中osd值,每個item選擇前先遍歷臨時數組,使得第一輪選擇結束後就可以把所有item選擇的osd值確定,後面的輪次只針對不選擇osd值的item;這樣就保證了PG非故障成員osd中的數據不會發生變化,同時因為將原本選擇過程中的衝突變為與臨時數組中的選擇osd值相同,可以避免選擇過程的衝突,從而可以減少選擇的輪次,使得選擇的效率顯著提高。
請參考圖4、圖5、圖6,圖4為本發明實施例提供的另一種PG成員選擇方法的流程圖,圖5為本發明實施例提供的另一種PG成員選擇方法的osd out之前的整體示意圖,圖6為本發明實施例提供的另一種PG成員選擇方法的osd out之後的整體示意圖。該方法可以包括:
步驟201:計算出item的osd值。
其中,osd值可以為0、1或2等代表osd0、osd1或osd2等osd的數值。
可以理解的是,只要可以計算出item的osd值,對於item的計算方式本實施例不做任何限制。
步驟202:遍歷臨時數組判斷是否與臨時數組中記錄的選中osd值相同;若否,進入步驟203;若是,進入步驟207。
其中,本步驟與步驟101相似,在此不再贅述。
可以理解的是,本步驟中的與選中osd值相同也就是圖5和圖6中的與臨時數組衝突。
步驟203:將所述osd值作為選中osd值記錄到所述臨時數組,並傳入所述osd值對應的weight參數。
其中,傳入osd值對應的weight參數是為了接下來通過weight參數判斷此osd值是否out。
步驟204:根據所述weight參數判斷所述osd值是否out;若是,進入步驟205;若否,進入步驟206。
可以理解的是,每個osd值均對應一個weight參數,weight參數可以相同也可以不同。若osd值對應的weighed參數為0時,此osd值代表的osd發生了故障,不能供item選擇。
步驟205:所述item不選擇所述osd值。
其中,若未經過步驟207便進行了本步驟,則證明存在out的osd值,且還需在所有item進行選擇過程後,在開啟新一輪選擇;若經過步驟207後進行了本步驟,則證明PG成員選擇已完成,不需要再進行下一輪選擇。
步驟206:所述item選擇所述osd值。
其中,本步驟選擇過後,可以判斷是否所有item都進行了選擇過程;若否,則計算下一item的osd值;若是,則查看是否存在不選擇osd值的item;若存在,則對不選擇osd值的item進行下一輪選擇過程;若不存在,則可以證明PG成員選擇已完成。
步驟207:判斷是否達到預設遍歷次數;若是,進入步驟205;若否,進入步驟201。
本步驟與步驟105相似,在此不再贅述。
可以理解的是,本實施例中的步驟,是針對PG成員選擇過程中的item選擇osd的過程,對於每一輪所有item的選取過程結束後,存在不選擇osd值的item且此item沒有遍歷臨時數組達到預設遍歷次數,需要進行新一輪選擇。新一輪選擇開始前刪除臨時數組中的out的選中osd值。
需要說明的是,本實施例中的步驟可以說是圖5和圖6中的Choose_item的選擇過程,item與Choose_item的意思相同。圖5和圖6是以Easure pool 2+1規則的集群為例,共有三個osd可供選擇,對應編號為1,2,3,一個PG需要選取3個osd,分別取名為choose_item0,choose_item1,choose_item2。
圖6中的第二輪選擇開始前,進行的臨時數組中item信息清除重新選擇,也就是本實施例中新一輪選擇開始前刪除臨時數組中的out的選中osd值的過程。
對於臨時數組中的數據可以在PG成員選擇完成後,清空所述臨時數組中的選中osd值。當然,也可以在在PG成員選擇開始前對臨時數組中的數據進行清除或不清除,本實施例對此不受任何限制。
本實施例中,加入臨時數組記錄選中osd值,每個item選擇前先遍歷臨時數組,使得第一輪選擇結束後就可以把所有item選擇的osd值確定,後面的輪次只針對不選擇osd值的item;這樣就保證了PG非故障成員osd中的數據不會發生變化,減少了數據遷移量,並且可以減少選擇的輪次,使得選擇的效率顯著提高。
請參考圖7,圖7為本發明實施例提供的一種PG成員選擇裝置的結構圖。該裝置可以包括:
遍歷模塊100,用於計算出每個item的osd值後,遍歷臨時數組判斷是否與臨時數組中記錄的選中osd值相同;若否,向記錄模塊和第一判斷模塊發送選中信號;若是,向第二判斷模塊發送衝突信號。
記錄模塊200,用於接收所述選中信號,將所述osd值作為選中osd值記錄到所述臨時數組。
第一判斷模塊300,用於接收所述選中信號,判斷所述osd值是否out;若是,向選擇模塊發送不選擇信號;若否向選擇模塊發送選擇信號。
選擇模塊400,用於接收所述選擇信號或所述不選擇信號,對所述item選擇所述osd值或不選擇所述osd值。
第二判斷模塊500,用於接收所述衝突信號,判斷是否達到預設遍歷次數;若是,向選擇模塊發送不選擇信號;若否,向計算模塊發送計算信號。
計算模塊600,用於接收所述計算信號,繼續計算出所述item新的osd值。
可選的,還包括:
刪除模塊,用於當所述臨時數組中存在out的選中osd值時,新一輪選擇開始前刪除所述臨時數組中的out的選中osd值。
可選的,還包括:
清空模塊,用於當PG成員選擇完成後,清空所述臨時數組中的選中osd值。
本實施例中,通過遍歷模塊100,使每個item選擇前先遍歷臨時數組,使得第一輪選擇結束後就可以把所有item選擇的osd值確定,後面的輪次只針對不選擇osd值的item;這樣就保證了PG非故障成員osd中的數據不會發生變化,並且可以減少選擇的輪次,使得選擇的效率顯著提高。
本發明實施例還提供一種存儲池,包括:如上一實施例所述的PG成員選擇裝置。
其中,存儲池具體可以為easure類型的存儲池。
本發明實施例還提供一種分布式文件系統,包括:如上一實施例所述的存儲池。
需要說明的是,本說明書中的實施例均採用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對於裝置、存儲池和分布式文件系統實施例而言,由於其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
以上對本申請所提供的PG成員選擇方法、裝置、存儲池和分布式文件系統進行了詳細介紹,本文中應用了具體實施例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用於幫助理解本申請的方法及其核心思想;同時,對於本領域的一般技術人員,依據本申請的思想,在具體實施方式及應用範圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本申請的限制。