两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

機群文件系統(tǒng)分布式元數(shù)據(jù)一致性保證方法及系統(tǒng)的制作方法

文檔序號:6386382閱讀:193來源:國知局
專利名稱:機群文件系統(tǒng)分布式元數(shù)據(jù)一致性保證方法及系統(tǒng)的制作方法
技術領域
本發(fā)明涉及機群文件系統(tǒng)分布式元數(shù)據(jù)操作技術,尤其涉及機群文件系統(tǒng)中保證分布式元數(shù)據(jù)一致性的方法
背景技術
在大規(guī)模機群文件系統(tǒng)中,元數(shù)據(jù)與數(shù)據(jù)服務分離已經(jīng)成為了一種趨勢。一方面,數(shù)據(jù)訪問不必通過元數(shù)據(jù)服務器,而是采用帶外方式直接訪問存儲設備,從而獲取較高的數(shù)據(jù)訪問性能;另一方面,元數(shù)據(jù)服務器專門提供元數(shù)據(jù)服務,卸載了數(shù)據(jù)訪問負載,從而單臺元數(shù)據(jù)服務器可以支持更高的客戶端訪問性能,管理更多的存儲設備,支持更大的系統(tǒng)規(guī)模擴展。然而,隨著系統(tǒng)規(guī)模的不斷擴大,單臺元數(shù)據(jù)服務器逐漸成為制約系統(tǒng)擴展的瓶頸。為了進一步提升機群文件系統(tǒng)的擴展能力,通常采用多臺元數(shù)據(jù)服務器構成元數(shù)據(jù)服務器機群,以分散元數(shù)據(jù)負載,支持通過增加元數(shù)據(jù)服務器數(shù)量達到機群文件系統(tǒng)的橫向擴展。在元數(shù)據(jù)服務器機群系統(tǒng)中,機群文件系統(tǒng)的元數(shù)據(jù)被分散分布在不同的元數(shù)據(jù)服務器上,不可避免會出現(xiàn)涉及不同元數(shù)據(jù)服務器的分布式元數(shù)據(jù)操作,需要在不同的元數(shù)據(jù)服務器上進行元數(shù)據(jù)更新子操作。如果分布式元數(shù)據(jù)操作過程中一些元數(shù)據(jù)服務器異常宕機,則會造成分布式元數(shù)據(jù)操作在正常元數(shù)據(jù)服務器上元數(shù)據(jù)更新子操作執(zhí)行成功,而在異常宕機的元數(shù)據(jù)服務器上元數(shù)據(jù)更新子操作失敗的不一致狀態(tài)。因此,為了保證機群文件系統(tǒng)中元數(shù)據(jù)的一致性,需要保證在元數(shù)據(jù)服務器異常宕機的情況下,分布式元數(shù)據(jù)操作能夠原子提交,即分布式元數(shù)據(jù)操作能夠恢復到如下兩種狀態(tài)之一。要么(I)分布式元數(shù)據(jù)操作在所有涉及到的元數(shù)據(jù)服務器上的子操作都為執(zhí)行完畢狀態(tài);要么(2)分布式元數(shù)據(jù)操作在所有涉及到的元數(shù)據(jù)服務器上的子操作都為未執(zhí)行狀態(tài)。元數(shù)據(jù)服務器異常宕機后,內存中的信息丟失,只能根據(jù)磁盤中持久記錄的信息進行一致性恢復。目前采用較多的保證分布式元數(shù)據(jù)操作一致性的方法主要有兩階段提交方法(2PC,Two Phase Commit)以及基于兩階段提交方法的一些優(yōu)化方法,比如簡化的分布式元數(shù)據(jù)操作兩階段提交方法(S2PC_MP, Simple 2PC Metadata Processing)以及雙向冗余分布式日志優(yōu)化方法(即異步兩階段提交方法)等。在這些方法中,將所涉及的元數(shù)據(jù)服務器區(qū)分為協(xié)調者(Coordinator)和參與者(Participant)兩種角色。接收客戶端請求的元數(shù)據(jù)服務器作為協(xié)調者,參與操作的其他元數(shù)據(jù)服務器作為參與者。為方便介紹,協(xié)調者進行的元數(shù)據(jù)狀態(tài)更新操作稱為第一子操作,參與者進行的元數(shù)據(jù)狀態(tài)更新稱為第二子操作。以上所述的兩個子操作要么都執(zhí)行成功,要么都執(zhí)行不成功,這樣機群文件系統(tǒng)元數(shù)據(jù)才能處于一致的狀態(tài)。雙向冗余分布式日志方法的過程主要包括(I)協(xié)調者首先對第一個子操作的可執(zhí)行性進行預先檢查(Sub-oplPrecheck)。如果檢查通過,投贊成票(Vote Yes),協(xié)調者為所述分布式元數(shù)據(jù)操作預先分配編號C-LSN(Log Sequence Number);如果檢查不通過,直接結束。(2)協(xié)調者向參與者發(fā)送請求消息,請求參與者執(zhí)行第二個子操作(Sub-op2),請求消息中包含協(xié)調者的分布式元數(shù)據(jù)操作編號C_LSN。(3)參與者執(zhí)行第二個子操作(Sub-op2)。如果執(zhí)行不成功,則返回撤銷“Abort”消息,直接結束;如果執(zhí)行成功,參與者為所述分布式元數(shù)據(jù)操作分配編號P_LSN,并將上述編號P_LSN、執(zhí)行結果記錄以及提交“Commit”標志返回給協(xié)調者,不必等待將操作結果記錄寫入日志文件。之后,參與者異步將C_LSN、操作結果記錄、“Commit”標志寫入日志文件。(4)協(xié)調者收到參與者返回消息后,如果是撤銷“Abort”消息,直接結束,不必再執(zhí)行第一個子操作Sub-opl ;如果是提交“Commit”消息,則執(zhí)行第一個子操作Sub-opl,并返回給應用程序執(zhí)行的結果,不必等待將第一個子操作的結果記錄寫入日志文件。之后,協(xié)調者異步將P_LSN、操作結果記錄、“Commit”標志寫入日志文件。(5)協(xié)調者異步寫入日志文件(磁盤同步)完成后,向參與者發(fā)送確認消息ACK(C)。參與者收到確認消息ACK(C)后,表示協(xié)調者已經(jīng)將P_LSN、第一個子操作結果記錄、“Commit”持久寫入到日志文件中了,參與者可以清除日志文件中所述分布式元數(shù)據(jù)操作記錄。(6)參與者異步寫入日志文件(磁盤同步)完成后,向協(xié)調者發(fā)送確認消息ACK(P)。協(xié)調者收到確認消息ACK(P)消息后,表示參與者已經(jīng)將C_LSN、第二個子操作結果記錄、“Commit”持久寫入到日志文件中了,協(xié)調者可以清除日志文件中所述分布式元數(shù)據(jù)操作記錄。這種雙向冗余分布式日志方法在協(xié)調者和參與者兩端都進行了分布的冗余日志記錄,任何一端服務器宕機后,都可以根據(jù)另外一端服務器中記錄的冗余日志進行重做恢復,與2PC、S2PC_MP相比可有效降低分布式元數(shù)據(jù)操作一致性保證中磁盤同步等待開銷帶來的性能影響。但是該方法主要針對單個分布式元數(shù)據(jù)操作且僅涉及分布式日志。而實際上在元數(shù)據(jù)服務器機群中,大量的元數(shù)據(jù)操作仍然是本地元數(shù)據(jù)操作,也就是僅涉及到一個元數(shù)據(jù)服務器,不需要跨越多個元數(shù)據(jù)服務器。每個元數(shù)據(jù)服務器通常采用本地日志方式來保證本地元數(shù)據(jù)操作的一致性。當同時存在本地元數(shù)據(jù)操作以及多個分布式元數(shù)據(jù)操作時,對于同一元數(shù)據(jù)服務器而言,必須在保證分布式元數(shù)據(jù)子操作對該服務器元數(shù)據(jù)的更新(即對元數(shù)據(jù)磁盤內容的修改)與本地元數(shù)據(jù)操作的一致性,以及必須保證分布式元數(shù)據(jù)操作與本地元數(shù)據(jù)操作的高效結合,以使得分布式日志能夠重做恢復成功,即當分布式日志重做恢復時,其依賴的本地元數(shù)據(jù)操作已經(jīng)提交。然而在雙向冗余分布式日志方法中沒有考慮到上述問題。此夕卜,在雙向冗余分布式日志方法中,有可能因為兩端節(jié)點同時宕機,導致分布式元數(shù)據(jù)操作狀態(tài)撤銷恢復到完全沒有執(zhí)行的一致狀態(tài),然而,如果其他的元數(shù)據(jù)服務器存在后續(xù)分布式操作依賴于該撤銷的分布式元數(shù)據(jù)操作,則導致級聯(lián)撤銷,需要把后續(xù)的依賴操作都進行撤銷,級聯(lián)撤銷開銷較大,并且有可能存在不能完成撤銷的情況,因此需要保證多個分布式元數(shù)據(jù)操作之間不會出現(xiàn)級聯(lián)撤銷,以保證系統(tǒng)能夠恢復到一致狀態(tài)。

