一種存儲(chǔ)系統(tǒng)的索引數(shù)據(jù)修復(fù)方法和存儲(chǔ)系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,尤其涉及一種存儲(chǔ)系統(tǒng)的索引數(shù)據(jù)修復(fù)方法和存儲(chǔ)系統(tǒng)。
【背景技術(shù)】
[0002]大型分布式存儲(chǔ)系統(tǒng)應(yīng)用在安防行業(yè)中時(shí),由于安防行業(yè)固有的周期長存儲(chǔ)容量大,監(jiān)控錄像時(shí)時(shí)以穩(wěn)定的高壓力碼流連續(xù)寫入到存儲(chǔ)系統(tǒng)中,因此要求存儲(chǔ)系統(tǒng)服務(wù)不可中斷。
[0003]但是,存儲(chǔ)系統(tǒng)在長期運(yùn)行過程中,總會(huì)在寫入/讀出的過程中出現(xiàn)諸如網(wǎng)絡(luò)中斷、數(shù)據(jù)位翻轉(zhuǎn)、斷電、磁盤故障、程序異常退出等異常問題。當(dāng)出現(xiàn)這些問題時(shí),數(shù)據(jù)節(jié)點(diǎn)中的數(shù)據(jù)塊存儲(chǔ)信息并不能總是和存儲(chǔ)服務(wù)器的索引數(shù)據(jù)中記載的數(shù)據(jù)塊存儲(chǔ)信息保持一致。當(dāng)出現(xiàn)不一致的情況時(shí),就會(huì)導(dǎo)致在讀取時(shí)數(shù)據(jù)讀取失敗,以及因?yàn)椴荒芗皶r(shí)感知到使得本該能通過冗余數(shù)據(jù)進(jìn)行恢復(fù)的數(shù)據(jù)塊無法恢復(fù),或者數(shù)據(jù)塊存儲(chǔ)的位置信息記載錯(cuò)誤導(dǎo)致有些數(shù)據(jù)節(jié)點(diǎn)內(nèi)部存儲(chǔ)了臟數(shù)據(jù)。
[0004]為解決該問題,目前常見的實(shí)現(xiàn)方式是通過讓數(shù)據(jù)節(jié)點(diǎn)在隨機(jī)的時(shí)間點(diǎn)觸發(fā)全盤掃描,并在完成掃描之后向元數(shù)據(jù)進(jìn)行匯報(bào),以此進(jìn)行對(duì)存儲(chǔ)服務(wù)器中的索引數(shù)據(jù)進(jìn)行校正,所述索引數(shù)據(jù)包含每一數(shù)據(jù)節(jié)點(diǎn)鏡像中的數(shù)據(jù)塊存儲(chǔ)信息。但是在安防監(jiān)控行業(yè),每時(shí)每刻都會(huì)從前端攝像頭等監(jiān)控設(shè)備拉取數(shù)據(jù)流寫入到存儲(chǔ)系統(tǒng)中,且存儲(chǔ)系統(tǒng)中的數(shù)據(jù)節(jié)點(diǎn)使用的都是高密度存儲(chǔ)設(shè)備。這也意味著每臺(tái)數(shù)據(jù)節(jié)點(diǎn)的每塊磁盤都在提供讀寫能力,由于所有數(shù)據(jù)節(jié)點(diǎn)是在隨機(jī)時(shí)刻觸發(fā)該動(dòng)作,那也就意味著各個(gè)數(shù)據(jù)節(jié)點(diǎn)之間沒有一個(gè)統(tǒng)一的調(diào)度器進(jìn)行調(diào)度哪些數(shù)據(jù)節(jié)點(diǎn)該先做、哪些數(shù)據(jù)節(jié)點(diǎn)該后做;幾十甚至上百臺(tái)數(shù)據(jù)節(jié)點(diǎn)在同一時(shí)間段內(nèi)執(zhí)行匯報(bào)任務(wù),每臺(tái)數(shù)據(jù)節(jié)點(diǎn)匯報(bào)幾百萬乃至千萬條的數(shù)據(jù)塊存儲(chǔ)信息,最終會(huì)導(dǎo)致存儲(chǔ)服務(wù)器壓力突然增大,使得存儲(chǔ)服務(wù)器在瞬間出現(xiàn)僵死而無法對(duì)外提供服務(wù)。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例提供了一種存儲(chǔ)系統(tǒng)的索引數(shù)據(jù)修復(fù)方法和存儲(chǔ)系統(tǒng),用于解決現(xiàn)有技術(shù)中因在全盤掃描時(shí)各數(shù)據(jù)節(jié)點(diǎn)無序執(zhí)行掃描任務(wù)所導(dǎo)致的服務(wù)器壓力過大的問題。
[0006]本發(fā)明實(shí)施例提供了一種存儲(chǔ)系統(tǒng)的索引數(shù)據(jù)修復(fù)方法,所述方法包括:
[0007]所述存儲(chǔ)系統(tǒng)中的服務(wù)器獲取與自身建立連接的、該存儲(chǔ)系統(tǒng)中的各數(shù)據(jù)節(jié)點(diǎn)的1負(fù)載;
[0008]所述服務(wù)器生成分別與每一數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的、包含所述數(shù)據(jù)節(jié)點(diǎn)的標(biāo)識(shí)信息的任務(wù)指令,并優(yōu)先將所述任務(wù)指令發(fā)送給1負(fù)載較小的數(shù)據(jù)節(jié)點(diǎn),以使得接收到所述任務(wù)指令的數(shù)據(jù)節(jié)點(diǎn)根據(jù)所述任務(wù)指令掃描并上報(bào)與該數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)塊存儲(chǔ)信息;
[0009]接收所述數(shù)據(jù)節(jié)點(diǎn)上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息,并將所述上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息與索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息進(jìn)行比較;
[0010]當(dāng)所述上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息與索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息存在差異時(shí),更新所述索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息。
[0011]本發(fā)明實(shí)施例提供的方法中,根據(jù)獲取的數(shù)據(jù)節(jié)點(diǎn)的1負(fù)載,然后服務(wù)器優(yōu)先所述任務(wù)指令發(fā)送給1負(fù)載較小的數(shù)據(jù)節(jié)點(diǎn),以使得所述數(shù)據(jù)節(jié)點(diǎn)根據(jù)所述任務(wù)指令掃描并上報(bào)與該數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)塊存儲(chǔ)信息;接收所述數(shù)據(jù)節(jié)點(diǎn)上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息,并將所述上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息與索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息進(jìn)行比較;當(dāng)所述上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息與索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息存在差異時(shí),更新所述索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息。本發(fā)明中通過對(duì)數(shù)據(jù)按照其1負(fù)載大小進(jìn)行排序,然后在使得數(shù)據(jù)節(jié)點(diǎn)根據(jù)該排序依次執(zhí)行掃描任務(wù),減小全盤掃描給服務(wù)器造成的壓力,避免出現(xiàn)現(xiàn)有技術(shù)中因無序的全盤掃描所導(dǎo)致的服務(wù)器壓力過大而僵死的問題。此外,由于1負(fù)載較小的數(shù)據(jù)節(jié)點(diǎn)壓力小、掃描運(yùn)行速度更快,對(duì)服務(wù)器造成的壓力也較小,因此服務(wù)器先調(diào)用1負(fù)載較小的數(shù)據(jù)節(jié)點(diǎn)執(zhí)行掃描任務(wù)時(shí),可進(jìn)一步減緩服務(wù)器上的壓力,使服務(wù)器運(yùn)行更加穩(wěn)定。
[0012]較佳的,所述服務(wù)器獲取與自身建立連接的、該存儲(chǔ)系統(tǒng)中的各數(shù)據(jù)節(jié)點(diǎn)的1負(fù)載,包括:
[0013]服務(wù)器周期性獲取與自身建立連接的、該存儲(chǔ)系統(tǒng)中的各數(shù)據(jù)節(jié)點(diǎn)的1負(fù)載。
[0014]較佳的,在將任務(wù)指令發(fā)送給所述數(shù)據(jù)節(jié)點(diǎn)之前,所述方法還包括:生成用于阻止為所述數(shù)據(jù)節(jié)點(diǎn)分配寫入任務(wù)的攔截指令并發(fā)送給所述服務(wù)器的負(fù)載均衡器,以使得所述負(fù)載均衡器根據(jù)所述攔截指令在預(yù)設(shè)的攔截時(shí)間長度內(nèi)攔截所有針對(duì)該數(shù)據(jù)節(jié)點(diǎn)的訪問請(qǐng)求。
[0015]較佳的,所述更新所述索引中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息,包括:
[0016]將所述數(shù)據(jù)節(jié)點(diǎn)上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息中新增的數(shù)據(jù)塊存儲(chǔ)信息添加到所述索引數(shù)據(jù)中,刪除所述索引數(shù)據(jù)中多余的數(shù)據(jù)塊存儲(chǔ)信息,以及對(duì)存在差異的數(shù)據(jù)塊存儲(chǔ)信息進(jìn)行更新;其中,所述多余的數(shù)據(jù)塊存儲(chǔ)信息為所述上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息中沒有的、但存在于所述索引數(shù)據(jù)中的數(shù)據(jù)塊存儲(chǔ)信息。
[0017]較佳的,所述方法還包括:根據(jù)獲取的所述各數(shù)據(jù)節(jié)點(diǎn)的1負(fù)載確定任務(wù)指令的下發(fā)時(shí)延,以使得服務(wù)器根據(jù)所述下發(fā)時(shí)延下發(fā)任務(wù)指令。
[0018]較佳的,所述方法還包括:
[0019]服務(wù)器根據(jù)所述數(shù)據(jù)節(jié)點(diǎn)的任務(wù)執(zhí)行時(shí)間和預(yù)設(shè)執(zhí)行時(shí)間,判斷所述數(shù)據(jù)節(jié)點(diǎn)的任務(wù)執(zhí)行時(shí)間是否超時(shí);其中,所述任務(wù)執(zhí)行時(shí)間是指所述數(shù)據(jù)節(jié)點(diǎn)根據(jù)所述任務(wù)指令進(jìn)行掃描并上報(bào)數(shù)據(jù)塊存儲(chǔ)信息的時(shí)間;若所述數(shù)據(jù)節(jié)點(diǎn)的任務(wù)執(zhí)行時(shí)間大于預(yù)設(shè)執(zhí)行時(shí)間長度時(shí),則判定所述數(shù)據(jù)節(jié)點(diǎn)的任務(wù)執(zhí)行時(shí)間超時(shí);
[0020]當(dāng)所述指定數(shù)據(jù)節(jié)點(diǎn)的任務(wù)執(zhí)行時(shí)間超時(shí),所述服務(wù)器向所述數(shù)據(jù)節(jié)點(diǎn)發(fā)送任務(wù)終止指令,使該數(shù)據(jù)節(jié)點(diǎn)終止掃描并上報(bào)數(shù)據(jù)塊存儲(chǔ)信息的任務(wù)。
[0021]基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供了一種存儲(chǔ)系統(tǒng),所述存儲(chǔ)系統(tǒng)包括存儲(chǔ)服務(wù)器,所述服務(wù)器包括:
[0022]服務(wù)模塊,用于獲取與自身建立連接的、該存儲(chǔ)系統(tǒng)中的各數(shù)據(jù)節(jié)點(diǎn)的1負(fù)載;
[0023]調(diào)度模塊,用于生成分別與每一數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的、包含所述數(shù)據(jù)節(jié)點(diǎn)的標(biāo)識(shí)信息的任務(wù)指令,并優(yōu)先將所述任務(wù)指令發(fā)送給1負(fù)載較小的數(shù)據(jù)節(jié)點(diǎn),以使得接收到所述任務(wù)指令的數(shù)據(jù)節(jié)點(diǎn)根據(jù)所述任務(wù)指令掃描并上報(bào)與該數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)塊存儲(chǔ)信息;
[0024]存儲(chǔ)模塊,用于接收所述數(shù)據(jù)節(jié)點(diǎn)上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息,并將所述上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息與索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息進(jìn)行比較;當(dāng)所述上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息與索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息存在差異時(shí),更新所述索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息。
[0025]本發(fā)明實(shí)施例提供的服務(wù)器中,通過服務(wù)模塊獲取與自身建立連接的、該存儲(chǔ)系統(tǒng)中的各數(shù)據(jù)節(jié)點(diǎn)的1負(fù)載,然后再通過調(diào)度模塊生成分別與每一數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的、包含所述數(shù)據(jù)節(jié)點(diǎn)的標(biāo)識(shí)信息的任務(wù)指令,并優(yōu)先將所述任務(wù)指令發(fā)送給1負(fù)載較小的數(shù)據(jù)節(jié)點(diǎn),以使得接收到所述任務(wù)指令的數(shù)據(jù)節(jié)點(diǎn)根據(jù)所述任務(wù)指令掃描并上報(bào)與該數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)塊存儲(chǔ)信息;然后再通過存儲(chǔ)模塊接收所述數(shù)據(jù)節(jié)點(diǎn)上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息,并將所述上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息與索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息進(jìn)行比較;當(dāng)所述上報(bào)的數(shù)據(jù)塊存儲(chǔ)信息與索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息存在差異時(shí),更新所述索引數(shù)據(jù)中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息。本發(fā)明中服務(wù)器通過對(duì)數(shù)據(jù)按照其1負(fù)載大小進(jìn)行排序,然后在使得數(shù)據(jù)節(jié)點(diǎn)根據(jù)該排序依次執(zhí)行掃描任務(wù),減小全盤掃描給服務(wù)器造成的壓力,避免出現(xiàn)現(xiàn)有技術(shù)中因無序的全盤掃描所導(dǎo)致的服務(wù)器壓力過大而僵死的問題。此外,由于1負(fù)載較小的數(shù)據(jù)節(jié)點(diǎn)壓力小、掃描運(yùn)行速度更快,對(duì)服務(wù)器造成的壓力也較小,因此服務(wù)器先調(diào)用1負(fù)載較小的數(shù)據(jù)節(jié)點(diǎn)執(zhí)行掃描任務(wù)時(shí),可進(jìn)一步減緩服務(wù)器上的壓力,使服務(wù)器運(yùn)行更加穩(wěn)定。
[0026]較佳的,所述服務(wù)模塊具體用于:周期性獲取與自身建立連接的、該存儲(chǔ)系統(tǒng)中的各數(shù)據(jù)節(jié)點(diǎn)的1負(fù)載。
[0027]較佳的,所述調(diào)度模塊還用于:在將任務(wù)指令發(fā)送給所述數(shù)據(jù)節(jié)點(diǎn)之前,生成用于阻止為所述數(shù)據(jù)節(jié)點(diǎn)分配寫入任務(wù)的攔截指令并發(fā)送給所述服務(wù)器的負(fù)載均衡器,以使得所述負(fù)載均衡器根據(jù)所述攔截指令在預(yù)設(shè)的攔截時(shí)間長度內(nèi)攔截所有針對(duì)該數(shù)據(jù)節(jié)點(diǎn)的訪問請(qǐng)求。
[0028]較佳的,在執(zhí)行更新所述索引中的該數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)塊存儲(chǔ)信息的步驟時(shí),所述存儲(chǔ)模塊具體用于: