分布式存儲元數據的修復方法、裝置及系統的制作方法
【技術領域】
[0001]本發明涉及數據存儲技術領域,尤其涉及分布式存儲元數據的修復方法、裝置及系統。
【背景技術】
[0002]現有的分布式存儲架構中,對元數據的可靠性要求非常高。元數據通常以鏡像形式保存在不同的節點進行備份,以保證數據的可靠性。在有節點故障的場景下,元數據的鏡像可靠性會降低,節點恢復正常后,其上寫失敗的元數據要及時的修復正確,以保證元數據的可靠性。
[0003]如何修復曾經故障節點上的元數據,常見的方式是降級寫時記錄要修復對象的日志,等待后臺服務器獲取修復日志后進行元數據的修復,進而來保證元數據的可靠性。
[0004]然而,在后臺服務器把故障節點上曾經降級寫的元數據修復正確之前,若再次鏡像寫這個故障節點上的元數據,由于該故障節點上的元數據和其它節點上的元數據不一致,因此將導致繼續降級寫,生成新的降級寫日志。當元數據的鏡像寫操作頻率比較高時,將生成大量的降級寫日志,從而增加了后臺服務器要恢復的元數據的任務量。如果降級寫的日志丟失或日志還沒有執行到,這時候再有其它節點發生故障,將可能導致分布式存儲元數據丟失,進而丟失用戶文件。
[0005]因此,如何在有節點故障的場景下及時修復故障節點上的元數據,使得后續的鏡像寫操作不會再產生降級寫日志,成為目前亟待解決的問題。
【發明內容】
[0006]本發明實施例提供分布式存儲元數據的修復方法、裝置及系統,能夠在有節點故障的場景下及時修復故障節點上的元數據,使得后續的鏡像寫操作不會再產生降級寫日
ν.、ι、ο
[0007]為達到上述目的,本發明實施例提供如下技術方案:
[0008]第一方面,提供一種分布式存儲元數據的修復方法,所述方法包括:
[0009]第一節點接收第二節點發送的第一消息,所述第一消息攜帶第一元數據,以及對所述第一元數據進行鏡像寫操作的操作請求;
[0010]若所述第一節點上的元數據不完整,所述第一節點獲取所述第一節點上缺失的元數據;
[0011]所述第一節點根據獲取到的缺失的元數據,對所述第一節點上的元數據進行修復;
[0012]在將所述第一節點上的元數據修復完整后,所述第一節點對所述第一元數據進行鏡像寫操作,并向所述第二節點發送第二消息,所述第二消息用于指示所述第一元數據鏡像寫操作成功。
[0013]在第一方面第一種可能的實現方式中,結合第一方面,所述第一節點獲取所述第一節點上缺失的元數據,包括:
[0014]所述第一節點向所述第二節點發送第三消息,所述第三消息用于請求所述第一節點上缺失的元數據;
[0015]所述第一節點接收所述第二節點發送的第四消息,所述第四消息攜帶所述第一節點上缺失的元數據,從所述第四消息中獲取所述第一節點上缺失的元數據。
[0016]在第一方面第二種可能的實現方式中,結合第一方面,所述第一節點獲取所述第一節點上缺失的元數據,包括:
[0017]所述第一節點向元數據服務器MDS發送第三消息,所述第三消息用于請求所述第一節點上缺失的元數據;
[0018]所述第一節點接收所述MDS發送的第四消息,所述第四消息攜帶所述第一節點上缺失的元數據,從所述第四消息中獲取所述第一節點上缺失的元數據。
[0019]第二方面,提供一種分布式存儲元數據的修復方法,所述方法包括:
[0020]第二節點向第一節點發送第一消息,所述第一消息攜帶第一元數據,以及對所述第一元數據進行鏡像寫操作的操作請求;
[0021]若所述第一節點上的元數據不完整,所述第二節點接收所述第一節點發送的第二消息,所述第二消息用于請求所述第一節點上缺失的元數據;
[0022]所述第二節點向所述第一節點發送第三消息,所述第三消息攜帶所述第一節點上缺失的元數據,由所述第一節點根據所述第一節點上缺失的元數據對所述第一節點上的元數據進行修復;
[0023]所述第二節點接收所述第一節點發送的第四消息,所述第四消息用于指示所述第一元數據鏡像寫操作成功。
[0024]在第二方面第一種可能的實現方式中,結合第二方面,在所述第二節點向第一節點發送第一消息之前,還包括:
[0025]所述第二節點接收元數據服務器MDS發送的所述第一消息;
[0026]所述第二節點根據所述第一消息,對所述第一元數據進行鏡像寫操作。
[0027]第三方面,提供一種分布式存儲元數據的修復方法,所述方法包括:
[0028]元數據服務器MDS向第二節點發送第一消息,所述第一消息攜帶第一元數據,以及對所述第一元數據進行鏡像寫操作的操作請求;
[0029]若所述第一節點上的元數據不完整,所述MDS接收第一節點發送的第二消息,所述第二消息用于請求所述第一節點上缺失的元數據;
[0030]所述MDS向所述第一節點發送第三消息,所述第三消息攜帶所述第一節點上缺失的元數據,由所述第一節點根據所述第一節點上缺失的元數據對所述第一節點上的元數據進行修復。
[0031]第四方面,提供一種第一節點,所述第一節點包括:接收單元、處理單元和發送單元;
[0032]所述接收單元,用于接收第二節點發送的第一消息,所述第一消息攜帶第一元數據,以及對所述第一元數據進行鏡像寫操作的操作請求;
[0033]所述處理單元,用于若所述第一節點上的元數據不完整,所述第一節點獲取所述第一節點上缺失的元數據;
[0034]所述處理單元,還用于根據獲取到的缺失的元數據,對所述第一節點上的元數據進行修復;
[0035]所述處理單元,還用于在將所述第一節點上的元數據修復完整后,對所述第一元數據進行鏡像寫操作;
[0036]所述發送單元,還用于向所述第二節點發送第二消息,所述第二消息用于指示所述第一元數據鏡像寫操作成功。
[0037]在第四方面第一種可能的實現方式中,結合第四方面,所述處理單元具體用于:
[0038]通過所述發送單元向所述第二節點發送第三消息,所述第三消息用于請求所述第一節點上缺失的元數據;
[0039]通過所述接收單元接收所述第二節點發送的第四消息,所述第四消息攜帶所述第一節點上缺失的元數據,從所述第四消息中獲取所述第一節點上缺失的元數據。
[0040]在第四方面第二種可能的實現方式中,結合第四方面,所述處理單元具體用于:
[0041]通過所述發送單元向元數據服務器MDS發送第三消息,所述第三消息用于請求所述第一節點上缺失的元數據;
[0042]通過所述接收單元接收所述MDS發送的第四消息,所述第四消息攜帶所述第一節點上缺失的元數據,從所述第四消息中獲取所述第一節點上缺失的元數據。
[0043]第五方面,提供一種第二節點,所述第二節點包括:接收單元和發送單元;
[0044]所述發送單元,用于向第一節點發送第一消息,所述第一消息攜帶第一元數據,以及對所述第一元數據進行鏡像寫操作的操作請求;
[0045]所述接收單元,用于若所述第一節點上的元數據不完整,接收所述第一節點發送的第二消息,所述第二消息用于請求所述第一節點上缺失的元數據;
[0046]所述發送單元,還用于向所述第一節點發送第三消息,所述第三消息攜帶所述第一節點上缺失的元數據,由所述第一節點根據所述第一節點上缺失的元數據對所述第一節點上的元數據進行修復;
[0047]所述接收單元,還用于接收所述第一節點發送的第四消息,所述第四消息用于指示所述第一元數據鏡像寫操作成功。
[0048]在第五方面第一種可能的實現方式中,結合第五方面,所述第二節點還包括處理單元;
[0049]所述接收單元,還用于在所述發送單元向第一節點發送第一消息之前,接收元數據服務器MDS發送的所述第一消息;
[0050]所述處理單元,用于根據所述第一消息,對所述第一元數據進行鏡像寫操作。
[0051]第六方面,提供一種元數據服務器MDS,所述MDS包括:接收單元發送單元;
[0052]所述發送單元,用于向第二節點發送第一消息,所述第一消息攜帶第一元數據,以及對所述第一元數據進行鏡像寫操作的操作請求;
[0053]所述接收單元,用于若所述第一節點上的元數據不完整,接收第一節點發送的第二消息,所述第二消息用于請求所述第一節點上缺失的元數據;
[0054]所述發送單元,還用于向所述第一節點發送第三消息,所述第三消息攜帶所述第一節點上缺失的元數據,由所述第一節點根據所述第一節點上缺失的元數據對所述第一節點上的元數據進行修復。
[0055]第七方面,提供一種第一節點,所述第一節點包括:接收器、處理器、發送器和總線;其中,所述接收器、所述處理器和所述發送器通過所述總線連接并完成相互間的通信;
[0056]所述接收器,用于接收第二節點發送的第一消息,所述第一消息攜帶第一元數據,以及對所述第一元數據進行鏡像寫操作的操作請求;
[0057]所述處理器,用于若所述第一節點上的元數據不完整,所述第一節點獲取所述第一節點上缺失的元數據;
[0058]所述處理器,還用于根據獲取到的缺失的元數據,對所述第一節點上的元數據進行修復;
[0059]所述處理器,還用于在將所述第一節點上的元數據修復完整后,對所述第一元數據進行鏡像寫操作;
[0060]所述發送器,還用于向所述第二節點發送第二消息,所述第二消息用于指示所述第一元數據鏡像寫操作成功。
[0061]在第七方面第一種可能的實現方式中,結合第七方面,所述處理器具體用于:
[0062]通過所述發送器向所述第二節點發送第三消息,所述第三消息用于請求所述第一節點上缺失的元數據;
[0063]通過所述接收器接收所述第二節點發送的第四消息,所述第四消息攜帶所述第一節點上缺失的元數據,從所述第四消息中獲取所述第一節點上缺失的元數據。
[0064]在第七方面第二種可能的實現方式中,結合第七方面,所述處理器具體用于:
[0065]通過所述發送器向元數據服務器MDS發送第三消息,所述第三消息用于請求所述第一節點上缺失的元數據;
[0066]通過所述接收器接