發(fā)明內容
因此,本發(fā)明的目的在于克服上述現(xiàn)有技術的缺陷,提出了一種結合本地日志的機群文件系統(tǒng)分布式元數(shù)據(jù)一致性保證的方法。
本發(fā)明的目的是通過以下技術方案實現(xiàn)的一方面,本發(fā)明提供了一種機群文件系統(tǒng)分布式元數(shù)據(jù)一致性保證的方法,包括步驟1,協(xié)調者和參與者將為分布式元數(shù)據(jù)子操作生成的分布式元數(shù)據(jù)子操作更新記錄作為一個本地事務記錄在本地日志中,所述分布式元數(shù)據(jù)子操作更新記錄包括分布式事務和/或分布式元數(shù)據(jù)更新,在本地事務提交之后,所述分布式事務被寫入到分布式日志中,所述分布式元數(shù)據(jù)更新被寫入到元數(shù)據(jù)磁盤;其中,所述分布式元數(shù)據(jù)更新包括分布式元數(shù)據(jù)子操作對文件系統(tǒng)元數(shù)據(jù)的更新,所述分布式事務包括關于分布式元數(shù)據(jù)子操作的狀態(tài)信息;步驟2,協(xié)調者和參與者根據(jù)所述分布式日志來對機群文件系統(tǒng)元數(shù)據(jù)操作的一致性進行恢復。上述方法中,所述步驟I還可包括在開始分布式元數(shù)據(jù)子操作之前對本地日志事務進行強制提交的步驟。上述方法中,所述步驟I可以包括步驟11)協(xié)調者預先檢查第一子操作能否在協(xié)調者端執(zhí)行,所述第一子操作為協(xié)調者端要完成的分布式元數(shù)據(jù)子操作;步驟12)如果協(xié)調者能夠執(zhí)行第一子操作,則為該第一子操作生成分布式事務,為該分布式事務分配分布式日志空間并將該分布式事務作為一個本地事務記錄在本地日志中,該分布式事務包括分布式事務號,分布式事務狀態(tài)、參與者地址、參與者操作類型、操作參數(shù);其中,將分布式事務狀態(tài)設為PREPARE ;步驟13)協(xié)調者向參與者發(fā)送請求消息,請求參與者執(zhí)行第二子操作,該請求消息中包含該協(xié)調者端的分布式事務號、分布式事務狀態(tài)以及參與者地址、參與者操作類型、操作參數(shù);所述第二子操作為參與者要完成的分布式元數(shù)據(jù)子操作;步驟14)參與者收到來自協(xié)調者的請求消息后,檢查能否執(zhí)行第二子操作;如果不能執(zhí)行第二子操作,則直接向協(xié)調者返回失敗原因;步驟15)如果檢查到參與者端能夠執(zhí)行第二子操作,則為該第二子操作生成分布式元數(shù)據(jù)更新和分布式事務,并將該分布式元數(shù)據(jù)更新和分布式事務作為一個本地事務記錄在本地日志中,該分布式事務包括分布式事務號,分布式事務狀態(tài)、協(xié)調者地址、協(xié)調者分布式事務號、協(xié)調者操作類型、操作參數(shù);并且參與者向協(xié)調者返回執(zhí)行成功響應,并將參與者端的分布式事務號捎帶返回給協(xié)調者;步驟16)當協(xié)調者收到來自參與者的執(zhí)行成功響應后,執(zhí)行第一子操作,為第一子操作生成分布式元數(shù)據(jù)更新,以及將所述響應中包含的參與者端的分布式事務信息作為第一子操作的分布式事務的一部分,并將其與該分布式元數(shù)據(jù)更新作為一個本地事務記錄在本地日志中。上述方法中,所述步驟11)中還可包括如果協(xié)調者預先檢查第一子操作能在協(xié)調者端執(zhí)行,則首先對協(xié)調者端本地日志中未提交的本地事務進行強制提交;以及在所述步驟14)中還可包括如果參與者檢查能執(zhí)行第二子操作,則首先參與者端對本地日志中未提交的本地事務進行強制提交。上述方法中,所述步驟15)和步驟16)中分別還可包括下列步驟
注冊本地事務的提交回調函數(shù),以備本地事務在持久提交到本地日志后,觸發(fā)分布式事務提交步驟;所述分布式事務提交步驟包括當分布式事務在本地日志中提交后,設置分布式事務狀態(tài)為COMMIT ;向另外一端發(fā)送分布式事務已經(jīng)持久提交的確認消息;另外一端收到該確認消息后,設置本地對應的分布式事務的狀態(tài)為RECEIVE。上述方法中,在所述步驟16)中,如果協(xié)調者端收到自參與者返回的執(zhí)行失敗的響應,協(xié)調者將分布式事務狀態(tài)設置為FINISH,表示該分布式事務已結束。上述方法中,還可包括分布式事務清除的步驟,其包括修改分布式日志信息,以釋放要清除的分布式事務在分布式日志中所占的空間,其中將對分布式日志信息的修改作為一個本地事務記錄到本地日志中,待本地事務持久提交后,對分布式日志信息的修改被同步到分布式日志中;所述要清除的分布式事務為狀態(tài)為COMMIT和RECEIVE的分布式事務和狀態(tài)為FINISH的分布式事務。上述方法中,所述步驟2可包括步驟21)當服務器異常宕機后,使用本地日志中記錄恢復本地的元數(shù)據(jù)磁盤和分布式日志;步驟22)從分布式日志文件中讀取需要恢復的分布式事務,并根據(jù)分布式事務所處的不同狀態(tài)針對每個分布式事務逐個進行恢復;步驟23)向其他元數(shù)據(jù)服務器發(fā)送協(xié)助恢復請求,以通知其他元數(shù)據(jù)服務器進行與該宕機服務器相關的分布式事務恢復。上述方法中,所述步驟22)中對每個分布式事務進行逐個恢復可包括步驟221)針對每個需要恢復的分布式事務,向分布式事務的另一端發(fā)送恢復重做請求,請求中包含該分布式事務編號、事務狀態(tài),如果分布式事務處于COMMIT狀態(tài),還包含另外一端的分布式事務編號、狀態(tài)、操作、參數(shù)、對象屬性;步驟222)另外一端接收到重做請求后,根據(jù)該恢復請求發(fā)起端的分布式事務狀態(tài)、以及在本端的本地分布式日志中查找到的對應的分布式事務狀態(tài),進行分布式事務恢復操作上述方法中,所述步驟222)可包括如果恢復請求的發(fā)起端分布式事務狀態(tài)為PREPARE,恢復請求的接收端分布式事務狀態(tài)為COMMIT,則接收端將本地分布式日志中記錄的發(fā)起端的分布式事務信息返回給接收端,接收端根據(jù)這些信息重新完成本端的分布式元數(shù)據(jù)子操作;如果恢復請求的發(fā)起端分布式事務狀態(tài)為PREPARE,恢復請求的接收端沒有找到對應的分布式事務,則接收端返回分布式事務已丟失的消息,發(fā)起端收到該消息后撤消該狀態(tài)為PREPARE的分布式事務;如果恢復請求的發(fā)起端分布式事務狀態(tài)為COMMIT,恢復請求的接收端分布式事務狀態(tài)為COMMIT,則這兩端都向另外一端發(fā)送分布式事務已經(jīng)持久提交的確認消息,并且在收到該確認消息后,設置本地對應的分布式事務的狀態(tài)為RECEIVE,并執(zhí)行分布式事務清除的步驟;如果恢復請求的發(fā)起端分布式事務狀態(tài)為COMMIT,恢復請求的接收端沒有找到對應的分布式事務,則接收端根據(jù)該恢復請求中的操作類型、操作參數(shù)、對象屬性,進行重做本端分布式元數(shù)據(jù)子操作;如果恢復請求的發(fā)起端分布式事務狀態(tài)為COMMIT,恢復請求的接收端分布式事務已經(jīng)提交并被清除,則接收端向發(fā)起端返回已經(jīng)持久提交的確認消息,發(fā)起端收到該消息后,將分布式事務狀態(tài)設為RECEIVE,并執(zhí)行分布式事務清除步驟。上述方法中,所述步驟23)還可包括其他元數(shù)據(jù)服務器收到宕機服務器發(fā)送的協(xié)助恢復請求后,查找涉及該宕機服務器的未完成的分布式事務,以逐項進行恢復;如果未完成的分布式事務狀態(tài)為PREPARE,并且處于正在允許狀態(tài),則向宕機服務器發(fā)送正常執(zhí)行分布式元數(shù)據(jù)子操作的請求;如果未完成的分布式事務狀態(tài)為COMMIT,則根據(jù)分布式事務中記錄的宕機服務器端的分布式事務編號、分布式事務狀態(tài)、操作類型、操作參數(shù),向宕機服務器發(fā)送重做恢復請求,宕機服務器收到該重做恢復請求后,重做分布式元數(shù)據(jù)子操作以進行恢復。上述方法中,宕機服務器重做分布式元數(shù)據(jù)子操作可包括為重做的分布式元數(shù)據(jù)子操作生成分布式元數(shù)據(jù)子操作更新記錄,并作為一個本地事務記錄在本地日志中,所述分布式元數(shù)據(jù)子操作更新記錄包括為該重做的分布式元數(shù)據(jù)子操作生成的分布式事務和分布式元數(shù)據(jù)更新。又一方面,本發(fā)明提供了一種機群文件系統(tǒng)中分布式元數(shù)據(jù)一致性保證系統(tǒng),包括協(xié)調者和參與者,其中所述協(xié)調者和參與者都被配置為將為分布式元數(shù)據(jù)子操作生成的分布式元數(shù)據(jù)子操作更新記錄作為一個本地事務記錄在本地日志中,所述分布式元數(shù)據(jù)子操作更新記錄包括分布式事務和/或分布式元數(shù)據(jù)更新,在本地事務提交之后,所述分布式事務被寫入到分布式日志中,所述分布式元數(shù)據(jù)更新被寫入到元數(shù)據(jù)磁盤;其中,所述分布式元數(shù)據(jù)更新包括分布式元數(shù)據(jù)子操作對文件系統(tǒng)元數(shù)據(jù)的更新,所述分布式事務包括關于分布式元數(shù)據(jù)子操作的狀態(tài)信息;所述協(xié)調者和參與者還被配置為根據(jù)分布式日志來對機群文件系統(tǒng)元數(shù)據(jù)操作的一致性進行恢復。上述系統(tǒng)中,所述協(xié)調者和參與者還被配置為在開始分布式元數(shù)據(jù)子操作之前對本地日志事務進行強制提交。上述系統(tǒng)中,所述協(xié)調者可被配置為預先檢查第一子操作能否在協(xié)調者端執(zhí)行,所述第一子操作為協(xié)調者端要完成的分布式元數(shù)據(jù)子操作;如果能夠執(zhí)行第一子操作,則為該第一子操作生成分布式事務,為該分布式事務分配分布式日志空間并將該分布式事務作為一個本地事務記錄在本地日志中,該分布式事務包括分布式事務號,分布式事務狀態(tài)、參與者地址、參與者操作類型、操作參數(shù);其中,將分布式事務狀態(tài)設為PREPARE ;向參與者發(fā)送請求消息,請求參與者執(zhí)行第二子操作,該請求消息中包含該協(xié)調者端的分布式事務號、分布式事務狀態(tài)以及參與者地址、參與者操作類型、操作參數(shù);所述第二子操作為參與者要完成的分布式元數(shù)據(jù)子操作;
當收到來自參與者的執(zhí)行成功響應后,執(zhí)行第一子操作,為第一子操作生成分布式元數(shù)據(jù)更新,以及將所述響應中包含的參與者端的分布式事務信息作為第一子操作的分布式事務的一部分,并將其與該分布式元數(shù)據(jù)更新作為一個本地事務記錄在本地日志中。上述系統(tǒng)中,所述參與者可被配置為當收到來自協(xié)調者的請求消息后,檢查能否執(zhí)行第二子操作;如果不能執(zhí)行第二子操作,則直接向協(xié)調者返回失敗原因;如果檢查到能夠執(zhí)行第二子操作,則為該第二子操作生成分布式元數(shù)據(jù)更新和分布式事務,并將該分布式元數(shù)據(jù)更新和分布式事務作為一個本地事務記錄在本地日志中,該分布式事務包括分布式事務號,分布式事務狀態(tài)、協(xié)調者地址、協(xié)調者分布式事務號、協(xié)調者操作類型、操作參數(shù);并且向協(xié)調者返回執(zhí)行成功響應,并將參與者端的分布式事務號捎帶返回給協(xié)調者。上述系統(tǒng)中,所述協(xié)調者還可被配置為如果協(xié)調者預先檢查第一子操作能在協(xié)調者端執(zhí)行,則首先對協(xié)調者端本地日志中未提交的本地事務進行強制提交。上述系統(tǒng)中,所述參與者還可被配置為如果參與者檢查能執(zhí)行第二子操作,則首先參與者端對本地日志中未提交的本地事務進行強制提交。與現(xiàn)有技術相比,本發(fā)明的優(yōu)點在于把分布式元數(shù)據(jù)子操作產(chǎn)生的分布式元數(shù)據(jù)子操作更新記錄分為兩個部分分布式事務和分布式元數(shù)據(jù)更新。分布式事務將被保存在分布式日志中,而分布式元數(shù)據(jù)更新將被同步到元數(shù)據(jù)磁盤。其中,將關于分布式元數(shù)據(jù)子操作的分布式事務信息和分布式元數(shù)據(jù)更新信息記錄在同一個本地事務中,以保證兩者更新的原子性。通過采用分布式日志與本地日志結合,有效復用了本地日志,降低了分布式日志的實現(xiàn)復雜度。此外,通過采用在分布式元數(shù)據(jù)操作之前強制提交本地日志,避免了當同時存在本地操作和分布式操作或者多個分布式操作時可能產(chǎn)生的級聯(lián)撤銷問題。


