恢復數(shù)據(jù)的方法、服務器及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種恢復數(shù)據(jù)的方法、服務器及系統(tǒng),屬于信息【技術領域】。方法包括:主服務器接收存儲系統(tǒng)中的各個從服務器根據(jù)主服務器發(fā)送的日志獲取請求返回的第一恢復日志文件,并根據(jù)所有第一恢復日志文件及主服務器生成的第二恢復日志文件所記錄的最新操作信息對待恢復數(shù)據(jù)進行操作,第一恢復日志文件及第二恢復日志文件記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。本發(fā)明通過主服務器向存儲系統(tǒng)中的各個從服務器發(fā)送日志獲取請求后,根據(jù)各個從服務器返回的所有第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù),從而無需掃描所有數(shù)據(jù),也無需使用元數(shù)據(jù)服務器即可實現(xiàn)恢復數(shù)據(jù),提高了恢復數(shù)據(jù)的效率。
【專利說明】恢復數(shù)據(jù)的方法、服務器及系統(tǒng)
【技術領域】
[0001]本發(fā)明涉及信息【技術領域】,特別涉及一種恢復數(shù)據(jù)的方法、服務器及系統(tǒng)。
【背景技術】
[0002]隨著信息技術的不斷發(fā)展,存儲系統(tǒng)的規(guī)模越來越大。在大規(guī)模的存儲系統(tǒng)中,器件發(fā)生故障的頻率也隨之增加。在器件發(fā)生故障時,如何恢復數(shù)據(jù),從而保證數(shù)據(jù)的安全成為人們關注的問題。
[0003]目前,有三種恢復數(shù)據(jù)的方式,第一種方式:通過fsck命令掃描文件系統(tǒng)來查找待恢復數(shù)據(jù),并恢復待恢復數(shù)據(jù)。第二種方式:通過元數(shù)據(jù)服務器讀取系統(tǒng)操作日志中的待恢復數(shù)據(jù)的日志信息,并根據(jù)讀取到的待恢復數(shù)據(jù)的日志信息控制數(shù)據(jù)服務器重新執(zhí)行對數(shù)據(jù)的操作,從而恢復數(shù)據(jù)。第三種方式:通過元數(shù)據(jù)服務器讀取待恢復數(shù)據(jù)的日志信息,并根據(jù)讀取到的待恢復的日志信息控制數(shù)據(jù)服務器重新執(zhí)行對數(shù)據(jù)的操作,從而恢復數(shù)據(jù)。
[0004]現(xiàn)有技術至少存在以下問題:
[0005]第一種方式需要掃描所有的數(shù)據(jù),造成系統(tǒng)資源的浪費。第二種方式和第三種方式,都需要使用元數(shù)據(jù)服務器恢復數(shù)據(jù),而元數(shù)據(jù)服務器恢復數(shù)據(jù)的速度較慢,致使恢復數(shù)據(jù)的效率較低。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實施例提供了一種恢復數(shù)據(jù)的方法、服務器及系統(tǒng),可以解決現(xiàn)有技術的問題。所述技術方案如下:
[0007]第一方面,提供了一種恢復數(shù)據(jù)的方法,所述方法應用于存儲系統(tǒng)的主服務器,所述存儲系統(tǒng)包括主服務器和從服務器,所述主服務器和所述從服務器均用于存儲相同數(shù)據(jù),所述主服務器為第一個成功存儲數(shù)據(jù)的服務器,所述方法包括:
[0008]當所述存儲系統(tǒng)中的任意一個服務器存儲數(shù)據(jù)失敗時,所述主服務器向所述存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求,所述日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0009]接收各個從服務器根據(jù)所述日志獲取請求返回的第一恢復日志文件,每個第一恢復日志文件記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息;
[0010]根據(jù)所有所述第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,所述待恢復數(shù)據(jù)根據(jù)所述待恢復數(shù)據(jù)的位置信息查找得到,所述第二恢復日志文件由所述主服務器生成,且記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
[0011]結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述向所述存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求之前,還包括:
[0012]接收并存儲客戶端發(fā)送的數(shù)據(jù),并向所述客戶端返回包含所述數(shù)據(jù)的識別標識的第一寫入狀態(tài)信息,所述第一寫入狀態(tài)信息為寫入成功信息或?qū)懭胧⌒畔ⅲ籟0013]接收所述客戶端發(fā)送的總寫入狀態(tài)信息,所述總寫入狀態(tài)信息包括所述主服務器向所述客戶端返回的第一寫入狀態(tài)信息及每個從服務器向所述客戶端返回的第二寫入狀態(tài)息;
[0014]如果所述客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息,則確定所述客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄所述待恢復數(shù)據(jù)的位置信息及操作信息的第二恢復日志文件。
[0015]結(jié)合第一方面,在第一方面的第二種可能的實現(xiàn)方式中,所述根據(jù)所有所述第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,包括:
[0016]依次讀取每個所述第一恢復日志文件及第二恢復日志文件;
[0017]判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中,所述索引信息包括恢復日志文件標識、偏移量信息及數(shù)據(jù)長度信息,所述預設結(jié)構存儲有索引信息及操作時間;
[0018]若當前讀取的恢復日志文件的索引信息未在所述預設結(jié)構中,則將當前讀取的恢復日志文件的索引信息及操作時間添加到所述預設結(jié)構中;
[0019]繼續(xù)讀取下一個恢復日志文件,按照處理當前讀取的恢復日志文件的方式處理讀取的下一個恢復日志文件,直至處理完最后一個恢復日志文件,得到存儲有無重復索引信息及操作時間的預設結(jié)構;
[0020]獲取與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,并將與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件作為篩選出的恢復日志文件,根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作。
[0021]結(jié)合第一方面至第一方面的第二種可能的實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式中,所述判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中之后,還包括:
[0022]若當前讀取的恢復日志文件的索引信息在預設結(jié)構中,則將當前讀取的恢復日志文件的操作時間與所述預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間進行比較;
[0023]若當前讀取的恢復日志文件的操作時間晚于預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間,則將當前讀取的恢復日志文件的操作時間替換預設結(jié)構中與當前讀取的恢復日志文件的索引信息相對應的操作時間,并執(zhí)行繼續(xù)讀取下一個恢復日志文件的步驟。
[0024]結(jié)合第一方面至第一方面的第二種或第三種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式中,獲取與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,包括:
[0025]依次讀取所述第一恢復日志文件及與所述待恢復數(shù)據(jù)標識相對應的第二恢復日志文件,并將當前讀取的恢復日志文件的索引信息依次與預設結(jié)構中的索引信息進行比對;
[0026]若所述預設結(jié)構中存在與當前讀取的恢復日志文件的索引信息相同的索引信息,則比較當前讀取的恢復日志文件的操作時間與所述預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間;
[0027]若所述預設結(jié)構中存在與當前讀取的恢復日志文件的操作時間相同的對應當前讀取的恢復日志文件的索引信息的操作時間,則將當前讀取的恢復日志文件添加到篩選出的恢復日志文件中,并讀取下一個恢復日志文件;
[0028]以此類推,直至比對完最后一個恢復日志文件,得到所述預設結(jié)構中的每個索引信息對應的恢復日志文件。
[0029]結(jié)合第一方面至第一方面的第二種可能的實現(xiàn)方式,在第一方面的第五種可能的實現(xiàn)方式中,所述將與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件作為篩選出的恢復日志文件之后,還包括:
[0030]將篩選出的恢復日志文件發(fā)送給各個從服務器,由各個從服務器根據(jù)所述篩選出的恢復日志文件對所述待恢復數(shù)據(jù)進行恢復。
[0031]第二方面,提供了一種恢復數(shù)據(jù)的方法,所述方法應用于存儲系統(tǒng)的主服務器,所述存儲系統(tǒng)包括所述主服務器和從服務器,所述主服務器和所述從服務器均用于存儲相同數(shù)據(jù),所述主服務器為第一個成功存儲數(shù)據(jù)的服務器,所述方法包括:
[0032]每個從服務器接收所述主服務器發(fā)送的日志獲取請求,所述日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0033]根據(jù)所述日志獲取請求向所述主服務器返回第一恢復日志文件,使所述主服務器根據(jù)所述第一恢復日志文件及所述主服務器生成的第二恢復日志文件恢復所述待恢復數(shù)據(jù);
[0034]接收所述主服務器發(fā)送的篩選出的恢復日志文件,并根據(jù)所述篩選出的恢復日志文件所記錄的操作信息對待恢復數(shù)據(jù)進行操作;
[0035]其中,所述第一恢復日志文件及所述第二恢復日志文件均記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
[0036]結(jié)合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述根據(jù)所述日志獲取請求向所述主服務器返回第一恢復日志文件之前,還包括:
[0037]接收并存儲客戶端發(fā)送的數(shù)據(jù),并向所述客戶端返回包含所述數(shù)據(jù)的識別標識的第二寫入狀態(tài)信息,所述第二寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ?br>
[0038]接收所述客戶端發(fā)送的總寫入狀態(tài)信息,所述總寫入狀態(tài)信息包括所述從服務器向所述客戶端返回的第二寫入狀態(tài)信息及所述主服務器向所述客戶端返回的第一寫入狀態(tài)息;
[0039]如果所述客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息,則確定所述客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄所述待恢復數(shù)據(jù)的位置信息及操作信息的第一復日志文件。
[0040]結(jié)合第二方面,在第二方面的第二種可能的實現(xiàn)方式中,所述根據(jù)所述日志獲取請求向所述主服務器返回第一恢復日志文件之后,還包括:
[0041 ] 接收所述主服務器發(fā)送的篩選出的恢復日志文件,并根據(jù)所述篩選出的恢復日志文件對所述待恢復數(shù)據(jù)進行恢復。
[0042]第三方面,提供了一種恢復數(shù)據(jù)的服務器,所述服務器為應用于存儲系統(tǒng)的主服務器,所述存儲系統(tǒng)包括所述主服務器和從服務器,所述主服務器和所述從服務器均用于存儲相同數(shù)據(jù),所述主服務器為第一個成功存儲數(shù)據(jù)的服務器,所述服務器包括:
[0043]第一發(fā)送模塊,用于當所述存儲系統(tǒng)中的任意一個服務器存儲數(shù)據(jù)失敗時,向所述存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求,所述日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0044]第一接收模塊,用于接收各個從服務器根據(jù)所述日志獲取請求返回的第一恢復日志文件,每個第一恢復日志文件記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息;
[0045]恢復模塊,用于根據(jù)所有所述第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,所述待恢復數(shù)據(jù)根據(jù)所述待恢復數(shù)據(jù)的位置信息查找得到,所述第二恢復日志文件由所述主服務器生成,且記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
[0046]結(jié)合第三方面,在第三方面的第一種可能的實現(xiàn)方式中,所述服務器,還包括:
[0047]存儲模塊,用于接收并存儲客戶端發(fā)送的數(shù)據(jù);
[0048]返回模塊,用于向所述客戶端返回包含所述數(shù)據(jù)的識別標識的第一寫入狀態(tài)信息,所述第一寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ?br>
[0049]第二接收模塊,用于接收所述客戶端發(fā)送的總寫入狀態(tài)信息,所述總寫入狀態(tài)信息包括所述主服務器向所述客戶端返回的第一寫入狀態(tài)信息及每個從服務器向所述客戶端返回的第二寫入狀態(tài)信息;
[0050]生成模塊,用于當所述客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息時,確定所述客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄所述待恢復數(shù)據(jù)的位置信息及操作信息的第二恢復日志文件。
[0051]結(jié)合第三方面,在第三方面的第二種可能的實現(xiàn)方式中,所述恢復模塊,包括:
[0052]第一讀取單元,用于依次讀取每個所述第一恢復日志文件及第二恢復日志文件;
[0053]判斷單元,用于判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中,所述索引信息包括恢復日志文件標識、偏移量信息及數(shù)據(jù)長度信息,所述預設結(jié)構用于存儲索引信息及操作時間;
[0054]添加單元,用于在當前讀取的恢復日志文件的索引信息未在所述預設結(jié)構中時,將當前讀取的恢復日志文件的索引信息及操作時間添加到所述預設結(jié)構中;
[0055]第二讀取單元,用于繼續(xù)讀取下一個恢復日志文件;
[0056]處理單元,用于按照處理當前讀取的恢復日志文件的方式處理讀取的下一個恢復日志文件,直至處理完最后一個恢復日志文件,得到存儲有無重復索引信息及操作時間的預設結(jié)構;
[0057]獲取單元,用于獲取與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,并將與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件作為篩選出的恢復日志文件;
[0058]恢復單元,用于根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作。
[0059]結(jié)合第三方面至第三方面的第二種可能的實現(xiàn)方式,在第三方面的第三種可能的實現(xiàn)方式中,所述恢復模塊,還包括:[0060]比較單元,用于在當前讀取的恢復日志文件的索引信息在預設結(jié)構中時,將當前讀取的恢復日志文件的操作時間與所述預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間進行比較;
[0061]替換單元,用于在當前讀取的恢復日志文件的操作時間晚于預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間時,將當前讀取的恢復日志文件的操作時間替換預設結(jié)構中與當前讀取的恢復日志文件的索引信息相對應的操作時間;
[0062]所述第二讀取單元,還用于執(zhí)行繼續(xù)讀取下一個恢復日志文件的步驟。
[0063]結(jié)合第三方面至第一方面的第二種或第三種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第三方面的第四種可能的實現(xiàn)方式中,所述獲取單元,包括:
[0064]第一讀取子單元,用于依次讀取所述第一恢復日志文件及與所述待恢復數(shù)據(jù)標識相對應的第二恢復日志文件;
[0065]比對子單元,用于將當前讀取的恢復日志文件的索引信息依次與預設結(jié)構中的索引信息進行比對;
[0066]比較子單元,用于當所述預設結(jié)構中存在與當前讀取的恢復日志文件的索引信息相同的索引信息時,比較當前讀取的恢復日志文件的操作時間與所述預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間;
[0067]添加子單元,用于當所述預設結(jié)構中存在與當前讀取的恢復日志文件的操作時間相同的對應當前讀取的恢復日志文件的索引信息的操作時間時,將當前讀取的恢復日志文件添加到篩選出的恢復日志文件中;
[0068]第二讀取子單元,用于讀取下一個恢復日志文件;以此類推,直至比對完最后一個恢復日志文件,得到所述預設結(jié)構中的每個索引信息對應的恢復日志文件。
[0069]結(jié)合第三方面,在第三方面的第五種可能的實現(xiàn)方式中,所述服務器,還包括:
[0070]第二發(fā)送模塊,用于將篩選出的恢復日志文件發(fā)送給各個從服務器,由各個從服務器根據(jù)所述篩選出的恢復日志文件對所述待恢復數(shù)據(jù)進行恢復。
[0071]第四方面,提供了一種恢復數(shù)據(jù)的服務器,所述服務器為應用于存儲系統(tǒng)的從服務器,所述存儲系統(tǒng)包括主服務器和所述從服務器,所述主服務器和所述從服務器均用于存儲相同數(shù)據(jù),所述主服務器為第一個成功存儲數(shù)據(jù)的服務器,所述服務器包括:
[0072]第一接收模塊,用于接收所述主服務器發(fā)送的日志獲取請求,所述日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0073]第一返回模塊,用于根據(jù)所述日志獲取請求向所述主服務器返回第一恢復日志文件,使所述主服務器根據(jù)所述第一恢復日志文件及所述主服務器生成的第二恢復日志文件恢復所述待恢復數(shù)據(jù);
[0074]第二接收模塊,用于接收所述主服務器發(fā)送的篩選出的恢復日志文件;
[0075]恢復模塊,用于根據(jù)所述篩選出的恢復日志文件所記錄的操作信息對待恢復數(shù)據(jù)進行操作;
[0076]其中,所述第一恢復日志文件及所述第二恢復日志文件均記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
[0077]結(jié)合第四方面,在第四方面的第一種可能的實現(xiàn)方式中,所述服務器,還包括:
[0078]存儲模塊,用于接收并存儲客戶端發(fā)送的數(shù)據(jù);[0079]第二返回模塊,用于向所述客戶端返回包含所述數(shù)據(jù)的識別標識的第二寫入狀態(tài)信息,所述第二寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ?br>
[0080]第三接收模塊,用于接收所述客戶端發(fā)送的總寫入狀態(tài)信息,所述總寫入狀態(tài)信息包括所述從服務器向所述客戶端返回的第二寫入狀態(tài)信息及所述主服務器向所述客戶端返回的第一寫入狀態(tài)信息;
[0081]生成模塊,用于當所述客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息時,確定所述客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄所述待恢復數(shù)據(jù)的位置信息及操作信息的第一‘陜復日志文件。
[0082]第五方面,提供了一種恢復數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括:主服務器和至少一個從服務器;
[0083]其中,所述主服務器如上面所述的第一種服務器,所述從服務器如上面所述的第二種服務器。
[0084]本發(fā)明實施例提供的技術方案帶來的有益效果是:
[0085]通過主服務器向存儲系統(tǒng)中的各個從服務器發(fā)送日志獲取請求后,接收各個從服務器返回的第一恢復日志文件,并根據(jù)所有第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù),從而無需掃描所有數(shù)據(jù),也無需使用元數(shù)據(jù)服務器即可實現(xiàn)恢復數(shù)據(jù),提高了恢復數(shù)據(jù)的效率。
【專利附圖】
【附圖說明】
[0086]為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0087]圖1是本發(fā)明實施例一提供的一種恢復數(shù)據(jù)的方法流程圖;
[0088]圖2是本發(fā)明實施例一提供的另一種恢復數(shù)據(jù)的方法流程圖;
[0089]圖3是本發(fā)明實施例二提供的一種恢復數(shù)據(jù)的方法流程圖;
[0090]圖4是本發(fā)明實施例二提供的一種交互過程的示意圖;
[0091]圖5是本發(fā)明實施例三提供的一種恢復數(shù)據(jù)的服務器的結(jié)構示意圖;
[0092]圖6是本發(fā)明實施例四提供的一種恢復數(shù)據(jù)的服務器的結(jié)構示意圖;
[0093]圖7是本發(fā)明實施例五提供的一種恢復數(shù)據(jù)的系統(tǒng)的結(jié)構示意圖。
【具體實施方式】
[0094]為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作作為一種可選實施例詳細描述。
[0095]實施例一
[0096]本發(fā)明實施例提供了一種恢復數(shù)據(jù)的方法,以方法應用于存儲系統(tǒng)的主服務器,存儲系統(tǒng)包括主服務器和從服務器,主服務器和從服務器均用于存儲相同數(shù)據(jù),主服務器為第一個成功存儲數(shù)據(jù)的服務器為例,參見圖1,本發(fā)明實施例提供的方法流程包括:
[0097]101:當存儲系統(tǒng)中的任意一個服務器存儲數(shù)據(jù)失敗時,主服務器向存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求,日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0098]作為一種可選實施例,向存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求之前,還包括:
[0099]接收并存儲客戶端發(fā)送的數(shù)據(jù),并向客戶端返回包含數(shù)據(jù)的識別標識的第一寫入狀態(tài)信息,第一寫入狀態(tài)信息為寫入成功信息或?qū)懭胧⌒畔ⅲ?br>
[0100]接收客戶端發(fā)送的總寫入狀態(tài)信息,總寫入狀態(tài)信息包括主服務器向客戶端返回的第一寫入狀態(tài)信息及每個從服務器向客戶端返回的第二寫入狀態(tài)信息;
[0101]如果客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息,則確定客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄待恢復數(shù)據(jù)的位置信息及操作信息的第二恢復日志文件。
[0102]102:接收各個從服務器根據(jù)日志獲取請求返回的第一恢復日志文件,每個第一恢復日志文件記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息;
[0103]103:根據(jù)所有第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,待恢復數(shù)據(jù)根據(jù)待恢復數(shù)據(jù)的位置信息查找得到,第二恢復日志文件由主服務器生成,且記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
[0104]作為一種可選實施例,根據(jù)所有第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,包括:
[0105]依次讀取每個第一恢復日志文件及第二恢復日志文件;
[0106]判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中,索引信息包括恢復日志文件標識、偏移量信息及數(shù)據(jù)長度信息,預設結(jié)構用于存儲索引信息及操作時間;
[0107]若當前讀取的恢復日志文件的索引信息未在預設結(jié)構中,則將當前讀取的恢復日志文件的索引信息及操作時間添加到預設結(jié)構中;
[0108]繼續(xù)讀取下一個恢復日志文件,按照處理當前讀取的恢復日志文件的方式處理讀取的下一個恢復日志文件,直至處理完最后一個恢復日志文件,得到存儲有無重復索引信息及操作時間的預設結(jié)構;
[0109]獲取與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,并將與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件作為篩選出的恢復日志文件,根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作。
[0110]作為一種可選實施例,判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中之后,還包括:
[0111]若當前讀取的恢復日志文件的索引信息在預設結(jié)構中,則將當前讀取的恢復日志文件的操作時間與預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間進行比較;
[0112]若當前讀取的恢復日志文件的操作時間晚于預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間,則將當前讀取的恢復日志文件的操作時間替換預設結(jié)構中與當前讀取的恢復日志文件的索引信息相對應的操作時間,并執(zhí)行繼續(xù)讀取下一個恢復日志文件的步驟。
[0113]作為一種可選實施例,獲取與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,包括:[0114]依次讀取第一恢復日志文件及與待恢復數(shù)據(jù)標識相對應的第二恢復日志文件,并將當前讀取的恢復日志文件的索引信息依次與預設結(jié)構中的索引信息進行比對;
[0115]若預設結(jié)構中存在與當前讀取的恢復日志文件的索引信息相同的索引信息,則t匕較當前讀取的恢復日志文件的操作時間與預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間;
[0116]若預設結(jié)構中存在與當前讀取的恢復日志文件的操作時間相同的對應當前讀取的恢復日志文件的索引信息的操作時間,則將當前讀取的恢復日志文件添加到篩選出的恢復日志文件中,并讀取下一個恢復日志文件;
[0117]以此類推,直至比對完最后一個恢復日志文件,得到預設結(jié)構中的每個索引信息對應的恢復日志文件。
[0118]作為一種可選實施例,將與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件作為篩選出的恢復日志文件之后,還包括:
[0119]將篩選出的恢復日志文件發(fā)送給各個從服務器,由各個從服務器根據(jù)篩選出的恢復日志文件對待恢復數(shù)據(jù)進行恢復。
[0120]以方法應用于存儲系統(tǒng)的主服務器,存儲系統(tǒng)包括主服務器和從服務器,主服務器和從服務器均用于存儲相同數(shù)據(jù),主服務器為第一個成功存儲數(shù)據(jù)的服務器為例,參見圖2,本發(fā)明實施例提供的方法流程包括:
[0121]201:每個從服務器接收主服務器發(fā)送的日志獲取請求,日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0122]202:根據(jù)日志獲取請求向主服務器返回第一恢復日志文件,使主服務器根據(jù)第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù);
[0123]其中,第一恢復日志文件及第二恢復日志文件均記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
[0124]作為一種可選實施例,根據(jù)日志獲取請求向主服務器返回第一恢復日志文件之前,還包括:
[0125]接收并存儲客戶端發(fā)送的數(shù)據(jù),并向客戶端返回包含數(shù)據(jù)的識別標識的第二寫入狀態(tài)信息,第二寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ?br>
[0126]接收客戶端發(fā)送的總寫入狀態(tài)信息,總寫入狀態(tài)信息包括從服務器向客戶端返回的第二寫入狀態(tài)信息及主服務器向客戶端返回的第一寫入狀態(tài)信息;
[0127]如果客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息,則確定客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄待恢復數(shù)據(jù)的位置信息及操作信息的第一恢復日志文件。
[0128]203:接收主服務器發(fā)送的篩選出的恢復日志文件,并根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作。
[0129]本發(fā)明實施例提供的方法,通過主服務器向存儲系統(tǒng)中的各個從服務器發(fā)送日志獲取請求后,根據(jù)各個從服務器返回的第一恢復日志文件,并根據(jù)所有第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù),從而無需掃描所有數(shù)據(jù),也無需使用元數(shù)據(jù)服務器即可實現(xiàn)恢復數(shù)據(jù),提高了恢復數(shù)據(jù)的效率。
[0130]實施例二
[0131]本發(fā)明實施例提供了一種恢復數(shù)據(jù)的方法,為了便于理解,結(jié)合上述實施例一的內(nèi)容,以存儲系統(tǒng)為例,對本發(fā)明實施例提供的數(shù)據(jù)處理方法進行詳細地解釋說明。其中,存儲系統(tǒng)中包括主服務器和至少兩個從服務器,主服務器為第一個成功存儲數(shù)據(jù)的服務器,從服務器為存儲系統(tǒng)中除主服務器以外的其他服務器。參見圖3,本實施例提供的方法流程包括:
[0132]301:主服務器和從服務器分別接收并存儲客戶端發(fā)送的數(shù)據(jù),主服務器向客戶端返回包含數(shù)據(jù)的識別標識的第一寫入狀態(tài)信息,從服務器向客戶端返回包含數(shù)據(jù)的識別標識的第二寫入狀態(tài)信息,第一寫入狀態(tài)信息及第二寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧∠?
[0133]為了使主服務器和從服務器能夠分別接收客戶端發(fā)送的數(shù)據(jù),客戶端會提前獲取數(shù)據(jù)。關于客戶端獲取數(shù)據(jù)的方式,本實施例不作具體限定。具體實施時,可以由用戶通過APP (Application,應用)將數(shù)據(jù)寫入客戶端,再由客戶端將數(shù)據(jù)發(fā)送給各個服務器。當然,除了上述接收數(shù)據(jù)的方式外,還可以采用其他方式,本實施例對此不作具體限定。
[0134]作為一種可選實施例,主服務器和從服務器通過與客戶端的交互存儲數(shù)據(jù)。其中,主服務器和從服務器與客戶端的交互過程采用兩階段事務提交的方式,分別為準備階段和提交階段。在準備階段,主服務器存儲客戶端發(fā)送的數(shù)據(jù),并向客戶端返回包含數(shù)據(jù)的識別標識的第一寫入狀態(tài)信息,從服務器存儲客戶端發(fā)送的數(shù)據(jù),并向客戶端返回包含數(shù)據(jù)的識別標識的第二寫入狀態(tài)信息,即步驟301對應準備階段。
[0135]為了便于理解,以如圖4所示的交互過程為例進行說明。其中,存儲系統(tǒng)中共有3個服務器,分別為服務器1、服務器2及服務器3。用戶通過APP將數(shù)據(jù)I寫入客戶端,客戶端創(chuàng)建一個transaction(事務),并向服務器I至服務器3分別發(fā)送用戶寫入的數(shù)據(jù)I。月艮務器I至服務器3分別接收并存儲客戶端發(fā)送的數(shù)據(jù)1,即服務器I至服務器3存儲相同的數(shù)據(jù)I ;服務器I和服務器2存儲數(shù)據(jù)I成功,服務器3存儲數(shù)據(jù)I失??;服務器I和服務器2向客戶端返回包含數(shù)據(jù)I標識的寫入狀態(tài)信息,該寫入狀態(tài)信息為寫入成功信息;服務器3向客戶端返回包含數(shù)據(jù)I標識的寫入狀態(tài)信息,該寫入狀態(tài)信息為寫入失敗信息。另夕卜,由于服務器I為第一個成功存儲數(shù)據(jù)I的服務器,則將服務器I作為主服務器,服務器I向客戶端返回的寫入狀態(tài)信息為第一寫入狀態(tài)信息;將存儲系統(tǒng)中除主服務器以外的其他服務器,即服務器2和服務器3作為從服務器,并將服務器2和服務器3向客戶端返回的寫入狀態(tài)信息作為第二寫入狀態(tài)信息。
[0136]302:主服務器和從服務器分別接收客戶端發(fā)送的總寫入狀態(tài)信息,總寫入狀態(tài)信息包括主服務器向客戶端返回的第一寫入狀態(tài)信息及每個從服務器向客戶端返回的第二寫入狀態(tài)信息;
[0137]由于主服務器向客戶端返回包含數(shù)據(jù)的識別標識的第一寫入狀態(tài)信息,從服務器向客戶端返回包含數(shù)據(jù)的識別標識的第二寫入狀態(tài)信息,客戶端會接收到各個服務器發(fā)送的包括第一寫入狀態(tài)信息及第二寫入狀態(tài)信息的總寫入狀態(tài)信息,并將包括寫入失敗信息的總寫入狀態(tài)信息發(fā)送給寫入狀態(tài)信息為寫入成功信息的服務器,從而使各個服務器能夠接收客戶端發(fā)送的總寫入狀態(tài)信息。
[0138]作為一種可選實施例,在服務器與客戶端的交互過程的提交階段,主服務器和從服務器分別接收客戶端發(fā)送的總寫入狀態(tài)信息,即步驟302對應提交階段。
[0139]為了便于理解,仍以如圖4所示的交互過程為例進行說明。其中,存儲系統(tǒng)中共有3個服務器,分別為服務器1、服務器2及服務器3。由于服務器I和服務器2向客戶端返回的寫入狀態(tài)信息為寫入成功信息;服務器3向客戶端返回的寫入狀態(tài)信息為寫入失敗信息,則在提交階段,客戶端向服務器1、服務器2及服務器3發(fā)送總寫入狀態(tài)信息,該總寫入狀態(tài)信息中包括數(shù)據(jù)I寫入失敗信息,服務器1、服務器2及服務器3接收客戶端發(fā)送的總寫入狀態(tài)信息。
[0140]303:當客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息時,主服務器和從服務器分別確定客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),主服務器生成記錄待恢復數(shù)據(jù)的位置信息及操作信息的第二恢復日志文件,從服務器生成記錄待恢復數(shù)據(jù)的位置信息及操作信息的第一‘陜復日志文件;
[0141]當客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息時,說明至少一個服務器存儲數(shù)據(jù)失敗,為了恢復數(shù)據(jù),減少數(shù)據(jù)丟失,主服務器和從服務器分別確定客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù)。
[0142]需要說明的是,恢復日志文件中記錄的待恢復數(shù)據(jù)的位置信息可以為偏移量信息、數(shù)據(jù)長度信息等,用于確定待恢復數(shù)據(jù)的位置;操作信息可以為寫入數(shù)據(jù)信息、刪除數(shù)據(jù)信息等,用于描述對數(shù)據(jù)的操作,本實施例不對恢復日志文件中記錄的待恢復數(shù)據(jù)的位置信息及操作信息的內(nèi)容作具體限定。
[0143]為了便于理解,仍以圖4所示的交互過程為例進行說明。其中,存儲系統(tǒng)中共有3個服務器,分別為服務器1、服務器2及服務器3。由于服務器1、服務器2及服務器3接收到客戶端發(fā)送的總寫入狀態(tài)信息包含寫入失敗信息,則服務器1、服務器2和服務器3確定數(shù)據(jù)I為待恢復數(shù)據(jù),并生成記錄寫入數(shù)據(jù)I的位置信息及操作信息的恢復日志文件。例如,如果服務器I為主服務器,服務器2和服務器3為從服務器,則服務器I生成記錄待恢復數(shù)據(jù)的位置信息及操作信息的第二恢復日志文件。服務器2和服務器3通過數(shù)據(jù)刷盤,記錄錯誤日志,即生成記錄待恢復數(shù)據(jù)的位置信息及操作信息的第一恢復日志文件。
[0144]以上客戶端與各個服務器的交互過程體現(xiàn)了各個服務器存儲數(shù)據(jù)以及生成恢復日志文件的過程,對于恢復數(shù)據(jù)的具體過程,詳見如下步驟。
[0145]304:當存儲系統(tǒng)中的任意一個服務器存儲數(shù)據(jù)失敗時,主服務器向所在存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求,日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0146]關于觸發(fā)主服務器向所在存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求的方式,本實施例不作具體限定。具體實施時,在存儲系統(tǒng)中的任意一個服務器存儲數(shù)據(jù)失敗,生成待恢復日志文件后,由服務器定時檢查恢復日志文件,啟動數(shù)據(jù)恢復,從而觸發(fā)主服務器向所在存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求。當然,除了上述方式外,還可以采用其他方式。
[0147]為了便于理解,仍以服務器I和服務器2存儲數(shù)據(jù)I成功,服務器3存儲數(shù)據(jù)I失敗為例進行說明。其中,服務器I為主服務器。服務器I至服務器3定時檢查記錄的恢復日志文件,通過檢查發(fā)現(xiàn)數(shù)據(jù)I需要恢復。由服務器I向服務器2和服務器3發(fā)送攜帶數(shù)據(jù)I的數(shù)據(jù)標識的日志獲取請求。
[0148]305:從服務器接收主服務器發(fā)送的日志獲取請求,日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0149]由于主服務器向所在存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求,則從服務器可直接接收主服務器發(fā)送的日志獲取請求;又由于日志獲取請求中攜帶待恢復數(shù)據(jù)標識,便于后續(xù)步驟中從服務器根據(jù)日志獲取請求中的待恢復數(shù)據(jù)標識返回恢復日志文件。
[0150]為了便于理解,仍以服務器I和服務器2存儲數(shù)據(jù)I成功,服務器3存儲數(shù)據(jù)I失敗為例進行說明。其中,服務器I為主服務器。服務器2和服務器3接收服務器I發(fā)送的日志獲取請求,該日志獲取請求中攜帶數(shù)據(jù)I的數(shù)據(jù)標識。
[0151]306:從服務器根據(jù)日志獲取請求向主服務器返回第一恢復日志文件,第一恢復日志文件記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息;
[0152]由于日志獲取請求中攜帶待恢復數(shù)據(jù)標識,則從服務器可以根據(jù)待恢復數(shù)據(jù)標識在記錄的恢復日志文件中查找與待恢復數(shù)據(jù)標識相對應的恢復日志文件,并向主服務器返回查找到的恢復日志文件。關于從服務器查找恢復日志文件的方式,本實施例不作具體限定。具體實施時,可以依次讀取記錄的恢復日志文件,將讀取到的恢復日志文件中的數(shù)據(jù)標識與日志獲取請求中攜帶的待恢復數(shù)據(jù)標識進行比較;如果讀取到的恢復日志文件中的數(shù)據(jù)標識與日志獲取請求中攜帶的待恢復數(shù)據(jù)標識相同,則將讀取到的恢復日志文件作為查找到的第一恢復日志文件,并返回給主服務器。當然,除了上述方式,還可以采用其他方式。
[0153]為了便于理解,仍以服務器I和服務器2存儲數(shù)據(jù)I成功,服務器3存儲數(shù)據(jù)I失敗為例進行說明。其中,服務器I為主服務器。服務器2和服務器3依次讀取恢復日志文件,若讀取到的恢復日志文件I中的數(shù)據(jù)標識與數(shù)據(jù)I的標識相同,則將恢復日志文件I作為查找到的第一恢復日志文件,并向服務器I返回恢復日志文件I。
[0154]307:主服務器接收各個從服務器根據(jù)日志獲取請求返回的第一恢復日志文件,每個恢復日志文件記錄了待恢復數(shù)據(jù)的位置信息及操作信息;
[0155]由于從服務器根據(jù)日志獲取請求向主服務器返回第一恢復日志文件,則主服務器可以直接接收各個從服務器根據(jù)日志獲取請求返回的第一恢復日志文件。
[0156]為了便于理解,仍以服務器I和服務器2存儲數(shù)據(jù)I成功,服務器3存儲數(shù)據(jù)I失敗為例進行說明。其中,服務器I為主服務器。服務器I接收服務器2和服務器3根據(jù)日志獲取請求返回的與數(shù)據(jù)I標識相對應的第一恢復日志文件,每個第一恢復日志文件記錄了數(shù)據(jù)I的位置信息及操作信息。
[0157]308:主服務器根據(jù)所有第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,第二恢復日志文件由主服務器生成,且記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息;
[0158]具體地,由于每個第一恢復日志文件及第二恢復日志文件均記錄了待恢復數(shù)據(jù)的位置信息及操作信息,則服務器可以根據(jù)每個恢復日志文件中的待恢復數(shù)據(jù)的位置信息找到待恢復數(shù)據(jù),并根據(jù)每個恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,進而實現(xiàn)對待恢復數(shù)據(jù)進行數(shù)據(jù)恢復。
[0159]然而,由于主服務器獲取到的所有第一恢復日志文件及第二恢復日志文件中有可能存在對同一待恢復數(shù)據(jù)執(zhí)行相同操作的情況,因此,為了無需根據(jù)重復的恢復日志文件執(zhí)行重復的數(shù)據(jù)恢復操作,從而節(jié)省恢復數(shù)據(jù)的時間,本實施例提供的方法在根據(jù)所有第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作時,包括但不限于:
[0160](al)依次讀取每個第一恢復日志文件及第二恢復日志文件;[0161](a2)判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中,索引信息包括恢復日志文件標識、偏移量信息及數(shù)據(jù)長度信息,預設結(jié)構用于存儲索引信息及操作時間;若當前讀取的恢復日志文件的索引信息未在預設結(jié)構中,則執(zhí)行(a3);若當前讀取的恢復日志文件的索引信息在預設結(jié)構中,則執(zhí)行(a4);
[0162](a3)將當前讀取的恢復日志文件的索引信息及操作時間添加到預設結(jié)構中,并執(zhí)行(a6);
[0163]( a4 )將當前讀取的恢復日志文件的操作時間與預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間進行比較;若當前讀取的恢復日志文件的操作時間晚于預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間,則執(zhí)行(a5);若當前讀取的恢復日志文件的操作時間早于預設結(jié)構中與當前讀取的恢復日志文件的索引信息相對應的操作時間,則執(zhí)行(a6);
[0164](a5)將當前讀取的恢復日志文件的操作時間替換預設結(jié)構中與當前讀取的恢復日志文件的索引信息相對應的操作時間,并執(zhí)行(a6)。
[0165](a6)繼續(xù)讀取下一個恢復日志文件,按照處理當前讀取的恢復日志文件的方式處理讀取的下一個恢復日志文件,直至處理完最后一個恢復日志文件,并執(zhí)行(a7);
[0166](a7)獲取與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,并將與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件作為篩選出的恢復日志文件,根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作。
[0167]需要說明的是,在根據(jù)所有第一恢復日志文件及第二恢復日志文件恢復待恢復數(shù)據(jù)之前,預設結(jié)構為空結(jié)構。在恢復待恢復數(shù)據(jù)的過程中,將符合上述判斷比較要求的恢復日志文件的索引信息及操作時間添加到預設結(jié)構中,從而使預設結(jié)構中包含篩選出的恢復日志文件的索引信息及操作時間,即得到的預設結(jié)構為存儲了無重復索引信息及操作時間的預設結(jié)構,也就是說,預設結(jié)構中存儲的索引信息及操作時間不存在重復的情況。因此,根據(jù)預設結(jié)構所確定的恢復日志文件將是無重復操作的恢復日志文件。通過利用預設結(jié)構篩選恢復日志文件,提高了恢復日志文件篩選的效率,減少了后續(xù)步驟中根據(jù)篩選出的恢復日志文件恢復待恢復數(shù)據(jù)的工作量,加快了恢復數(shù)據(jù)的速度。關于預設結(jié)構的具體形式,本實施例不作具體限定。具體實施時,預設結(jié)構包括但不限于哈希表、紅黑樹等。
[0168]為了便于理解,以服務器I為主服務器,接收服務器2返回的第一恢復日志文件21和第一恢復日志文件22,以及服務器3返回的第一恢復日志文件31為例進行說明。第一恢復日志文件21中記錄寫入數(shù)據(jù)1,索引信息為al+a2+a3,操作時間為2013年12月12日,13:22 ;第一恢復日志文件22中記錄刪除數(shù)據(jù)1,索引信息為al+a2+a3,操作時間為2013年12月12日,13:49;第一恢復日志文件31中記錄寫入數(shù)據(jù)1,索引信息為al+a2+a3,操作時間為2013年12月12日,13:22。其中,al為恢復日志文件標識,a2為偏移量信息;a3為數(shù)據(jù)長度信息。
[0169]另外,服務器I生成第二恢復日志文件11和第二恢復日志文件12 ;第二恢復日志文件11中記錄寫入數(shù)據(jù)1,索引信息為al+a2+a3,操作時間為2013年12月12日,13:22 ;第二恢復日志文件12中記錄刪除數(shù)據(jù)1,索引信息為al+a2+a3,操作時間為2013年12月12 日,13:49。
[0170]服務器I讀取第二恢復日志文件11,由于此時還未進行恢復日志文件篩選,預設結(jié)構為空結(jié)構,則直接將第二恢復日志文件11的索引信息al+a2+a3以及操作時間2013年12月12日,13:22添加到預設結(jié)構中;繼續(xù)讀取下一個第二恢復日志文件12,判斷第二恢復日志文件12索引信息al+a2+a3在預設結(jié)構中,則將第二恢復日志文件12的操作時間2013年12月12日,13:49與預設結(jié)構中第二恢復日志文件11的索引信息al+a2+a3的操作時間2013年12月12日,13:22進行比較;通過比較可知,第二恢復日志文件12的操作時間2013年12月12日,13:49晚于預設結(jié)構中第二恢復日志文件11的索引信息al+a2+a3的操作時間2013年12月12日,13:22,則將第二恢復日志文件12的操作時間2013年12月12日,13:49替換預設結(jié)構中與第二恢復日志文件11的索引信息al+a2+a3相對應的操作時間2013年12月12日,13:22,替換后的預設結(jié)構中包括索引信息al+a2+a3以及索引信息al+a2+a3相對應的操作時間2013年12月12日,13:49。
[0171]繼續(xù)讀取下一個第一恢復日志文件21,判斷第一恢復日志文件21的索引信息al+a2+a3在預設結(jié)構中,則將第一恢復日志文件21的操作時間2013年12月12日,13:22與預設結(jié)構中索引信息al+a2+a3的操作時間2013年12月12日,13:49進行比較;通過比較可知,第一恢復日志文件21的操作時間2013年12月12日,13:22早于預設結(jié)構中索引信息al+a2+a3相對應的操作時間2013年12月12日,13:49,說明第一恢復日志文件21屬于在服務器時效的期間,出現(xiàn)的交疊的恢復日志文件,即多個恢復日志文件操作同一個數(shù)據(jù),操作時間晚的恢復日志文件操作的內(nèi)容會覆蓋操作時間早的恢復日志文件操作的內(nèi)容,這時,需要執(zhí)行操作時間晚的恢復日志文件即可,不需要執(zhí)行操作時間早的恢復日志文件。此時,預設結(jié)構中包括索引信息和索引信息相對應的操作時間不變,即包括索引信息al+a2+a3以及索引信息al+a2+a3相對應的操作時間2013年12月12日,13:49。例如,在實際應用的場景中會出現(xiàn),客戶端寫入一段數(shù)據(jù)A,生成一個恢復日志文件;過了一段時間之后,客戶端將之前寫入的一段數(shù)據(jù)A刪除,又生成一個恢復日志文件。如果在恢復數(shù)據(jù)時,執(zhí)行這兩個恢復日志文件,則將出現(xiàn)寫入一段數(shù)據(jù)A,再刪除一段數(shù)據(jù)A的操作,而寫入一段數(shù)據(jù)A的操作是無用的。所以,只需要刪除一段數(shù)據(jù)A即可。
[0172]為了篩選恢復日志文件,繼續(xù)讀取下一個第一恢復日志文件22,判斷第一恢復日志文件22的索引信息al+a2+a3在預設結(jié)構中,則將第一恢復日志文件22的操作時間2013年12月12日,13:49與預設結(jié)構中的索引信息al+a2+a3的操作時間2013年12月12日,13:49進行比較;通過比較可知,第一恢復日志文件22的操作時間2013年12月12日,13:49與預設結(jié)構中的索引信息al+a2+a3相對應的操作時間2013年12月12日,13:49相同,則繼續(xù)讀取下一個第一恢復日志文件。此時,預設結(jié)構中包括索引信息和索引信息相對應的操作時間不變,即包括索引信息al+a2+a3以及索引信息al+a2+a3相對應的操作時間2013 年 12 月 12 日,13:49。
[0173]讀取第一恢復日志文件31,判斷第一恢復日志文件31的索引信息al+a2+a3在預設結(jié)構中,則將第一恢復日志文件31的操作時間2013年12月12日,13:22與預設結(jié)構中的索引信息al+a2+a3的操作時間2013年12月12日,13:49進行比較;通過比較可知,第一恢復日志文件31的操作時間2013年12月12日,13:22早于預設結(jié)構中的索引信息al+a2+a3相對應的操作時間2013年12月12日,13:49,則繼續(xù)讀取下一個第一恢復日志文件。至此,接收到的第一恢復日志文件21、22、31及服務器I生成的與數(shù)據(jù)I標識相對應的第二恢復日志文件11、12都已完成處理。此時,預設結(jié)構中包括索引信息al+a2+a3以及索引信息al+a2+a3相對應的操作時間2013年12月12日,13:49。
[0174]作為一種可選實施例,(a7)中獲取與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,包括但不限于:
[0175](a71)依次讀取第一恢復日志文件及與待恢復數(shù)據(jù)標識相對應的第二恢復日志文件,并將當前讀取的恢復日志文件的索引信息依次與預設結(jié)構中的索引信息進行比對;若預設結(jié)構中存在與當前讀取的恢復日志文件的索引信息相同的索引信息,則執(zhí)行(a72);若預設結(jié)構中不存在與當前讀取的恢復日志文件的索引信息相同的索引信息,則執(zhí)行(a74);
[0176](a72)比較當前讀取的恢復日志文件的操作時間與預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間;若預設結(jié)構中存在與當前讀取的恢復日志文件的操作時間相同的對應當前讀取的恢復日志文件的索引信息的操作時間,則執(zhí)行(a73);若預設結(jié)構中不存在與當前讀取的恢復日志文件的操作時間相同的對應當前讀取的恢復日志文件的索引信息的操作時間,則執(zhí)行(a74);
[0177](a73)將當前讀取的恢復日志文件添加到篩選出的恢復日志文件中,并執(zhí)行(a74);
[0178](a74)讀取下一個恢復日志文件;以此類推,直至比對完最后一個恢復日志文件,得到預設結(jié)構中的每個索引信息對應的恢復日志文件。
[0179]為了便于理解,以預設結(jié)構中包括索引信息al+a2+a3以及索引信息al+a2+a3相對應的操作時間2013年12月12日,13:49為例進行說明。讀取第二恢復日志文件11,將第二恢復日志文件11的索引信息al+a2+a3與預設結(jié)構中的索引信息al+a2+a3進行比對,可知預設結(jié)構中存在與第二恢復日志文件11的索引信息al+a2+a3相同的索引信息;繼續(xù)比較第二恢復日志文件11的操作時間2013年12月12日,13:22與預設結(jié)構中的索引信息al+a2+a3的操作時間2013年12月12日,13:49,通過比較可知預設結(jié)構中不存在與第二恢復日志文件11的操作時間2013年12月12日,13:22相同的操作時間,則繼續(xù)讀取下一個恢復日志文件。
[0180]讀取第二恢復日志文件12,將第二恢復日志文件12的索引信息al+a2+a3與預設結(jié)構中的索引信息al+a2+a3進行比對,可知預設結(jié)構中存在與第二恢復日志文件12的索引信息al+a2+a3相同的索引信息;繼續(xù)比較第二恢復日志文件12的操作時間2013年12月12日,13:49與預設結(jié)構中的索引信息al+a2+a3的操作時間2013年12月12日,13:49,通過比較可知預設結(jié)構中存在與恢復日志文件12的操作時間2013年12月12日,13:49相同的操作時間,則將當前讀取的第二恢復日志文件12添加到篩選出的恢復日志文件中,并繼續(xù)讀取下一個恢復日志文件。以此類推,依次將第一‘陜復日志文件21、22、31的索引信息及操作時間與預設結(jié)構中的索引信息及操作時間進行比對,未得到匹配的第一恢復日志文件,因此,僅將第二恢復日志文件12作為篩選出的恢復日志文件。
[0181]由于已經(jīng)完成恢復日志文件的篩選,并且篩選出的恢復日志文件中記錄了待恢復數(shù)據(jù)的最新操作信息,則可根據(jù)篩選出的恢復日志文件中記錄的操作信息對待恢復數(shù)據(jù)進行操作。關于恢復數(shù)據(jù)的方式,本實施例不作具體限定。具體實施時,可以由主服務器根據(jù)恢復日志文件中記錄的待恢復數(shù)據(jù)的操作信息重新對數(shù)據(jù)進行操作。當然,除了上述方式夕卜,還可以采用其他方式。另外,一個恢復日志文件中可以記錄待恢復數(shù)據(jù)的多條日志信息,針對該種情況,可以由主服務器依次讀取待恢復數(shù)據(jù)的每條日志信息,并根據(jù)待恢復數(shù)據(jù)的每條日志信息中的操作信息重新對數(shù)據(jù)進行操作。
[0182]為了便于理解,以篩選出的恢復日志文件是恢復日志文件12為例進行說明。恢復日志文件12中記錄了刪除數(shù)據(jù)I的操作,則服務器I可執(zhí)行刪除數(shù)據(jù)I的操作來完成數(shù)據(jù)恢復。
[0183]309:主服務器將篩選出的恢復日志文件發(fā)送給各個從服務器,由各個從服務器根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作;
[0184]針對存儲系統(tǒng)中主服務器和從服務器存儲相同數(shù)據(jù)的特點,為了能夠提高恢復數(shù)據(jù)的速度,本實施例提供的方法還包括但不限于:主服務器將篩選出的恢復日志文件發(fā)送給各個從服務器。這樣各個從服務器根據(jù)篩選出的恢復日志文件并行對待恢復數(shù)據(jù)進行恢復,從而無需元數(shù)據(jù)服務器即可實現(xiàn)數(shù)據(jù)的恢復,不僅減少了元數(shù)據(jù)服務器的負載,還提高了數(shù)據(jù)恢復的速度。
[0185]為了便于理解,仍以篩選出的恢復日志文件是第二恢復日志文件12為例進行說明。服務器I將第二恢復日志文件12發(fā)送給服務器2和服務器3,服務器2和服務器3根據(jù)第二恢復日志文件12對數(shù)據(jù)I進行恢復。
[0186]作為一種可選實施例,本實施例提供的方法還包括但不限于:主服務器刪除所有第一恢復日志文件及第二恢復日志文件,并通知各個從服務器刪除所有第一恢復日志文件及第二恢復日志文件;
[0187]由于主服務器已經(jīng)完成數(shù)據(jù)恢復,因而針對已經(jīng)恢復的數(shù)據(jù)無需再記錄恢復日志文件,且為了節(jié)省主服務器中的存儲資源,主服務器將刪除所有第一恢復日志文件及第二恢復日志文件。
[0188]同樣地,為了節(jié)省從服務器中的存儲資源,主服務器將通知各個從服務器在成功恢復數(shù)據(jù)后,刪除所有用于恢復該待恢復數(shù)據(jù)的第一恢復日志文件及第二恢復日志文件。關于通知從服務器的方式,本實施例不作具體限定。具體實施時,可以采用向從服務器發(fā)送刪除消息的方式來通知從服務器。當然,除了上述方式外,還可以采用其他方式。
[0189]310:從服務器接收主服務器發(fā)送的篩選出的恢復日志文件,并根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作。
[0190]由于篩選出的恢復日志文件中記錄了待恢復數(shù)據(jù)的位置信息及操作信息,則從服務器在接收到主服務器發(fā)送的篩選出的恢復日志文件后,可根據(jù)篩選出的恢復日志文件對待恢復數(shù)據(jù)進行恢復。關于恢復數(shù)據(jù)的方式,具體可參見上述步驟308中主服務器根據(jù)篩選出的恢復日志文件恢復待恢復數(shù)據(jù)的方式,此處不再贅述。
[0191]作為一種可選實施例,本實施例提供的方法還包括但不限于:從服務器接收主服務器發(fā)送的刪除所有第一恢復日志文件及第二恢復日志文件的通知,根據(jù)通知刪除所有第一恢復日志文件及第二恢復日志文件。
[0192]由于主服務器通知各個從服務器刪除所有第一恢復日志文件及第二恢復日志文件,則從服務器可以接收主服務器發(fā)送的刪除所有第一恢復日志文件及第二恢復日志文件的通知,從而觸發(fā)根據(jù)通知在成功恢復數(shù)據(jù)后,刪除所有第一恢復日志文件及第二恢復日志文件。
[0193]本實施例提供的方法,通過主服務器向存儲系統(tǒng)中的各個從服務器發(fā)送日志獲取請求,接收各個從服務器返回的第一恢復日志文件,并根據(jù)所有第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù)恢復待恢復數(shù)據(jù),從而無需掃描所有數(shù)據(jù),也無需使用元數(shù)據(jù)服務器即可實現(xiàn)恢復數(shù)據(jù),提高了恢復數(shù)據(jù)的效率。
[0194]實施例三
[0195]參見圖5,本發(fā)明實施例提供了 一種恢復數(shù)據(jù)的服務器,該服務器為應用于存儲系統(tǒng)的主服務器,存儲系統(tǒng)包括主服務器和從服務器,主服務器和從服務器均用于存儲相同數(shù)據(jù),主服務器為第一個成功存儲數(shù)據(jù)的服務器,該服務器包括:
[0196]第一發(fā)送模塊401,用于當存儲系統(tǒng)中的任意一個服務器存儲數(shù)據(jù)失敗時,向存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求,日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0197]第一接收模塊402,用于接收各個從服務器根據(jù)日志獲取請求返回的第一恢復日志文件,每個第一恢復日志文件記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息;
[0198]恢復模塊403,用于根據(jù)所有第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,待恢復數(shù)據(jù)根據(jù)待恢復數(shù)據(jù)的位置信息查找得到,第二恢復日志文件由主服務器生成,且記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
[0199]可選地,該服務器,還包括:
[0200]存儲模塊,用于接收并存儲客戶端發(fā)送的數(shù)據(jù);
[0201]返回模塊,用于向客戶端返回包含數(shù)據(jù)的識別標識的第一寫入狀態(tài)信息,第一寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ?br>
[0202]第二接收模塊,用于接收客戶端發(fā)送的總寫入狀態(tài)信息,總寫入狀態(tài)信息包括主服務器向客戶端返回的第一寫入狀態(tài)信息及每個從服務器向客戶端返回的第二寫入狀態(tài)
信息;
[0203]生成模塊,用于當客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息時,確定客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄待恢復數(shù)據(jù)的位置信息及操作信息的第二恢復日志文件。
[0204]可選地,恢復模塊403,包括:
[0205]第一讀取單元,用于依次讀取每個第一恢復日志文件及第二恢復日志文件;
[0206]判斷單元,用于判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中,索引信息包括恢復日志文件標識、偏移量信息及數(shù)據(jù)長度信息,預設結(jié)構存儲有索引信息及操作時間;
[0207]添加單元,用于在當前讀取的恢復日志文件的索引信息未在預設結(jié)構中時,將當前讀取的恢復日志文件的索引信息及操作時間添加到預設結(jié)構中;
[0208]第二讀取單元,用于繼續(xù)讀取下一個恢復日志文件;
[0209]處理單元,用于按照處理當前讀取的恢復日志文件的方式處理讀取的下一個恢復日志文件,直至處理完最后一個恢復日志文件,得到存儲有無重復索引信息及操作時間的預設結(jié)構;
[0210]獲取單元,用于獲取與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,并將與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件作為篩選出的恢復日志文件;[0211]恢復單元,用于根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作。
[0212]可選地,恢復模塊403,還包括:
[0213]比較單元,用于在當前讀取的恢復日志文件的索引信息在預設結(jié)構中時,將當前讀取的恢復日志文件的操作時間與預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間進行比較;
[0214]替換單元,用于在當前讀取的恢復日志文件的操作時間晚于預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間時,將當前讀取的恢復日志文件的操作時間替換預設結(jié)構中與當前讀取的恢復日志文件的索引信息相對應的操作時間;
[0215]第二讀取單元,還用于執(zhí)行繼續(xù)讀取下一個恢復日志文件的步驟。
[0216]可選地,獲取單元,包括:
[0217]第一讀取子單元,用于依次讀取第一恢復日志文件及與待恢復數(shù)據(jù)標識相對應的第二恢復日志文件;
[0218]比對子單元,用于將當前讀取的恢復日志文件的索引信息依次與預設結(jié)構中的索引信息進行比對;
[0219]比較子單元,用于當預設結(jié)構中存在與當前讀取的恢復日志文件的索引信息相同的索引信息時,比較當前讀取的恢復日志文件的操作時間與預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間;
[0220]添加子單元,用于當預設結(jié)構中存在與當前讀取的恢復日志文件的操作時間相同的對應當前讀取的恢復日志文件的索引信息的操作時間時,將當前讀取的恢復日志文件添加到篩選出的恢復日志文件中;
[0221 ] 第二讀取子單元,用于讀取下一個恢復日志文件;以此類推,直至比對完最后一個恢復日志文件,得到預設結(jié)構中的每個索引信息對應的恢復日志文件。
[0222]可選地,該服務器,還包括:
[0223]第二發(fā)送模塊,用于將篩選出的恢復日志文件發(fā)送給各個從服務器,由各個從服務器根據(jù)篩選出的恢復日志文件對待恢復數(shù)據(jù)進行恢復。
[0224]可選地,該服務器,還包括:
[0225]刪除模塊,用于刪除所有第一恢復日志文件及第二恢復日志文件;
[0226]通知模塊,用于通知各個從服務器刪除所有第一恢復日志文件及第二恢復日志文件。
[0227]本發(fā)明實施例提供的服務器,通過向存儲系統(tǒng)中的各個從服務器發(fā)送日志獲取請求,接收各個從服務器返回的第一恢復日志文件,并根據(jù)所有第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù),從而無需掃描所有數(shù)據(jù),也無需使用元數(shù)據(jù)服務器即可實現(xiàn)恢復數(shù)據(jù),提高了恢復數(shù)據(jù)的效率。
[0228]實施例四
[0229]參見圖6,本發(fā)明實施例提供了 一種恢復數(shù)據(jù)的服務器,該服務器為應用于存儲系統(tǒng)的從服務器,存儲系統(tǒng)包括主服務器和從服務器,主服務器和從服務器均用于存儲相同數(shù)據(jù),主服務器為第一個成功存儲數(shù)據(jù)的服務器,該服務器包括:
[0230]第一接收模塊501,用于接收主服務器發(fā)送的日志獲取請求,日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0231]第一返回模塊502,用于根據(jù)日志獲取請求向主服務器返回第一恢復日志文件,使主服務器根據(jù)第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù);
[0232]第二接收模塊503,用于接收主服務器發(fā)送的篩選出的恢復日志文件;
[0233]恢復模塊504,用于根據(jù)篩選出的恢復日志文件所記錄的操作信息對待恢復數(shù)據(jù)進行操作;
[0234]其中,第一恢復日志文件及第二恢復日志文件均記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
[0235]可選地,該服務器,還包括:
[0236]存儲模塊,用于接收并存儲客戶端發(fā)送的數(shù)據(jù);
[0237]第二返回模塊,用于向客戶端返回包含數(shù)據(jù)的識別標識的第二寫入狀態(tài)信息,第二寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ?br>
[0238]第三接收模塊,用于接收客戶端發(fā)送的總寫入狀態(tài)信息,總寫入狀態(tài)信息包括從服務器向客戶端返回的第二寫入狀態(tài)信息及主服務器向客戶端返回的第一寫入狀態(tài)信息;
[0239]生成模塊,用于當客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息時,確定客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄待恢復數(shù)據(jù)的位置信息及操作信息的第一恢復日志文件。
[0240]可選地,該服務器,還包括:
[0241]第四接收模塊,用于接收主服務器發(fā)送的刪除所有第一恢復日志文件及第二恢復日志文件的通知;
[0242]刪除模塊,用于根據(jù)通知刪除所有第一恢復日志文件及第二恢復日志文件。
[0243]本實施例提供的服務器,通過接收主服務器發(fā)送的日志獲取請求,再根據(jù)日志獲取請求向主服務器返回第一恢復日志文件,使主服務器根據(jù)第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù),從而無需掃描所有數(shù)據(jù),也無需使用元數(shù)據(jù)服務器即可實現(xiàn)恢復數(shù)據(jù),提高了恢復數(shù)據(jù)的效率。
[0244]實施例五
[0245]參見圖7,本發(fā)明實施例提供了一種恢復數(shù)據(jù)的系統(tǒng),該系統(tǒng)包括主服務器701和至少一個從服務器702 ;其中,該主服務器701如上述實施例三提供的恢復數(shù)據(jù)的服務器,該從服務器702如上述實施例四提供的恢復數(shù)據(jù)的服務器,具體詳見上述實施例三和四的內(nèi)容,此處不再贅述。
[0246]本實施例提供的系統(tǒng),通過主服務器向存儲系統(tǒng)中的各個從服務器發(fā)送日志獲取請求,接收各個從服務器返回的第一恢復日志文件,并根據(jù)所有第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù),從而無需掃描所有數(shù)據(jù),也無需使用元數(shù)據(jù)服務器即可實現(xiàn)恢復數(shù)據(jù),提高了恢復數(shù)據(jù)的效率。
[0247]實施例六
[0248]本發(fā)明實施例提供了一種恢復數(shù)據(jù)的服務器,該服務器為應用于存儲系統(tǒng)的主服務器,存儲系統(tǒng)包括主服務器和從服務器,主服務器和從服務器均用于存儲相同數(shù)據(jù),主服務器為第一個成功存儲數(shù)據(jù)的服務器,該服務器包括發(fā)射機、接收機、處理器;[0249]其中,發(fā)射機,用于當存儲系統(tǒng)中的任意一個服務器存儲數(shù)據(jù)失敗時,向存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求,日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0250]接收機,用于接收各個從服務器根據(jù)日志獲取請求返回的第一恢復日志文件,每個第一恢復日志文件記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息;
[0251]處理器,用于根據(jù)所有第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,待恢復數(shù)據(jù)根據(jù)待恢復數(shù)據(jù)的位置信息查找得至IJ,第二恢復日志文件由主服務器生成,且記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
[0252]作為一種可選實施例,處理器,還用于接收并存儲客戶端發(fā)送的數(shù)據(jù);
[0253]發(fā)射機,還用于向客戶端返回包含數(shù)據(jù)的識別標識的第一寫入狀態(tài)信息,第一寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ?br>
[0254]接收機,還用于接收客戶端發(fā)送的總寫入狀態(tài)信息,總寫入狀態(tài)信息包括主服務器向客戶端返回的第一寫入狀態(tài)信息及每個從服務器向客戶端返回的第二寫入狀態(tài)信息;
[0255]處理器,還用于當客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息時,確定數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄待恢復數(shù)據(jù)的位置信息及操作信息的第二恢復日志文件。
[0256]作為一種可選實施例,處理器,用于依次讀取每個第一恢復日志文件及第二恢復日志文件;判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中,索引信息包括恢復日志文件標識、偏移量信息及數(shù)據(jù)長度信息,預設結(jié)構用于存儲索引信息及操作時間;在當前讀取的恢復日志文件的索引信息未在預設結(jié)構中時,將當前讀取的恢復日志文件的索引信息及操作時間添加到預設結(jié)構中;繼續(xù)讀取下一個恢復日志文件;按照處理當前讀取的恢復日志文件的方式處理讀取的下一個恢復日志文件,直至處理完最后一個恢復日志文件,得到存儲有無重復索引信息及操作時間的預設結(jié)構;獲取與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,并將與預設結(jié)構中的索引信息及操作時間對應的恢復日志文件作為篩選出的恢復日志文件,根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作。
[0257]作為一種可選實施例,處理器,還用于在當前讀取的恢復日志文件的索引信息在預設結(jié)構中時,將當前讀取的恢復日志文件的操作時間與預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間進行比較;在當前讀取的恢復日志文件的操作時間晚于預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間時,將當前讀取的恢復日志文件的操作時間替換預設結(jié)構中與當前讀取的恢復日志文件的索引信息相對應的操作時間;執(zhí)行繼續(xù)讀取下一個恢復日志文件的步驟。
[0258]作為一種可選實施例,處理器,用于依次讀取第一恢復日志文件及與待恢復數(shù)據(jù)標識相對應的第二恢復日志文件;將當前讀取的恢復日志文件的索引信息依次與預設結(jié)構中的索引信息進行比對;當預設結(jié)構中存在與當前讀取的恢復日志文件的索引信息相同的索引信息時,比較當前讀取的恢復日志文件的操作時間與預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間;當預設結(jié)構中存在與當前讀取的恢復日志文件的操作時間相同的對應當前讀取的恢復日志文件的索引信息的操作時間時,將當前讀取的恢復日志文件添加到篩選出的恢復日志文件中;讀取下一個恢復日志文件;以此類推,直至比對完最后一個恢復日志文件,得到預設結(jié)構中的每個索引信息對應的恢復日志文件。
[0259]作為一種可選實施例,發(fā)射機,還用于將篩選出的恢復日志文件發(fā)送給各個從服務器,由各個從服務器根據(jù)篩選出的恢復日志文件對待恢復數(shù)據(jù)進行恢復。
[0260]作為一種可選實施例,處理器,還用于刪除所有第一恢復日志文件及第二恢復日志文件;通知各個從服務器刪除所有第一恢復日志文件及第二恢復日志文件。
[0261]本發(fā)明實施例提供的服務器,通過接收存儲系統(tǒng)中的各個從服務器根據(jù)主服務器發(fā)送的日志獲取請求返回的第一恢復日志文件,并根據(jù)所有第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù),從而無需掃描所有數(shù)據(jù),也無需使用元數(shù)據(jù)服務器即可實現(xiàn)恢復數(shù)據(jù),提高了恢復數(shù)據(jù)的效率。
[0262]實施例七
[0263]本發(fā)明實施例提供了一種恢復數(shù)據(jù)的服務器,該服務器為應用于存儲系統(tǒng)的從服務器,存儲系統(tǒng)包括主服務器和從服務器,主服務器和從服務器均用于存儲相同數(shù)據(jù),主服務器為第一個成功存儲數(shù)據(jù)的服務器,該服務器包括發(fā)射機、接收機、處理器;
[0264]其中,接收機用于接收主服務器發(fā)送的日志獲取請求,日志獲取請求中攜帶待恢復數(shù)據(jù)標識;
[0265]發(fā)射機,用于根據(jù)日志獲取請求向主服務器返回第一恢復日志文件,使主服務器根據(jù)第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù);
[0266]接收機,還用于接收主服務器發(fā)送的篩選出的恢復日志文件;
[0267]處理器,用于根據(jù)篩選出的恢復日志文件所記錄的操作信息對待恢復數(shù)據(jù)進行操作;
[0268]其中,每個第一恢復日志文件及第二恢復日志文件均記錄了待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
[0269]作為一種可選實施例,處理器,還用于接收并存儲客戶端發(fā)送的數(shù)據(jù);
[0270]發(fā)射機,還用于向客戶端返回包含數(shù)據(jù)的識別標識的第二寫入狀態(tài)信息,第二寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ?br>
[0271]接收機,還用于接收客戶端發(fā)送的總寫入狀態(tài)信息,總寫入狀態(tài)信息包括從服務器向客戶端返回的第二寫入狀態(tài)信息及主服務器向客戶端返回的第一寫入狀態(tài)信息;
[0272]處理器,還用于當客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息時,確定客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄待恢復數(shù)據(jù)的位置信息及操作信息的第一恢復日志文件。
[0273]作為一種可選實施例,接收機,還用于接收主服務器發(fā)送的刪除所有第一恢復日志文件及第二恢復日志文件的通知;
[0274]處理器,還用于根據(jù)通知刪除所有第一恢復日志文件及第二恢復日志文件。
[0275]本發(fā)明實施例提供的服務器,通過接收主服務器發(fā)送的日志獲取請求,再根據(jù)日志獲取請求向主服務器返回第一恢復日志文件,使主服務器根據(jù)第一恢復日志文件及主服務器生成的第二恢復日志文件恢復待恢復數(shù)據(jù),從而無需掃描所有數(shù)據(jù),也無需使用元數(shù)據(jù)服務器即可實現(xiàn)恢復數(shù)據(jù),提高了恢復數(shù)據(jù)的效率。
[0276]需要說明的是:上述實施例提供的恢復數(shù)據(jù)的服務器在恢復數(shù)據(jù)時,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將服務器的內(nèi)部結(jié)構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的恢復數(shù)據(jù)的服務器與恢復數(shù)據(jù)的方法實施例屬于同一構思,其具體實現(xiàn)過程詳見方法實施例,這里不再贅述。
[0277]上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
[0278]本領域普通技術人員可以理解實現(xiàn)上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
[0279]以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
【權利要求】
1.一種恢復數(shù)據(jù)的方法,其特征在于,所述方法應用于存儲系統(tǒng)的主服務器,所述存儲系統(tǒng)包括主服務器和從服務器,所述主服務器和所述從服務器均用于存儲相同數(shù)據(jù),所述主服務器為第一個成功存儲數(shù)據(jù)的服務器,所述方法包括: 當所述存儲系統(tǒng)中的任意一個服務器存儲數(shù)據(jù)失敗時,所述主服務器向所述存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求,所述日志獲取請求中攜帶待恢復數(shù)據(jù)標識; 接收各個從服務器根據(jù)所述日志獲取請求返回的第一恢復日志文件,每個第一恢復日志文件記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息; 根據(jù)所有所述第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,所述待恢復數(shù)據(jù)根據(jù)所述待恢復數(shù)據(jù)的位置信息查找得到,所述第二恢復日志文件由所述主服務器生成,且記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
2.根據(jù)權利要求1所述的方法,其特征在于,所述向所述存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求之前,還包括: 接收并存儲客戶端發(fā)送的數(shù)據(jù),并向所述客戶端返回包含所述數(shù)據(jù)的識別標識的第一寫入狀態(tài)信息,所述第一寫入狀態(tài)信息為寫入成功信息或?qū)懭胧⌒畔ⅲ? 接收所述客戶端發(fā)送的總寫入狀態(tài)信息,所述總寫入狀態(tài)信息包括所述主服務器向所述客戶端返回的第一寫入狀態(tài)信息及每個從服務器向所述客戶端返回的第二寫入狀態(tài)信息; 如果所述客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息,則確定所述客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄所述待恢復數(shù)據(jù)的位置信息及操作信息的第二恢復日志文件。
3.根據(jù)權利要求1所述的方法,`其特征在于,所述根據(jù)所有所述第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,包括: 依次讀取每個所述第一恢復日志文件及第二恢復日志文件; 判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中,所述索引信息包括恢復日志文件標識、偏移量信息及數(shù)據(jù)長度信息,所述預設結(jié)構用于存儲索引信息及操作時間; 若當前讀取的恢復日志文件的索引信息未在所述預設結(jié)構中,則將當前讀取的恢復日志文件的索引信息及操作時間添加到所述預設結(jié)構中; 繼續(xù)讀取下一個恢復日志文件,按照處理當前讀取的恢復日志文件的方式處理讀取的下一個恢復日志文件,直至處理完最后一個恢復日志文件,得到存儲有無重復索引信息及操作時間的預設結(jié)構; 獲取與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,并將與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件作為篩選出的恢復日志文件,根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作。
4.根據(jù)權利要求3所述的方法,其特征在于,所述判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中之后,還包括: 若當前讀取的恢復日志文件的索引信息在預設結(jié)構中,則將當前讀取的恢復日志文件的操作時間與所述預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間進行比較; 若當前讀取的恢復日志文件的操作時間晚于預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間,則將當前讀取的恢復日志文件的操作時間替換預設結(jié)構中與當前讀取的恢復日志文件的索引信息相對應的操作時間,并執(zhí)行繼續(xù)讀取下一個恢復日志文件的步驟。
5.根據(jù)權利要求3或4所述的方法,其特征在于,所述獲取與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,包括: 依次讀取所述第一恢復日志文件及與所述待恢復數(shù)據(jù)標識相對應的第二恢復日志文件,并將當前讀取的恢復日志文件的索引信息依次與預設結(jié)構中的索引信息進行比對; 若所述預設結(jié)構中存在與當前讀取的恢復日志文件的索引信息相同的索引信息,則t匕較當前讀取的恢復日志文件的操作時間與所述預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間; 若所述預設結(jié)構中存在與當前讀取的恢復日志文件的操作時間相同的對應當前讀取的恢復日志文件的索引信息的操作時間,則將當前讀取的恢復日志文件添加到篩選出的恢復日志文件中,并讀取下一個恢復日志文件; 以此類推,直至比對完最后一個恢復日志文件,得到所述預設結(jié)構中的每個索引信息對應的恢復日志文件。
6.一種恢復數(shù)據(jù)的方法,其特征在于,所述方法應用于存儲系統(tǒng)的主服務器,所述存儲系統(tǒng)包括所述主服務器和從服務器,所述主服務器和所述從服務器均用于存儲相同數(shù)據(jù),所述主服務器為第一個成功存儲數(shù)據(jù)的服務器,所述方法包括: 每個從服務器接收所述主服務器發(fā)送的日志獲取請求,所述日志獲取請求中攜帶待恢復數(shù)據(jù)標識; 根據(jù)所述日志獲取請求向所述主服務器返回第一恢復日志文件,使所述主服務器根據(jù)所述第一恢復日志文件及所述主服務器生成的第二恢復日志文件恢復所述待恢復數(shù)據(jù); 接收所述主服務器發(fā)送的篩選出的恢復日志文件,并根據(jù)所述篩選出的恢復日志文件所記錄的操作信息對待恢復數(shù)據(jù)進行操作; 其中,所述第一恢復日志文件及所述第二恢復日志文件均記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
7.根據(jù)權利要求6所述的方法,其特征在于,所述根據(jù)所述日志獲取請求向所述主服務器返回第一恢復日志文件之前,還包括: 接收并存儲客戶端發(fā)送的數(shù)據(jù),并向所述客戶端返回包含所述數(shù)據(jù)的識別標識的第二寫入狀態(tài)信息,所述第二寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ? 接收所述客戶端發(fā)送的總寫入狀態(tài)信息,所述總寫入狀態(tài)信息包括所述從服務器向所述客戶端返回的第二寫入狀態(tài)信息及所述主服務器向所述客戶端返回的第一寫入狀態(tài)信息; 如果所述客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息,則確定所述客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄所述待恢復數(shù)據(jù)的位置信息及操作信息的第一恢復日志文件。
8.一種恢復數(shù)據(jù)的服務器,其特征在于,所述服務器為應用于存儲系統(tǒng)的主服務器,所述存儲系統(tǒng)包括所述主服務器和從服務器,所述主服務器和所述從服務器均用于存儲相同數(shù)據(jù),所述主服務器為第一個成功存儲數(shù)據(jù)的服務器,所述服務器包括:第一發(fā)送模塊,用于當所述存儲系統(tǒng)中的任意一個服務器存儲數(shù)據(jù)失敗時,向所述存儲系統(tǒng)中的每個從服務器發(fā)送日志獲取請求,所述日志獲取請求中攜帶待恢復數(shù)據(jù)標識;第一接收模塊,用于接收各個從服務器根據(jù)所述日志獲取請求返回的第一恢復日志文件,每個第一恢復日志文件記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息; 恢復模塊,用于根據(jù)所有所述第一恢復日志文件及第二恢復日志文件所記錄的操作信息中的最新操作信息對待恢復數(shù)據(jù)進行操作,所述待恢復數(shù)據(jù)根據(jù)所述待恢復數(shù)據(jù)的位置信息查找得到,所述第二恢復日志文件由所述主服務器生成,且記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
9.根據(jù)權利要求8所述的服務器,其特征在于,所述服務器,還包括: 存儲模塊,用于接收并存儲客戶端發(fā)送的數(shù)據(jù); 返回模塊,用于向所述客戶端返回包含所述數(shù)據(jù)的識別標識的第一寫入狀態(tài)信息,所述第一寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ? 第二接收模塊,用于接收所述客戶端發(fā)送的總寫入狀態(tài)信息,所述總寫入狀態(tài)信息包括所述主服務器向所述客戶端返回的第一寫入狀態(tài)信息及每個從服務器向所述客戶端返回的第二寫入狀態(tài)信息; 生成模塊,用于當所述客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息時,確定所述客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄所述待恢復數(shù)據(jù)的位置信息及操作信息的第二恢復日志文件。
10.根據(jù)權利要求8所述的服務器,其特征在于,所述恢復模塊,包括: 第一讀取單元,用于依次讀取每個所述第一恢復日志文件及第二恢復日志文件; 判斷單元,用于判斷當前讀取的恢復日志文件的索引信息是否在預設結(jié)構中,所述索引信息包括恢復日志文件標識、偏移量信息及數(shù)據(jù)長度信息,所述預設結(jié)構用于存儲索引信息及操作時間; 添加單元,用于在當前讀取的恢復日志文件的索引信息未在所述預設結(jié)構中時,將當前讀取的恢復日志文件的索引信息及操作時間添加到所述預設結(jié)構中; 第二讀取單元,用于繼續(xù)讀取下一個恢復日志文件; 處理單元,用于按照處理當前讀取的恢復日志文件的方式處理讀取的下一個恢復日志文件,直至處理完最后一個恢復日志文件,得到存儲有無重復索引信息及操作時間的預設結(jié)構; 獲取單元,用于獲取與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件,并將與所述預設結(jié)構中的索引信息及操作時間對應的恢復日志文件作為篩選出的恢復日志文件; 恢復單元,用于根據(jù)篩選出的恢復日志文件中的操作信息對待恢復數(shù)據(jù)進行操作。
11.根據(jù)權利要求10所述的服務器,其特征在于,所述恢復模塊,還包括: 比較單元,用于在當前讀取的恢復日志文件的索引信息在預設結(jié)構中時,將當前讀取的恢復日志文件的操作時間與所述預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間進行比較; 替換單元,用于在當前讀取的恢復日志文件的操作時間晚于預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間時,將當前讀取的恢復日志文件的操作時間替換預設結(jié)構中與當前讀取的恢復日志文件的索引信息相對應的操作時間; 所述第二讀取單元,還用于執(zhí)行繼續(xù)讀取下一個恢復日志文件的步驟。
12.根據(jù)權利要求10或11所述的服務器,其特征在于,所述獲取單元,包括: 第一讀取子單元,用于依次讀取所述第一恢復日志文件及與所述待恢復數(shù)據(jù)標識相對應的第二恢復日志文 件; 比對子單元,用于將當前讀取的恢復日志文件的索引信息依次與預設結(jié)構中的索引信息進行比對; 比較子單元,用于當所述預設結(jié)構中存在與當前讀取的恢復日志文件的索引信息相同的索引信息時,比較當前讀取的恢復日志文件的操作時間與所述預設結(jié)構中對應當前讀取的恢復日志文件的索引信息的操作時間; 添加子單元,用于當所述預設結(jié)構中存在與當前讀取的恢復日志文件的操作時間相同的對應當前讀取的恢復日志文件的索引信息的操作時間時,將當前讀取的恢復日志文件添加到篩選出的恢復日志文件中; 第二讀取子單元,用于讀取下一個恢復日志文件;以此類推,直至比對完最后一個恢復日志文件,得到所述預設結(jié)構中的每個索引信息對應的恢復日志文件。
13.一種恢復數(shù)據(jù)的服務器,其特征在于,所述服務器為應用于存儲系統(tǒng)的從服務器,所述存儲系統(tǒng)包括主服務器和所述從服務器,所述主服務器和所述從服務器均用于存儲相同數(shù)據(jù),所述主服務器為第一個成功存儲數(shù)據(jù)的服務器,所述服務器包括: 第一接收模塊,用于接收所述主服務器發(fā)送的日志獲取請求,所述日志獲取請求中攜帶待恢復數(shù)據(jù)標識; 第一返回模塊,用于根據(jù)所述日志獲取請求向所述主服務器返回第一恢復日志文件,使所述主服務器根據(jù)所述第一恢復日志文件及所述主服務器生成的第二恢復日志文件恢復所述待恢復數(shù)據(jù); 第二接收模塊,用于接收所述主服務器發(fā)送的篩選出的恢復日志文件; 恢復模塊,用于根據(jù)所述篩選出的恢復日志文件所記錄的操作信息對待恢復數(shù)據(jù)進行操作; 其中,所述第一恢復日志文件及所述第二恢復日志文件均記錄了所述待恢復數(shù)據(jù)標識所標識的待恢復數(shù)據(jù)的位置信息及操作信息。
14.根據(jù)權利要求13所述的服務器,其特征在于,所述服務器,還包括: 存儲模塊,用于接收并存儲客戶端發(fā)送的數(shù)據(jù); 第二返回模塊,用于向所述客戶端返回包含所述數(shù)據(jù)的識別標識的第二寫入狀態(tài)信息,所述第二寫入狀態(tài)信息包括寫入成功信息或?qū)懭胧⌒畔ⅲ? 第三接收模塊,用于接收所述客戶端發(fā)送的總寫入狀態(tài)信息,所述總寫入狀態(tài)信息包括所述從服務器向所述客戶端返回的第二寫入狀態(tài)信息及所述主服務器向所述客戶端返回的第一寫入狀態(tài)信息; 生成模塊,用于當所述客戶端發(fā)送的總寫入狀態(tài)信息中包含寫入失敗信息時,確定所述客戶端發(fā)送的數(shù)據(jù)為待恢復數(shù)據(jù),并生成記錄所述待恢復數(shù)據(jù)的位置信息及操作信息的第一‘陜復日志文件。
15.一種恢復數(shù)據(jù)的系統(tǒng),其特征在于,所述系統(tǒng)包括:主服務器和至少一個從服務器; 其中,所述主服務器如所述權利要求8至12中任一項權利要求所述的服務器,所述從服務器如所述權利要求13至14中任一項權利要求所述的服務器。
【文檔編號】G06F17/30GK103761161SQ201310754520
【公開日】2014年4月30日 申請日期:2013年12月31日 優(yōu)先權日:2013年12月31日
【發(fā)明者】郝志敏, 李紅 申請人:華為技術有限公司