本技術(shù)涉及計(jì)算機(jī)存儲(chǔ),特別是涉及一種無(wú)歸屬鏡像卷數(shù)據(jù)同步方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì)。
背景技術(shù):
1、無(wú)歸屬鏡像卷是現(xiàn)代分布式存儲(chǔ)系統(tǒng)中一種靈活的數(shù)據(jù)管理方式,廣泛用于高可用性和數(shù)據(jù)冗余場(chǎng)景。在無(wú)歸屬鏡像卷中,卷數(shù)據(jù)被同時(shí)存儲(chǔ)在多個(gè)節(jié)點(diǎn)上,且這些節(jié)點(diǎn)沒(méi)有固定的歸屬節(jié)點(diǎn),即沒(méi)有唯一的節(jié)點(diǎn)控制該卷的所有讀寫(xiě)操作。這種設(shè)計(jì)允許多個(gè)節(jié)點(diǎn)同時(shí)或動(dòng)態(tài)接管該卷,避免單點(diǎn)故障。
2、在這種架構(gòu)下,當(dāng)系統(tǒng)發(fā)生故障時(shí),其他節(jié)點(diǎn)可以快速接管,并通過(guò)數(shù)據(jù)同步恢復(fù)一致性。然而在節(jié)點(diǎn)發(fā)生故障后,數(shù)據(jù)恢復(fù)期間如何確保各個(gè)節(jié)點(diǎn)的鏡像卷數(shù)據(jù)能夠保持一致是關(guān)鍵問(wèn)題。無(wú)歸屬的分布式系統(tǒng)需要一種高效的同步機(jī)制,以確保數(shù)據(jù)恢復(fù)的過(guò)程中不會(huì)產(chǎn)生數(shù)據(jù)不一致情況。同時(shí),無(wú)歸屬鏡像卷的數(shù)據(jù)同步需要高效的算法來(lái)減少數(shù)據(jù)傳輸?shù)拈_(kāi)銷,特別是在故障恢復(fù)后進(jìn)行差異同步時(shí),如何在不影響整體系統(tǒng)性能的前提下實(shí)現(xiàn)快速傳輸變更數(shù)據(jù)且保證數(shù)據(jù)的一致性,是目前急需解決的技術(shù)問(wèn)題。
技術(shù)實(shí)現(xiàn)思路
1、基于此,有必要針對(duì)上述技術(shù)問(wèn)題,提供一種能夠提高數(shù)據(jù)同步效率并保證數(shù)據(jù)一致性的數(shù)據(jù)同步方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì)。
2、一方面,提供一種無(wú)歸屬鏡像卷數(shù)據(jù)同步方法,所述方法包括:
3、響應(yīng)于有歸屬主節(jié)點(diǎn)對(duì)鏡像卷進(jìn)行數(shù)據(jù)讀寫(xiě)處理發(fā)生故障,獲取故障信息,其中,所述故障信息包括:未盡操作和無(wú)歸屬節(jié)點(diǎn)列表,所述無(wú)歸屬節(jié)點(diǎn)列表包括多個(gè)無(wú)歸屬節(jié)點(diǎn);
4、根據(jù)所述故障信息,整合所述未盡操作,得到全局未盡操作列表;
5、基于所述全局未盡操作記錄表,多個(gè)所述無(wú)歸屬節(jié)點(diǎn)接管所述未盡操作;
6、響應(yīng)于所述未盡操作均完成,對(duì)所述無(wú)歸屬節(jié)點(diǎn)進(jìn)行歸屬域重新劃分,得到新主節(jié)點(diǎn);通過(guò)所述新主節(jié)點(diǎn)完成所述無(wú)歸屬鏡像卷的數(shù)據(jù)同步和狀態(tài)更新。
7、在其中一個(gè)實(shí)施例中,對(duì)所述無(wú)歸屬節(jié)點(diǎn)進(jìn)行歸屬域重新劃分,得到新主節(jié)點(diǎn),包括:
8、將所述鏡像卷重新劃分成多個(gè)歸屬域;
9、對(duì)所述無(wú)歸屬節(jié)點(diǎn)進(jìn)行編號(hào),并按照所述編號(hào)順序依次分配到每個(gè)所述歸屬域內(nèi);根據(jù)重新劃分的所述歸屬域劃分日志資源,每個(gè)所述歸屬域?qū)?yīng)一份所述日志資源。在其中一個(gè)實(shí)施例中,還包括:
10、檢測(cè)所述有歸屬主節(jié)點(diǎn)心跳信號(hào)發(fā)送操作;
11、響應(yīng)于所述有歸屬主節(jié)點(diǎn)未發(fā)送心跳信號(hào),確定所述有歸屬主節(jié)點(diǎn)對(duì)所述鏡像卷進(jìn)行數(shù)據(jù)讀寫(xiě)處理發(fā)生故障;
12、收集所述未盡操作和所述無(wú)歸屬節(jié)點(diǎn)列表,將該信息廣播給所有節(jié)點(diǎn)并上報(bào)。
13、在其中一個(gè)實(shí)施例中,根據(jù)所述故障信息,整合所述未盡操作,得到全局未盡操作列表,包括:
14、通過(guò)多個(gè)所述無(wú)歸屬節(jié)點(diǎn)對(duì)日志進(jìn)行掃描,得到多個(gè)所述故障節(jié)點(diǎn)的未盡操作;
15、提取所述未盡操作,整合多個(gè)所述未盡操作記錄表并上報(bào);
16、整合所有所述未盡操作記錄表生成全局未盡操作記錄表;
17、消除所述全局未盡操作記錄表中的重復(fù)操作,并更新所述全局未盡操作記錄表。在其中一個(gè)實(shí)施例中,基于所述全局未盡操作記錄表,多個(gè)所述無(wú)歸屬節(jié)點(diǎn)接管所述未盡操作,包括:
18、所述無(wú)歸屬節(jié)點(diǎn)讀取全局未盡操作記錄表,其中,所述全局未盡述操作記錄表包括以下至少一項(xiàng):操作類型、邏輯塊地址塊范圍、操作狀態(tài)以及操作時(shí)間戳,所述操作類型包括:讀操作和寫(xiě)操作,所述操作狀態(tài)包括:部分完成和未完成;
19、所述無(wú)歸屬節(jié)點(diǎn)根據(jù)所述未盡操作類型和所述未盡操作狀態(tài)依次恢復(fù)每個(gè)未盡操作,并按照所述操作時(shí)間戳順序執(zhí)行,其中,所述未盡操作包括以下至少一項(xiàng):對(duì)主拷貝的讀操作、對(duì)主拷貝的寫(xiě)操作和在位圖中標(biāo)記數(shù)據(jù)差異;
20、響應(yīng)于恢復(fù)所述對(duì)所述主拷貝的寫(xiě)操作,所述無(wú)歸屬節(jié)點(diǎn)檢查該操作在日志中是否已經(jīng)記錄;
21、響應(yīng)于所述主拷貝的寫(xiě)操作部分已經(jīng)寫(xiě)入,該所述無(wú)歸屬節(jié)點(diǎn)從中斷部分繼續(xù)完成剩余寫(xiě)操作;
22、響應(yīng)于所述主拷貝寫(xiě)操作未開(kāi)始,該所述無(wú)歸屬節(jié)點(diǎn)根據(jù)所述未盡操作記錄表中的數(shù)據(jù)進(jìn)行新的寫(xiě)入操作;
23、響應(yīng)于所述主拷貝的寫(xiě)操作已經(jīng)完成,更新操作狀態(tài)為已完成,更新在位圖中標(biāo)記數(shù)據(jù)差異記錄到日志中并上報(bào);
24、響應(yīng)于恢復(fù)所述對(duì)主拷貝的讀操作,所述無(wú)歸屬節(jié)點(diǎn)根據(jù)所述未盡操作記錄表中的數(shù)據(jù),發(fā)起對(duì)所述邏輯塊地址范圍的讀請(qǐng)求,獲取所需的數(shù)據(jù);
25、響應(yīng)于所述所述有歸屬主節(jié)點(diǎn)讀取部分?jǐn)?shù)據(jù),該所述無(wú)歸屬節(jié)點(diǎn)從中斷部分繼續(xù)讀取,將完整的讀取數(shù)據(jù)記錄到日志中并上報(bào),更新當(dāng)前讀操作狀態(tài)為已完成。
26、在其中一個(gè)實(shí)施例中,包括:對(duì)所述無(wú)歸屬節(jié)點(diǎn)進(jìn)行歸屬域重新劃分,得到新主節(jié)點(diǎn),包括:
27、從無(wú)歸屬節(jié)點(diǎn)對(duì)應(yīng)歸屬域的日志資源中提取所述無(wú)歸屬節(jié)點(diǎn)上報(bào)的節(jié)點(diǎn)狀態(tài)信息;根據(jù)所述無(wú)歸屬節(jié)點(diǎn)上報(bào)的節(jié)點(diǎn)狀態(tài)信息,判斷每個(gè)所述無(wú)歸屬節(jié)點(diǎn)的狀態(tài)和負(fù)載能力;
28、所述無(wú)歸屬節(jié)點(diǎn)根據(jù)負(fù)載均衡算法排序,得到最優(yōu)無(wú)歸屬節(jié)點(diǎn)為新主節(jié)點(diǎn);
29、標(biāo)識(shí)每個(gè)無(wú)歸屬節(jié)點(diǎn)負(fù)責(zé)的數(shù)據(jù)范圍及其新角色;
30、通過(guò)所述日志記錄新的所述歸屬域分配以及所述新主節(jié)點(diǎn)信息。
31、在其中一個(gè)實(shí)施例中,包括:通過(guò)所述新主節(jié)點(diǎn)完成所述鏡像卷的數(shù)據(jù)同步和狀態(tài)更新,包括:
32、所述新主節(jié)點(diǎn)通過(guò)掃描所述位圖信息,得到主拷貝和副拷貝之間的數(shù)據(jù)標(biāo)記位置差異塊;
33、將識(shí)別出的所述數(shù)據(jù)標(biāo)記位置差異塊從所述主拷貝傳輸?shù)剿龈笨截?,并清除完成傳輸?shù)奈粓D信息;
34、更新傳輸后的位圖信息,并將所述鏡像卷的狀態(tài)更新為數(shù)據(jù)可用狀態(tài)。
35、另一方面提供了一種數(shù)據(jù)同步裝置,所述裝置包括:
36、故障信息獲取模塊,用于響應(yīng)于有歸屬主節(jié)點(diǎn)對(duì)鏡像卷進(jìn)行數(shù)據(jù)讀寫(xiě)處理發(fā)生故障,獲取故障信息,其中,所述故障信息包括:未盡操作和無(wú)歸屬節(jié)點(diǎn)列表,所述無(wú)歸屬節(jié)點(diǎn)列表包括多個(gè)無(wú)歸屬節(jié)點(diǎn)。
37、列表獲取模塊,用于根據(jù)所述故障信息,整合所述未盡操作,得到全局未盡操作列表。操作接管模塊,用于基于所述全局未盡操作記錄表,多個(gè)所述無(wú)歸屬節(jié)點(diǎn)接管所述未盡操作。
38、歸屬域劃分模塊,用于響應(yīng)于所述未盡操作均完成,對(duì)所述無(wú)歸屬節(jié)點(diǎn)進(jìn)行歸屬域重新劃分,得到新主節(jié)點(diǎn)。
39、數(shù)據(jù)同步模塊,用于通過(guò)所述新主節(jié)點(diǎn)完成所述無(wú)歸屬鏡像卷的數(shù)據(jù)同步和狀態(tài)更新。
40、再一方面,提供了一種計(jì)算機(jī)設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)以下步驟:
41、響應(yīng)于所述有歸屬主節(jié)點(diǎn)對(duì)鏡像卷進(jìn)行數(shù)據(jù)讀寫(xiě)處理發(fā)生故障,獲取故障信息;
42、根據(jù)所述故障信息,按節(jié)點(diǎn)歸屬域整合并劃分未盡操作,得到未盡操作記錄表;
43、基于所述未盡操作記錄表,通過(guò)剩余無(wú)歸屬節(jié)點(diǎn)接管所述未盡操作;
44、響應(yīng)于未盡操作均完成,根據(jù)所述剩余節(jié)點(diǎn)的歸屬域進(jìn)行重組,得到新主節(jié)點(diǎn);
45、通過(guò)所述新主節(jié)點(diǎn)完成所述鏡像卷的數(shù)據(jù)同步和狀態(tài)更新。
46、又一方面,提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)以下步驟:
47、響應(yīng)于所述有歸屬主節(jié)點(diǎn)對(duì)鏡像卷進(jìn)行數(shù)據(jù)讀寫(xiě)處理發(fā)生故障,獲取故障信息;
48、根據(jù)所述故障信息,按節(jié)點(diǎn)歸屬域整合并劃分未盡操作,得到未盡操作記錄表;
49、基于所述未盡操作記錄表,通過(guò)剩余無(wú)歸屬節(jié)點(diǎn)接管所述未盡操作;
50、響應(yīng)于未盡操作均完成,根據(jù)所述剩余節(jié)點(diǎn)的歸屬域進(jìn)行重組,得到新主節(jié)點(diǎn);
51、通過(guò)所述新主節(jié)點(diǎn)完成所述鏡像卷的數(shù)據(jù)同步和狀態(tài)更新。
52、上述數(shù)據(jù)恢復(fù)方法中,在所述有歸屬主節(jié)點(diǎn)發(fā)生故障時(shí),通過(guò)立即獲取故障信息并整合未盡操作,系統(tǒng)能夠快速識(shí)別當(dāng)前未完成的操作。通過(guò)構(gòu)建全局未盡操作記錄表,確保每個(gè)未盡操作都有明確的分配,使得無(wú)歸屬節(jié)點(diǎn)能夠迅速接管任務(wù),避免數(shù)據(jù)讀寫(xiě)的長(zhǎng)時(shí)間中斷,從而保障系統(tǒng)的高可用性。在故障處理的過(guò)程中,未盡操作會(huì)被準(zhǔn)確記錄并分配到適當(dāng)?shù)臒o(wú)歸屬節(jié)點(diǎn)進(jìn)行處理,確保原主節(jié)點(diǎn)的所有未完成數(shù)據(jù)操作不會(huì)丟失或被遺漏。通過(guò)有序接管,能夠保證操作的完整性和一致性,防止數(shù)據(jù)丟失或數(shù)據(jù)不一致的風(fēng)險(xiǎn)。通過(guò)對(duì)無(wú)歸屬節(jié)點(diǎn)的靈活接管操作,系統(tǒng)在發(fā)生故障時(shí)可以基于節(jié)點(diǎn)歸屬域劃分任務(wù),平衡不同節(jié)點(diǎn)的負(fù)載,從而提高整個(gè)系統(tǒng)的容錯(cuò)能力。在所有未盡操作完成后,系統(tǒng)對(duì)無(wú)歸屬節(jié)點(diǎn)的歸屬域重新劃分,,并選出新的主節(jié)點(diǎn)。確保后續(xù)的數(shù)據(jù)讀寫(xiě)操作在最佳性能狀態(tài)下運(yùn)行,從而優(yōu)化資源利用和系統(tǒng)效率。通過(guò)新主節(jié)點(diǎn)完成鏡像卷的數(shù)據(jù)同步和狀態(tài)更新,保證了系統(tǒng)在恢復(fù)后的狀態(tài)一致性。無(wú)論是數(shù)據(jù)的同步還是系統(tǒng)狀態(tài)的調(diào)整,均由新主節(jié)點(diǎn)協(xié)調(diào),從而確保鏡像卷的完整性和數(shù)據(jù)的一致性。同步過(guò)程經(jīng)過(guò)有效的組織和管理,能夠顯著減少數(shù)據(jù)同步時(shí)間,提升系統(tǒng)整體恢復(fù)速度。
53、通過(guò)這種系統(tǒng)化的故障處理方法,系統(tǒng)不僅能夠在主節(jié)點(diǎn)故障時(shí)快速恢復(fù)數(shù)據(jù)讀寫(xiě)操作,還能確保數(shù)據(jù)的一致性和完整性。這種設(shè)計(jì)能夠有效提升分布式存儲(chǔ)系統(tǒng)的容錯(cuò)能力和故障恢復(fù)效率,顯著減少故障對(duì)業(yè)務(wù)系統(tǒng)運(yùn)行的影響。