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