本技術(shù)涉及服務(wù)器故障,特別涉及一種服務(wù)器故障恢復(fù)方法、nfs服務(wù)端及系統(tǒng)。
背景技術(shù):
1、隨著信息技術(shù)的迅速發(fā)展,企業(yè)數(shù)據(jù)量呈現(xiàn)爆炸式增長(zhǎng)趨勢(shì),尤其在大規(guī)模分布式系統(tǒng)和云計(jì)算環(huán)境中,這一現(xiàn)象尤為顯著。在這種背景下,nfs(network?file?system,網(wǎng)絡(luò)文件系統(tǒng))作為一種廣泛應(yīng)用的文件共享協(xié)議,因其支持跨平臺(tái)文件訪問和高效的數(shù)據(jù)共享能力,成為企業(yè)內(nèi)部和跨企業(yè)數(shù)據(jù)交換的核心工具。然而,隨著企業(yè)對(duì)于系統(tǒng)穩(wěn)定性和數(shù)據(jù)一致性要求的提高,傳統(tǒng)nfs服務(wù)器在面對(duì)硬件故障、軟件崩潰、計(jì)劃性維護(hù)等情況下的服務(wù)恢復(fù)能力面臨著嚴(yán)峻挑戰(zhàn)。
2、目前,傳統(tǒng)nfs服務(wù)恢復(fù)策略通常依賴于一種基于時(shí)間等待機(jī)制的簡(jiǎn)單方法,即在服務(wù)器發(fā)生故障并重新啟動(dòng)后,設(shè)置一定的時(shí)間窗口以期望客戶端能夠在此期間重新建立連接并恢復(fù)其之前的操作狀態(tài)。然而,這種恢復(fù)策略在實(shí)際應(yīng)用中暴露出了多種缺陷。首先,該方法未能有效管理并發(fā)訪問,當(dāng)多個(gè)客戶端同時(shí)嘗試重新連接時(shí),可能會(huì)導(dǎo)致數(shù)據(jù)沖突和訪問競(jìng)爭(zhēng)問題。其次,傳統(tǒng)的恢復(fù)機(jī)制缺乏對(duì)客戶端狀態(tài)的精細(xì)化管理,容易導(dǎo)致資源鎖定或狀態(tài)不一致等問題,從而影響系統(tǒng)的整體性能和數(shù)據(jù)可靠性。最后,這種被動(dòng)依賴客戶端行為的恢復(fù)方式,無(wú)法主動(dòng)加速恢復(fù)進(jìn)程,往往導(dǎo)致業(yè)務(wù)中斷時(shí)間較長(zhǎng),影響企業(yè)的正常運(yùn)營(yíng)。因此,亟需一種更加智能化和高效的nfs服務(wù)恢復(fù)方法。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)提供一種服務(wù)器故障恢復(fù)方法、nfs服務(wù)端及系統(tǒng),以至少部分解決上述問題。
2、第一方面,本技術(shù)提供了一種服務(wù)器故障恢復(fù)方法應(yīng)用于nfs服務(wù)端,包括:
3、在所述nfs服務(wù)端重啟時(shí),加載至少一個(gè)客戶端的客戶端信息,針對(duì)每一個(gè)所述客戶端,執(zhí)行:
4、當(dāng)接收到所述客戶端的訪問請(qǐng)求時(shí),為所述客戶端創(chuàng)建客戶端id;
5、根據(jù)加載的所述客戶端信息和所述客戶端id,為該客戶端設(shè)置重申標(biāo)記,其中,所述重申標(biāo)記用于表明所述客戶端被允許進(jìn)行重申操作;
6、將所述客戶端id發(fā)送給所述客戶端,觸發(fā)所述客戶端與所述nfs服務(wù)端建立會(huì)話連接;
7、當(dāng)所述客戶端與所述nfs服務(wù)端建立會(huì)話連接后,根據(jù)所述重申標(biāo)記,恢復(fù)所述客戶端在所述nfs服務(wù)端重啟之前已打開的資源的打開狀態(tài);
8、基于所述打開狀態(tài),恢復(fù)所述客戶端在所述nfs服務(wù)端重啟之前對(duì)所述資源的鎖定狀態(tài);
9、基于所述打開狀態(tài)和所述鎖定狀態(tài),更新所述至少一個(gè)客戶端的客戶端信息和對(duì)應(yīng)的所述重申標(biāo)記。
10、在一個(gè)實(shí)施例中,當(dāng)接收到所述客戶端的訪問請(qǐng)求時(shí),在所述為所述客戶端創(chuàng)建客戶端id之前,進(jìn)一步包括:
11、確定所述訪問請(qǐng)求是否為心跳信號(hào);
12、若是,執(zhí)行所述為所述客戶端創(chuàng)建客戶端id;
13、若不是,向所述客戶端發(fā)送反饋信息,其中,所述反饋信息用于表明所述nfs客戶端處于重啟階段且拒絕非重申請(qǐng)求。
14、在一個(gè)實(shí)施例中,當(dāng)所述訪問請(qǐng)求為心跳信號(hào)時(shí),在所述為所述客戶端創(chuàng)建客戶端id之前,進(jìn)一步包括:
15、確認(rèn)是否完成更新所述至少一個(gè)客戶端的客戶端信息和對(duì)應(yīng)的所述重申標(biāo)記;
16、若是,向所述客戶端發(fā)送用于表示nfs服務(wù)端與所述客戶端連接正常的確認(rèn)信號(hào);
17、若不是,執(zhí)行所述為所述客戶端創(chuàng)建客戶端id。
18、在一個(gè)實(shí)施例中,當(dāng)所述訪問請(qǐng)求為心跳信號(hào)時(shí),所述為所述客戶端創(chuàng)建客戶端id,包括:
19、向所述客戶端發(fā)送表示當(dāng)前會(huì)話無(wú)效的狀態(tài)碼;
20、當(dāng)接收到所述客戶端根據(jù)所述狀態(tài)碼發(fā)送的重新建立會(huì)話請(qǐng)求時(shí),向所述客戶端發(fā)送用于表示所述重新建立會(huì)話請(qǐng)求中的客戶端id無(wú)效的錯(cuò)誤碼;
21、當(dāng)接收到所述客戶端根據(jù)所述錯(cuò)誤碼發(fā)送的變更客戶端id請(qǐng)求時(shí),基于所述變更客戶端id請(qǐng)求中的信息,為所述客戶端創(chuàng)建對(duì)應(yīng)的客戶端id。
22、在一個(gè)實(shí)施例中,所述基于所述打開狀態(tài)和所述鎖定狀態(tài),更新所述至少一個(gè)客戶端的客戶端信息和對(duì)應(yīng)的所述重申標(biāo)記,包括:
23、向所述客戶端發(fā)送用于表示所述鎖定狀態(tài)恢復(fù)完畢的確認(rèn)信息;
24、當(dāng)接收到所述客戶端根據(jù)所述確認(rèn)信息發(fā)送的用于表示重申?duì)顟B(tài)已完成的重申完成請(qǐng)求時(shí),向所述客戶端發(fā)送狀態(tài)恢復(fù)通知,其中,所述狀態(tài)恢復(fù)通知用于指示資源的打開狀態(tài)和鎖定狀態(tài)已恢復(fù);
25、將所述客戶端的重申標(biāo)記的當(dāng)前狀態(tài)設(shè)置為狀態(tài)重申完畢;
26、根據(jù)狀態(tài)重申完畢的客戶端和當(dāng)前時(shí)間點(diǎn),更新所述至少一個(gè)客戶端的客戶端信息。
27、在一個(gè)實(shí)施例中,所述根據(jù)狀態(tài)重申完畢的客戶端和當(dāng)前時(shí)間點(diǎn),更新所述至少一個(gè)客戶端的客戶端信息,包括:
28、按照預(yù)設(shè)的檢測(cè)周期,確定加載的各個(gè)所述客戶端的重申標(biāo)記的當(dāng)前狀態(tài)是否均為狀態(tài)重申完畢;
29、若是,執(zhí)行預(yù)設(shè)的后臺(tái)任務(wù);
30、若不是,確定當(dāng)前時(shí)間點(diǎn)與所述nfs服務(wù)端重啟時(shí)的時(shí)間點(diǎn)的時(shí)間差,是否大于或等于預(yù)設(shè)的故障恢復(fù)時(shí)長(zhǎng),若是,刪除所述至少一個(gè)客戶端中未被標(biāo)記狀態(tài)重申完畢的客戶端的客戶端信息,并執(zhí)行預(yù)設(shè)的后臺(tái)任務(wù)。
31、在一個(gè)實(shí)施例中,所述根據(jù)所述重申標(biāo)記,恢復(fù)所述客戶端在所述nfs服務(wù)端重啟之前已打開的資源的打開狀態(tài),包括:
32、向所述客戶端發(fā)送狀態(tài)重申信號(hào),其中,所述狀態(tài)重申信號(hào)用于指示所述客戶端重申其在所述nfs服務(wù)端重啟之前訪問的資源的打開狀態(tài);
33、當(dāng)接收到所述客戶端根據(jù)所述狀態(tài)重申信號(hào)發(fā)送的恢復(fù)打開狀態(tài)請(qǐng)求時(shí),確定加載的所述客戶端信息中是否存在所述恢復(fù)打開狀態(tài)請(qǐng)求中的客戶端id;
34、當(dāng)加載的所述客戶端信息中存在所述恢復(fù)打開狀態(tài)請(qǐng)求中的客戶端id,且所述客戶端已被設(shè)置重申標(biāo)記時(shí),恢復(fù)所述客戶端對(duì)所述資源在所述nfs服務(wù)端重啟之前的打開狀態(tài)。
35、在一個(gè)實(shí)施例中,在所述根據(jù)所述重申標(biāo)記,恢復(fù)所述客戶端在所述nfs服務(wù)端重啟之前已打開的資源的打開狀態(tài)之后,在所述基于所述打開狀態(tài),恢復(fù)所述客戶端在所述nfs服務(wù)端重啟之前對(duì)所述資源的鎖定狀態(tài)之前,進(jìn)一步包括:
36、將已恢復(fù)打開狀態(tài)的所述客戶端的重申標(biāo)記的當(dāng)前狀態(tài)設(shè)置為恢復(fù)打開狀態(tài);
37、創(chuàng)建與已恢復(fù)打開狀態(tài)的所述資源相對(duì)應(yīng)的狀態(tài)id,將所述狀態(tài)id發(fā)送給所述客戶端,以使所述客戶端根據(jù)所述狀態(tài)id恢復(fù)所述資源的鎖定狀態(tài);
38、所述基于所述打開狀態(tài),恢復(fù)所述客戶端在所述nfs服務(wù)端重啟之前對(duì)所述資源的鎖定狀態(tài),包括:
39、當(dāng)接收到所述客戶端根據(jù)所述狀態(tài)id發(fā)送的鎖定狀態(tài)請(qǐng)求時(shí),確認(rèn)所述恢復(fù)打開狀態(tài)請(qǐng)求中的客戶端id與被設(shè)置重申標(biāo)記的客戶端的客戶端id是否相同;
40、若相同,確認(rèn)所述客戶端id對(duì)應(yīng)的重申標(biāo)記的當(dāng)前狀態(tài)是否為恢復(fù)打開狀態(tài);
41、若是,恢復(fù)所述資源在所述nfs服務(wù)端重啟之前的鎖定狀態(tài)。
42、在一個(gè)實(shí)施例中,所述根據(jù)加載的所述客戶端信息和所述客戶端id,為該客戶端設(shè)置重申標(biāo)記,包括:
43、確定加載的所述客戶端信息中,是否存在所述客戶端id;
44、若有,為所述客戶端設(shè)置重申標(biāo)記;
45、若沒有,將創(chuàng)建的所述客戶端id作為所述客戶端的客戶端信息并存儲(chǔ),并為所述客戶端設(shè)置重申標(biāo)記。
46、在一個(gè)實(shí)施例中,所述加載至少一個(gè)客戶端的客戶端信息,包括:
47、清空內(nèi)存中的信息;
48、設(shè)定數(shù)據(jù)結(jié)構(gòu)的初始化狀態(tài);
49、將持久化存儲(chǔ)中的至少一個(gè)客戶端的客戶端信息存儲(chǔ)至設(shè)定后的所述數(shù)據(jù)結(jié)構(gòu)中;
50、將加載客戶端信息后的所述數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)至內(nèi)存中。
51、第二方面,本技術(shù)提供了一種nfs服務(wù)端,包括:
52、信息加載模塊,用于在所述nfs服務(wù)端重啟時(shí),加載至少一個(gè)客戶端的客戶端信息;
53、標(biāo)記處理模塊,用于針對(duì)每一個(gè)所述客戶端,當(dāng)接收到所述客戶端的訪問請(qǐng)求時(shí),為所述客戶端創(chuàng)建客戶端id;根據(jù)所述信息加載模塊加載的所述客戶端信息和所述客戶端id,為該客戶端設(shè)置重申標(biāo)記,其中,所述重申標(biāo)記用于表明所述客戶端被允許進(jìn)行重申操作;
54、會(huì)話連接模塊,用于將所述標(biāo)記處理模塊創(chuàng)建的所述客戶端id發(fā)送給所述客戶端,觸發(fā)所述客戶端與所述nfs服務(wù)端建立會(huì)話連接;
55、重申處理模塊,用于當(dāng)所述客戶端與所述nfs服務(wù)端建立所述會(huì)話連接模塊觸發(fā)的會(huì)話連接后,根據(jù)所述標(biāo)記處理模塊設(shè)置的所述重申標(biāo)記,恢復(fù)所述客戶端在所述nfs服務(wù)端重啟之前已打開的資源的打開狀態(tài);基于所述打開狀態(tài),恢復(fù)所述客戶端在所述nfs服務(wù)端重啟之前對(duì)所述資源的鎖定狀態(tài);
56、信息更新模塊,用于基于所述重申處理模塊恢復(fù)的所述打開狀態(tài)和所述鎖定狀態(tài),更新所述信息加載模塊加載的所述至少一個(gè)客戶端的客戶端信息和對(duì)應(yīng)的所述標(biāo)記處理模塊設(shè)置的所述重申標(biāo)記。
57、第三方面,本技術(shù)提供了一種故障恢復(fù)系統(tǒng),包括:nfs服務(wù)端和至少一個(gè)客戶端;
58、所述nfs服務(wù)端,用于在重啟時(shí),加載至少一個(gè)客戶端的客戶端信息;
59、所述客戶端,用于向所述nfs服務(wù)端發(fā)送訪問請(qǐng)求;
60、所述nfs服務(wù)端,用于當(dāng)接收到所述客戶端的訪問請(qǐng)求時(shí),為所述客戶端創(chuàng)建客戶端id;根據(jù)加載的所述客戶端信息和所述客戶端id,為該客戶端設(shè)置重申標(biāo)記,其中,所述重申標(biāo)記用于表明所述客戶端被允許進(jìn)行重申操作;將所述客戶端id發(fā)送給所述客戶端,觸發(fā)所述客戶端與所述nfs服務(wù)端建立會(huì)話連接;當(dāng)所述客戶端與所述nfs服務(wù)端建立會(huì)話連接后,根據(jù)所述重申標(biāo)記,恢復(fù)所述客戶端在所述nfs服務(wù)端重啟之前已打開的資源的打開狀態(tài);基于所述打開狀態(tài),恢復(fù)所述客戶端在所述nfs服務(wù)端重啟之前對(duì)所述資源的鎖定狀態(tài);基于所述打開狀態(tài)和所述鎖定狀態(tài),更新所述至少一個(gè)客戶端的客戶端信息和對(duì)應(yīng)的所述重申標(biāo)記。
61、第四方面,本技術(shù)提供了一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序/指令,其中,該計(jì)算機(jī)程序/指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)第一方面中任一項(xiàng)所述的方法步驟。
62、第五方面,本技術(shù)提供了一種計(jì)算機(jī)存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,該程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)第一方面中任一所述的方法。
63、本技術(shù)實(shí)施例提供了一種服務(wù)器故障恢復(fù)方法、nfs服務(wù)端及系統(tǒng),在nfs服務(wù)端重啟后接收到客戶端訪問請(qǐng)求時(shí),為該客戶端創(chuàng)建客戶端id。由于每個(gè)客戶端id是唯一的標(biāo)識(shí)碼,可以有效防止非法客戶端接入,也有助于管理客戶端。通過設(shè)置重申標(biāo)記,可以明確表示哪些客戶端被允許進(jìn)行重申操作,從而確保只有合法、可靠的客戶端能夠重新建立會(huì)話,避免未授權(quán)訪問。重申標(biāo)記也有助于跟蹤客戶端的狀態(tài),便于在nfs服務(wù)端重啟后恢復(fù)其相應(yīng)的訪問狀態(tài)。將客戶端id發(fā)送給客戶端,可以為后續(xù)通信建立明確的標(biāo)識(shí)基礎(chǔ),確保通信的可靠性和一致性。通過恢復(fù)資源的打開狀態(tài),確保了客戶端在nfs服務(wù)端重啟前和重啟后的操作狀態(tài)的一致性,防止因狀態(tài)差異導(dǎo)致的操作中斷和錯(cuò)誤。通過恢復(fù)資源的鎖定狀態(tài),確??蛻舳嗽趎fs服務(wù)端重啟前后對(duì)資源操作的唯一性,防止并發(fā)操作沖突?;谫Y源的打開狀態(tài)和鎖定狀態(tài)更新客戶端信息和重申標(biāo)記,確保nfs服務(wù)端中記錄的客戶端狀態(tài)和操作權(quán)限是最新的,有效維護(hù)了狀態(tài)的實(shí)時(shí)性和準(zhǔn)確性,動(dòng)態(tài)更新機(jī)制簡(jiǎn)化了系統(tǒng)對(duì)客戶端狀態(tài)的維護(hù)和管理。綜上,本技術(shù)可以快速、高效、安全地恢復(fù)客戶端的操作狀態(tài),保障nfs服務(wù)端服務(wù)的連續(xù)性和用戶的良好體驗(yàn)。