以下參照附圖對本發(fā)明實施例作進一步說明,其中圖1為根據(jù)本發(fā)明實施例的本地日志和分布式日志示意圖。
具體實施例方式為了使本發(fā)明的目的,技術方案及優(yōu)點更加清楚明白,以下結合附圖通過具體實施例對本發(fā)明進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。申請日為2012年5月22日,公布日為2012年10月24日、名稱為“一種機群文件系統(tǒng)分布式元數(shù)據(jù)一致性保證方法和系統(tǒng)”的專利申請201210159837. 8公布了一種機群文件系統(tǒng)分布式元數(shù)據(jù)一致性保證方法(即雙向冗余分布式日志方法),該申請通過引用被全部包含于此。圖1給出了根據(jù)本發(fā)明實施例的本地日志和分布式日志示意圖。本地文件系統(tǒng)通常采用本地寫前日志W(wǎng)AL (Write Ahead Log)技術保證本地元數(shù)據(jù)操作的一致性,如Ext3、XFS等本地文件系統(tǒng)。WAL技術首先將本地元數(shù)據(jù)更新記錄按照追加寫的方式提交到本地日志中,如果系統(tǒng)異常宕機,則可以根據(jù)本地日志中保存的元數(shù)據(jù)更新記錄重新完成元數(shù)據(jù)更新。本地元數(shù)據(jù)更新記錄是按照事務方式提交到本地日志中的,保證了元數(shù)據(jù)操作的原子性,因此稱為本地事務。本地日志一般具有固定大小,循環(huán)使用,本地日志在特定時間將已經(jīng)提交的本地事務同步到元數(shù)據(jù)磁盤,從而釋放本地日志的空間,以備其他本地事務提交。同時,本地日志還提供本地事務提交的回調函數(shù)接口,通過該回調函數(shù)接口可知本地事務已經(jīng)持久記錄在本地日志中了。例如,本地日志在將本地事務寫到磁盤后,會調用該接口,這樣外部就可以很快知道相應的本地事務已經(jīng)持久記錄。在本發(fā)明的實施例中,采用了本地日志和分布式日志結合的方法來對分布式元數(shù)據(jù)子操作更新記錄進行管理。分布式日志也具有固定大小,同樣可以循環(huán)使用。分布式元數(shù)據(jù)子操作更新記錄包括分布式事務和/或分布式元數(shù)據(jù)更新兩個部分。其中,所述分布式事務包括關于分布式元數(shù)據(jù)子操作的狀態(tài)信息,例如可以包括分布式元數(shù)據(jù)子操作編號(也可以稱為分布式事務號)、分布式元數(shù)據(jù)子操作執(zhí)行階段(也可以稱為分布式事務狀態(tài))、分布式元數(shù)據(jù)子操作的類型(也可以簡稱為操作類型)、操作參數(shù)等狀態(tài)信息,分布式事務將被保存在分布式日志中,用于在異常宕機情況下對分布式操作一致性進行恢復。所述分布式元數(shù)據(jù)更新包括分布式元數(shù)據(jù)子操作對文件系統(tǒng)元數(shù)據(jù)的更新,即對元數(shù)據(jù)磁盤內容進行修改,可以將分布式元數(shù)據(jù)更新按照與本地元數(shù)據(jù)操作一樣的方式被記錄在本地日志中。在該實施例中,為保證分布式元數(shù)據(jù)更新與分布式事務在本地的原子性,將分布式元數(shù)據(jù)更新與分布式事務統(tǒng)一作為一個本地事務以WAL方式統(tǒng)一預先記錄在本地日志中,由本地日志來保證二者的原子性。如圖1所示分布式事務和相應的分布式元數(shù)據(jù)更新被記錄在一個本地日志事務中,當該本地日志事務被持久提交之后,其中的分布式事務被持久地記錄在分布式日志文件中,而相應的分布式元數(shù)據(jù)更新被寫入到元數(shù)據(jù)磁盤。由于該分布式事務和相應的分布式元數(shù)據(jù)更新是在同一本地日志事務中,所以,分布式元數(shù)據(jù)更新與分布式事務在需要修改時將會被一塊兒修改或者如果寫磁盤的時候出錯本地日志將能保證分布式元數(shù)據(jù)更新與分布式事務都不會被寫,產(chǎn)生二者要么都做要么都不做的效果,不會出現(xiàn)不一致的狀態(tài)。也就是說以本地日志事務的方式來保證對分布式事務的修改以及相應的分布式元數(shù)據(jù)更新修改的原子性,以確保將對分布式事務的修改同步到分布式日志中(例如,將新的分布式事務寫入到分布式日志中,或者對分布式日志中現(xiàn)有的分布式事務進行修改),同時將相應的分布式元數(shù)據(jù)更新同步到元數(shù)據(jù)磁盤(例如,將新的元數(shù)據(jù)寫入到元數(shù)據(jù)磁盤中,或者對元數(shù)據(jù)磁盤中現(xiàn)有的元數(shù)據(jù)進行修改)。而且,通過以本地日志的方式來管理分布式事務和分布式元數(shù)據(jù)更新減少了同步等待開銷,也就是不需要同步等待元數(shù)據(jù)和/或分布式事務記錄寫到磁盤上。因為本地日志的實現(xiàn)本身就是異步的方式,無需等待磁盤寫。由于本地日志記錄的是磁盤塊的位置(比如磁盤中唯一標識的塊號)和修改后的數(shù)據(jù)塊的內容,然后以塊為單位對磁盤中相應的塊進行整體寫/替換,所以上述的本地事務只要記錄需要更新的元數(shù)據(jù)塊和需要更新的分布式日志的數(shù)據(jù)塊就可以了,也就是說本地日志對所有的塊都是一視同仁,它不區(qū)分是屬于哪個文件。因此,只需要在執(zhí)行具體操作時指定要寫入的文件即可。對于每個具體文件,在其元數(shù)據(jù)部分會記錄哪些數(shù)據(jù)塊是屬于這個文件的,所以在讀取這個文件時讀相應的數(shù)據(jù)塊就能讀到想要的數(shù)據(jù)??梢姡诒景l(fā)明的實施例中,無需修改本地日志的結構和操作,而是在本地日志的基礎上增加了分布式日志文件,并且將對分布式事務的更新也納入本地日志管理的范圍。對于分布式元數(shù)據(jù)操作,將其對分布式日志和分布式事務的任何狀態(tài)更新與相應的分布式元數(shù)據(jù)更新作為一個本地事務提交到本地日志中,之后才真正分別把分布式元數(shù)據(jù)更新寫入元數(shù)據(jù)磁盤,把分布式事務更新寫入到分布式日志中。更具體地,如圖1中所示的分布式日志組織方式,所述分布式日志包含如下內容:超級塊、最久偏移、當前偏移、分布式事務記錄。其中所述超級塊為分布式日志的第O塊,記錄分布式日志的總體狀態(tài)和信息,如表I所示,超級塊包含如下狀態(tài)信息:分布式日志異常下線標志(S_flag);分布式日志大小(s_max),以塊為單位;下一個可用的分布式事務號(s_sequence);最久尚未清除的分布式事務號(s_last_sequence),表示小于s_last_sequence的分布式事務都已經(jīng)提交并被清除了 ;最久尚未清除的分布式事務的最久偏移位置(s_last_offset);下一個可用的分布式事務的當前偏移位置(s_transaction_offset);其中,s_last_offset與s_transaction_offset之間的區(qū)域為存放分布式事務記錄,之外的區(qū)域為空閑可用。其中,在協(xié)調者端的分布式事務記錄例如可包括協(xié)調者端的分布式事務號、分布式事務狀態(tài)等狀態(tài)信息,還可以記錄參與者端的冗余操作信息,例如可包括參與者地址、參與者端的分布式事務號、參與者操作類型、操作參數(shù)、操作的對象屬性等等。同樣,在參與者端的分布式事務中除了包括參與者端的分布式事務號、分布式事務狀態(tài)等狀態(tài)信息之外,還可以記錄協(xié)調者端的冗余操作信息,例如可包括協(xié)調者地址、協(xié)調者端的分布式事務號、協(xié)調者操作類型、操作參數(shù)、操作的對象屬性等等。在異常宕機情況下可以利用在分布式日志中記錄的分布式事務對分布式操作一致性進行恢復。當然,如果在協(xié)調者和參與者兩端的分布式元數(shù)據(jù)操作過程中都沒有出現(xiàn)服務器異常宕機,則分布式事務被分布式日志直接清除即可。表I
權利要求
1.一種結合本地日志的機群文件系統(tǒng)分布式元數(shù)據(jù)操作一致性保證方法,所述方法包括: 步驟1,協(xié)調者和參與者將為分布式元數(shù)據(jù)子操作生成的分布式元數(shù)據(jù)子操作更新記錄作為一個本地事務記錄在本地日志中,所述分布式元數(shù)據(jù)子操作更新記錄包括分布式事務和/或分布式元數(shù)據(jù)更新,在本地事務提交之后,所述分布式事務被寫入到分布式日志中,所述分布式元數(shù)據(jù)更新被寫入到元數(shù)據(jù)磁盤; 其中,所述分布式元數(shù)據(jù)更新包括分布式元數(shù)據(jù)子操作對文件系統(tǒng)元數(shù)據(jù)的更新,所述分布式事務包括關于分布式元數(shù)據(jù)子操作的狀態(tài)信息; 步驟2,協(xié)調者和參與者根據(jù)所述分布式日志來對機群文件系統(tǒng)元數(shù)據(jù)操作的一致性進行恢復。
2.根據(jù)權利要求1所述的方法,其中,所述步驟I還包括在開始分布式元數(shù)據(jù)子操作之前對本地日志事務進行強制提交的步驟。
3.根據(jù)權利要求1所述的方法,其中,所述步驟I包括: 步驟11)協(xié)調者預先檢查第一子操作能否在協(xié)調者端執(zhí)行,所述第一子操作為協(xié)調者端要完成的分布式元數(shù)據(jù)子操作; 步驟12)如果協(xié)調者能夠執(zhí)行第一子操作,則為該第一子操作生成分布式事務,為該分布式事務分配分布式日志空間并將該分布式事務作為一個本地事務記錄在本地日志中,該分布式事務包括分布式事務號,分布式事務狀態(tài)、參與者地址、參與者操作類型、操作參數(shù);其中,將分布式事務狀態(tài)設為PREPARE ; 步驟13)協(xié)調者向參與者發(fā)送請求消息,請求參與者執(zhí)行第二子操作,該請求消息中包含該協(xié)調者端的分布式事務號、分布式事務狀態(tài)以及參與者地址、參與者操作類型、操作參數(shù);所述第二子操作為參與者要完成的分布式元數(shù)據(jù)子操作; 步驟14)參與者收到來自協(xié)調者的請求消息后,檢查能否執(zhí)行第二子操作;如果不能執(zhí)行第二子操作,則直接向協(xié)調者返回失敗原因; 步驟15)如果檢查到參與者端能夠執(zhí)行第二子操作,則為該第二子操作生成分布式元數(shù)據(jù)更新和分布式事務,并將該分布式元數(shù)據(jù)更新和分布式事務作為一個本地事務記錄在本地日志中,該分布式事務包括分布式事務號,分布式事務狀態(tài)、協(xié)調者地址、協(xié)調者分布式事務號、協(xié)調者操作類型、操作參數(shù);并且參與者向協(xié)調者返回執(zhí)行成功響應,并將參與者端的分布式事務號捎帶返回給協(xié)調者; 步驟16)當協(xié)調者收到來自參與者的執(zhí)行成功響應后,執(zhí)行第一子操作,為第一子操作生成分布式元數(shù)據(jù)更新,以及將所述響應中包含的參與者端的分布式事務信息作為第一子操作的分布式事務的一部分,并將其與該分布式元數(shù)據(jù)更新作為一個本地事務記錄在本地日志中。
4.根據(jù)權利要求3所述的方法,在所述步驟11)中還包括如果協(xié)調者預先檢查第一子操作能在協(xié)調者端執(zhí)行,則首先對協(xié)調者端本地日志中未提交的本地事務進行強制提交;以及在所述步驟14)中還包括如果參與者檢查能執(zhí)行第二子操作,則首先參與者端對本地日志中未提交的本地事務進行強制提交。
5.根據(jù)權利要求3所述的方法,所述步驟15)和步驟16)中分別還包括下列步驟: 注冊本地事務的提交回調函數(shù),以備本地事務在持久提交到本地日志后,觸發(fā)分布式事務提交步驟;所述分布式事務提交步驟包括: 當分布式事務在本地日志中提交后,設置分布式事務狀態(tài)為COMMIT ; 向另外一端發(fā)送分布式事務已經(jīng)持久提交的確認消息; 另外一端收到該確認消息后,設置本地對應的分布式事務的狀態(tài)為RECEIVE。
6.根據(jù)權利要求3或5所述的方法,在所述步驟16)中,如果協(xié)調者端收到自參與者返回的執(zhí)行失敗的響應,協(xié)調者將分布式事務狀態(tài)設置為FINISH,表示該分布式事務已結束。
7.根據(jù)權利要求6所述的方法,還包括分布式事務清除的步驟,其包括:修改分布式日志信息,以釋放要清除的分布式事務在分布式日志中所占的空間,其中將對分布式日志信息的修改作為一個本地事務記錄到本地日志中,待本地事務持久提交后,對分布式日志信息的修改被同步到分布式日志中; 所述要清除的分布式事務為狀態(tài)為COMMIT和RECEIVE的分布式事務和狀態(tài)為FINISH的分布式事務。
8.根據(jù)權利要求7所述的方法,所述步驟2包括: 步驟21)當服務器異常宕機后,使用本地日志中記錄恢復本地的元數(shù)據(jù)磁盤和分布式曰志; 步驟22)從分布式日志文件中讀取需要恢復的分布式事務,并根據(jù)分布式事務所處的不同狀態(tài)針對每個分布式事務逐個進行恢復; 步驟23)向其他元數(shù)據(jù)服務器發(fā)送協(xié)助恢復請求,以通知其他元數(shù)據(jù)服務器進行與該宕機服務器相關的分布 式事務恢復。
9.根據(jù)權利要求8所述的方法,所述步驟22)中對每個分布式事務進行逐個恢復包括: 步驟221)針對每個需要恢復的分布式事務,向分布式事務的另一端發(fā)送恢復重做請求,請求中包含該分布式事務編號、事務狀態(tài),如果分布式事務處于COMMIT狀態(tài),還包含另外一端的分布式事務編號、狀態(tài)、操作、參數(shù)、對象屬性; 步驟222)另外一端接收到重做請求后,根據(jù)該恢復請求發(fā)起端的分布式事務狀態(tài)、以及在本端的本地分布式日志中查找到的對應的分布式事務狀態(tài),進行分布式事務恢復操作。
10.根據(jù)權利要求9所述的方法,所述步驟222)包括: 如果恢復請求的發(fā)起端分布式事務狀態(tài)為PREPARE,恢復請求的接收端分布式事務狀態(tài)為COMMIT,則接收端將本地分布式日志中記錄的發(fā)起端的分布式事務信息返回給接收端,接收端根據(jù)這些信息重新完成本端的分布式元數(shù)據(jù)子操作; 如果恢復請求的發(fā)起端分布式事務狀態(tài)為PREPARE,恢復請求的接收端沒有找到對應的分布式事務,則接收端返回分布式事務已丟失的消息,發(fā)起端收到該消息后撤消該狀態(tài)為PREPARE的分布式事務; 如果恢復請求的發(fā)起端分布式事務狀態(tài)為COMMIT,恢復請求的接收端分布式事務狀態(tài)為COMMIT,則這兩端都向另外一端發(fā)送分布式事務已經(jīng)持久提交的確認消息,并且在收到該確認消息后,設置本地對應的分布式事務的狀態(tài)為RECEIVE,并執(zhí)行分布式事務清除的步驟; 如果恢復請求的發(fā)起端分布式事務狀態(tài)為COMMIT,恢復請求的接收端沒有找到對應的分布式事務,則接收端根據(jù)該恢復請求中的操作類型、操作參數(shù)、對象屬性,進行重做本端分布式兀數(shù)據(jù)子操作; 如果恢復請求的發(fā)起端分布式事務狀態(tài)為COMMIT,恢復請求的接收端分布式事務已經(jīng)提交并被清除,則接收端向發(fā)起端返回已經(jīng)持久提交的確認消息,發(fā)起端收到該消息后,將分布式事務狀態(tài)設為RECEIVE,并執(zhí)行分布式事務清除步驟。
11.根據(jù)權利要求8所述的方法,所述步驟23)還包括: 其他元數(shù)據(jù)服務器收到宕機服務器發(fā)送的協(xié)助恢復請求后,查找涉及該宕機服務器的未完成的分布式事務,以逐項進行恢復; 如果未完成的分布式事務狀態(tài)為PREPARE,并且處于正在允許狀態(tài),則向宕機服務器發(fā)送正常執(zhí)行分布式元數(shù)據(jù)子操作的請求; 如果未完成的分布式事務狀態(tài)為COMMIT,則根據(jù)分布式事務中記錄的宕機服務器端的分布式事務編號、分布式事務狀態(tài)、操作類型、操作參數(shù),向宕機服務器發(fā)送重做恢復請求,宕機服務器收到該重做恢復請求后,重做分布式元數(shù)據(jù)子操作以進行恢復。
12.根據(jù)權利要求11所述的方法,其中,宕機服務器重做分布式元數(shù)據(jù)子操作包括: 為重做的分布式元數(shù)據(jù)子操作生成分布式元數(shù)據(jù)子操作更新記錄,并作為一個本地事務記錄在本地日志中,所述分布式元數(shù)據(jù)子操作更新記錄包括為該重做的分布式元數(shù)據(jù)子操作生成的分布式事務和分布式元數(shù)據(jù)更新。
13.根據(jù)權利要求12所述的方法,其中,對在恢復過程中產(chǎn)生的分布式事務執(zhí)行分布式事務清除的步驟。
14.一種結合本地日志的機群文件系統(tǒng)分布式元數(shù)據(jù)操作一致性保證系統(tǒng),所述系統(tǒng)包括協(xié)調者和參與者,其中 所述協(xié)調者和參與者被配置為:將為分布式元數(shù)據(jù)子操作生成的分布式元數(shù)據(jù)子操作更新記錄作為一個本地事務記錄在本地日志中,所述分布式元數(shù)據(jù)子操作更新記錄包括分布式事務和/或分布式元數(shù)據(jù)更新,在本地事務提交之后,所述分布式事務被寫入到分布式日志中,所述分布式元數(shù)據(jù)更新被寫入到元數(shù)據(jù)磁盤; 其中,所述分布式元數(shù)據(jù)更新包括分布式元數(shù)據(jù)子操作對文件系統(tǒng)元數(shù)據(jù)的更新,所述分布式事務包括關于分布式元數(shù)據(jù)子操作的狀態(tài)信息; 所述協(xié)調者和參與者還被配置為根據(jù)分布式日志來對機群文件系統(tǒng)元數(shù)據(jù)操作的一致性進行恢復。
15.根據(jù)權利要求14所述的系統(tǒng),其中,所述協(xié)調者和參與者還被配置為:在開始分布式元數(shù)據(jù)子操作之前對本地日志事務進行強制提交。
16.根據(jù)權利要求14所述的系統(tǒng),其中,所述協(xié)調者被配置為: 預先檢查第一子操作能否在協(xié)調者端執(zhí)行,所述第一子操作為協(xié)調者端要完成的分布式元數(shù)據(jù)子操作; 如果能夠執(zhí)行第一子操作,則為該第一子操作生成分布式事務,為該分布式事務分配分布式日志空間并將該分布式事務作為一`個本地事務記錄在本地日志中,該分布式事務包括分布式事務號,分布式事務狀態(tài)、參與者地址、參與者操作類型、操作參數(shù);其中,將分布式事務狀態(tài)設為PREPARE ; 向參與者發(fā)送請求消息,請求參與者執(zhí)行第二子操作,該請求消息中包含該協(xié)調者端的分布式事務號、分布式事務狀態(tài)以及參與者地址、參與者操作類型、操作參數(shù);所述第二子操作為參與者要完成的分布式元數(shù)據(jù)子操作; 當收到來自參與者的執(zhí)行成功響應后,執(zhí)行第一子操作,為第一子操作生成分布式元數(shù)據(jù)更新,以及將所述響應中包含的參與者端的分布式事務信息作為第一子操作的分布式事務的一部分,并將其與該分布式元數(shù)據(jù)更新作為一個本地事務記錄在本地日志中。
17.根據(jù)權利要求16所述的系統(tǒng),其中,所述參與者被配置為: 當收到來自協(xié)調者的請求消息后,檢查能否執(zhí)行第二子操作;如果不能執(zhí)行第二子操作,則直接向協(xié)調者返回失敗原因; 如果檢查到能夠執(zhí)行第二子操作,則為該第二子操作生成分布式元數(shù)據(jù)更新和分布式事務,并將該分布式元數(shù)據(jù)更新和分布式事務作為一個本地事務記錄在本地日志中,該分布式事務包括分布式事務號,分布式事務狀態(tài)、協(xié)調者地址、協(xié)調者分布式事務號、協(xié)調者操作類型、操作參數(shù);并且向協(xié)調者返回執(zhí)行成功響應,并將參與者端的分布式事務號捎帶返回給協(xié)調者。
18.根據(jù)權利要求16所述的 系統(tǒng),所述協(xié)調者還被配置為: 如果協(xié)調者預先檢查第一子操作能在協(xié)調者端執(zhí)行,則首先對協(xié)調者端本地日志中未提交的本地事務進行強制提交。
19.根據(jù)權利要求17所述的系統(tǒng),所述參與者還被配置為: 如果參與者檢查能執(zhí)行第二子操作,則首先參與者端對本地日志中未提交的本地事務進行強制提交。
全文摘要
本發(fā)明提供一種結合本地日志的機群文件系統(tǒng)分布式元數(shù)據(jù)操作一致性保證方法。其中,協(xié)調者和參與者將為分布式元數(shù)據(jù)子操作生成的分布式元數(shù)據(jù)子操作更新記錄作為一個本地事務記錄在本地日志中,所述分布式元數(shù)據(jù)子操作更新記錄包括分布式事務和/或分布式元數(shù)據(jù)更新,在本地事務提交之后,所述分布式事務被寫入到分布式日志中,所述分布式元數(shù)據(jù)更新被寫入到元數(shù)據(jù)磁盤。該方法還包括在開始分布式元數(shù)據(jù)子操作之前對本地日志事務進行強制提交的步驟。該方法有效地復用了本地日志,降低了分布式日志的實現(xiàn)復雜度,此外,還能夠避免出現(xiàn)級聯(lián)撤銷。
文檔編號G06F17/30GK103077222SQ20121059106
公開日2013年5月1日 申請日期2012年12月31日 優(yōu)先權日2012年12月31日
發(fā)明者鄭彩平, 邵冰清, 張軍偉, 劉振軍, 王利虎, 張 浩 申請人:中國科學院計算技術研究所, 天津中科藍鯨信息技術有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宜阳县| 嵊州市| 海林市| 遵化市| 高雄县| 会东县| 望奎县| 海淀区| 大埔区| 宁海县| 柳江县| 南充市| 万山特区| 新化县| 铜陵市| 华亭县| 北流市| 中方县| 望谟县| 寻甸| 德保县| 大方县| 灵武市| 凤城市| 许昌县| 河北省| 砀山县| 招远市| 葫芦岛市| 甘肃省| 博爱县| 邛崃市| 北宁市| 通渭县| 邹城市| 红河县| 郑州市| 汨罗市| 宁城县| 茌平县| 宜君县|