磁盤容錯(cuò)方法、裝置及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種磁盤容錯(cuò)方法、裝置及系統(tǒng),屬于計(jì)算機(jī)領(lǐng)域。所述方法包括:接收訪問文件請求;獲取文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,每個(gè)節(jié)點(diǎn)列表包括至少兩個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)中包括的相互對應(yīng)的磁盤存儲相同的內(nèi)容;從獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn)中訪問文件包括的數(shù)據(jù)塊;當(dāng)從某個(gè)節(jié)點(diǎn)中訪問失敗,則在節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他的一個(gè)節(jié)點(diǎn),根據(jù)文件的標(biāo)識從選擇的節(jié)點(diǎn)中訪問文件包括的數(shù)據(jù)塊。本發(fā)明通過結(jié)合雙機(jī)雙工的優(yōu)勢提出結(jié)對存儲技術(shù),將完全獨(dú)立的多臺機(jī)器從節(jié)點(diǎn)到磁盤進(jìn)行對等互備,解決了大規(guī)模分布式存儲系統(tǒng)中的數(shù)據(jù)讀寫故障、磁盤故障及單節(jié)點(diǎn)故障等問題,保證在任何場景下的數(shù)據(jù)可靠性,提高了磁盤利用率及讀寫性能。
【專利說明】磁盤容錯(cuò)方法、裝置及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別涉及一種磁盤容錯(cuò)方法、裝置及系統(tǒng)。
【背景技術(shù)】
[0002]磁盤容錯(cuò)是指當(dāng)磁盤系統(tǒng)出現(xiàn)數(shù)據(jù)、文件損壞或丟失時(shí),磁盤系統(tǒng)能夠自動(dòng)將這些損壞或丟失的文件和數(shù)據(jù)恢復(fù)到發(fā)生事故之前的狀態(tài),使系統(tǒng)能夠連續(xù)正常運(yùn)行的技術(shù)。
[0003]現(xiàn)有技術(shù)中,磁盤容錯(cuò)一般采用RAID,其利用多塊磁盤并通過某種校驗(yàn)機(jī)制來確保數(shù)據(jù)可靠性,按照實(shí)現(xiàn)方式和容錯(cuò)性能不同分為0-7多種類型,其中最出名的為RAIDl和RAID5。現(xiàn)有技術(shù)一,RAIDl將兩塊磁盤互為主從備份,數(shù)據(jù)寫入時(shí)同時(shí)寫入到兩塊磁盤,數(shù)據(jù)訪問時(shí)候首先從主磁盤訪問,訪問失敗后,再從備份磁盤訪問。這種技術(shù)實(shí)現(xiàn)簡單,提供很高數(shù)據(jù)可用性,而且磁盤主磁盤離線后,可以直接從備份磁盤恢復(fù),不會影響性能?,F(xiàn)有技術(shù)二,RAID5將磁盤和數(shù)據(jù)條帶化,數(shù)據(jù)讀寫同時(shí)對多個(gè)磁盤進(jìn)行,并且奇偶檢驗(yàn)塊離散分布于各個(gè)磁盤中,只要有一塊磁盤損壞,可以根據(jù)其他磁盤的信息進(jìn)行恢復(fù)。這種技術(shù)對于N塊盤的陣列而言,磁盤空間利用率能到達(dá)(N-1)/N。
[0004]在實(shí)現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:
[0005]對于RAID1,由于兩塊磁盤同一時(shí)刻只有一塊磁盤提供服務(wù),磁盤利用率只有50%。而RAID5寫性能非常差,每次寫入需要首先訪問舊數(shù)據(jù)、舊奇偶校驗(yàn)數(shù)據(jù),然后寫入新數(shù)據(jù)、生成奇偶校驗(yàn)數(shù)據(jù)并寫入,而且實(shí)現(xiàn)復(fù)雜性比較高,RAID控制器、RAID元數(shù)據(jù)信息問題可能成為整個(gè)系統(tǒng)的瓶頸,并且對多塊磁盤同時(shí)存儲、機(jī)器掉電、宕機(jī)等系統(tǒng)故障無能為力。
【發(fā)明內(nèi)容】
[0006]為了提高磁盤利用率及讀寫性能,本發(fā)明實(shí)施例提供了一種磁盤容錯(cuò)方法、裝置及系統(tǒng)。所述技術(shù)方案如下:
[0007]—方面,提供了一種磁盤容錯(cuò)方法,所述方法包括:
[0008]接收訪問文件請求,所述訪問文件請求中攜帶文件的標(biāo)識;
[0009]根據(jù)預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系和所述文件的標(biāo)識,獲取所述文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,所述節(jié)點(diǎn)列表包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括多個(gè)磁盤,所述每個(gè)節(jié)點(diǎn)包括的磁盤一一對應(yīng),在所述每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤存儲相同的內(nèi)容;
[0010]從所述獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn),根據(jù)所述文件的標(biāo)識從所述每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊;
[0011]當(dāng)從某個(gè)節(jié)點(diǎn)中訪問失敗,則在所述節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他的一個(gè)節(jié)點(diǎn),根據(jù)所述文件的標(biāo)識從所述選擇的節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊。
[0012]另一方面,本發(fā)明提供了一種磁盤容錯(cuò)裝置,所述裝置包括:
[0013]接收模塊,用于接收訪問文件請求,所述訪問文件請求中攜帶文件的標(biāo)識;[0014]第一獲取模塊,用于根據(jù)預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系和所述文件的標(biāo)識,獲取所述文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,所述節(jié)點(diǎn)列表包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括多個(gè)磁盤,所述每個(gè)節(jié)點(diǎn)包括的磁盤一一對應(yīng),在所述每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤存儲相同的內(nèi)容;
[0015]訪問模塊,用于從所述獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn),根據(jù)所述文件的標(biāo)識從所述每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊;
[0016]容錯(cuò)模塊,用于當(dāng)從某個(gè)節(jié)點(diǎn)中訪問失敗,則在所述節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他的一個(gè)節(jié)點(diǎn),根據(jù)所述文件的標(biāo)識從所述選擇的節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊。
[0017]又一方面,本發(fā)明提供了一種磁盤容錯(cuò)系統(tǒng),所述系統(tǒng)包括客戶端、存儲服務(wù)器集群和管理服務(wù)器;
[0018]所述客戶端,用于向所述管理服務(wù)器發(fā)送訪問文件請求,所述訪問文件請求中攜帶文件的標(biāo)識;
[0019]所述存儲服務(wù)器集群,包括多個(gè)存儲服務(wù)器組,每個(gè)存儲服務(wù)器組包括至少兩個(gè)存儲服務(wù)器,每個(gè)存儲服務(wù)器包括多個(gè)磁盤,所述每個(gè)存儲服務(wù)器包括的磁盤一一對應(yīng),在所述每個(gè)存儲服務(wù)器中相互對應(yīng)的磁盤存儲相同的內(nèi)容;
[0020]所述管理服務(wù)器,用于接收訪問文件請求;根據(jù)預(yù)存的文件的標(biāo)識與存儲服務(wù)器組的對應(yīng)關(guān)系和所述文件的標(biāo)識,獲取所述文件對應(yīng)的多個(gè)存儲服務(wù)器組;從所述獲取的每個(gè)存儲服務(wù)器組中分別選擇一個(gè)存儲服務(wù)器,根據(jù)所述文件的標(biāo)識從所述每個(gè)存儲服務(wù)器組選擇的一個(gè)存儲服務(wù)器中訪問所述文件包括的數(shù)據(jù)塊;當(dāng)從某個(gè)存儲服務(wù)器訪問失敗,則在所述存儲服務(wù)器所在的存儲服務(wù)器組中選擇其他的一個(gè)存儲服務(wù)器,根據(jù)所述文件的標(biāo)識從所述選擇的存儲服務(wù)器中訪問所述文件包括的數(shù)據(jù)塊。
[0021]本發(fā)明實(shí)施例提供的技術(shù)方案帶來的有益效果是:
[0022]通過結(jié)合雙機(jī)雙工的優(yōu)勢提出結(jié)對存儲技術(shù),將完全獨(dú)立的多臺機(jī)器從節(jié)點(diǎn)到磁盤進(jìn)行對等互備,解決了大規(guī)模分布式存儲系統(tǒng)中的數(shù)據(jù)讀寫故障、磁盤故障及單節(jié)點(diǎn)故障等問題,保證在任何場景下的數(shù)據(jù)可靠性,提高了磁盤利用率及讀寫性能。
【專利附圖】
【附圖說明】
[0023]為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0024]圖1是本發(fā)明實(shí)施例1提供的磁盤容錯(cuò)方法流程圖;
[0025]圖2是本發(fā)明實(shí)施例2提供的磁盤容錯(cuò)方法流程圖;
[0026]圖3是本發(fā)明實(shí)施例2提供的結(jié)對存儲的節(jié)點(diǎn)結(jié)構(gòu)示意圖;
[0027]圖4是本發(fā)明實(shí)施例2提供的結(jié)對存儲的磁盤結(jié)構(gòu)示意圖;
[0028]圖5是本發(fā)明實(shí)施例3提供的磁盤容錯(cuò)方法流程圖;
[0029]圖6是本發(fā)明實(shí)施例3提供的結(jié)對存儲的數(shù)據(jù)塊結(jié)構(gòu)示意圖;
[0030]圖7是本發(fā)明實(shí)施例4提供的磁盤容錯(cuò)裝置結(jié)構(gòu)示意圖;
[0031]圖8是本發(fā)明實(shí)施例4提供的磁盤容錯(cuò)裝置的另一結(jié)構(gòu)示意圖;[0032]圖9是本發(fā)明實(shí)施例5提供的磁盤容錯(cuò)系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0033]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
[0034]實(shí)施例1
[0035]參見圖1,本發(fā)明實(shí)施例提供了一種磁盤容錯(cuò)方法,所述方法包括:
[0036]101:接收訪問文件請求,訪問文件請求中攜帶文件的標(biāo)識;
[0037]102:根據(jù)預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系和文件的標(biāo)識,獲取文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,每個(gè)節(jié)點(diǎn)列表包括至少兩個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括多個(gè)磁盤,每個(gè)節(jié)點(diǎn)包括的磁盤一一對應(yīng),在每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤存儲相同的內(nèi)容;
[0038]103:從獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn),根據(jù)文件的標(biāo)識從每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中訪問文件包括的數(shù)據(jù)塊;
[0039]104:當(dāng)從某個(gè)節(jié)點(diǎn)中訪問失敗,則在節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他的一個(gè)節(jié)點(diǎn),根據(jù)文件的標(biāo)識從選擇的節(jié)點(diǎn)中訪問文件包括的數(shù)據(jù)塊。
[0040]本發(fā)明實(shí)施例提供的方法,通過結(jié)合雙機(jī)雙工的優(yōu)勢提出結(jié)對存儲技術(shù),將完全獨(dú)立的多臺機(jī)器從節(jié)點(diǎn)到磁盤進(jìn)行對等互備,解決了大規(guī)模分布式存儲系統(tǒng)中的數(shù)據(jù)讀寫故障、磁盤故障及單節(jié)點(diǎn)故障等問題,保證在任何場景下的數(shù)據(jù)可靠性,提高了磁盤利用率及讀寫性能。
[0041]實(shí)施例2
[0042]本發(fā)明在系統(tǒng)層次對數(shù)據(jù)安全性采用雙機(jī)雙工進(jìn)行保護(hù),雙機(jī)雙工是指兩臺機(jī)器均對外提供相同的服務(wù),具有互為備份和負(fù)載均衡,當(dāng)一臺機(jī)器出現(xiàn)故障后,能及時(shí)切換流量到對等機(jī)中。
[0043]參見圖2,本發(fā)明實(shí)施例基于提供了一種磁盤容錯(cuò)方法,該方法包括:
[0044]201:接收客戶端發(fā)送的寫文件請求,該寫文件請求中攜帶待寫入的文件;
[0045]具體地,本發(fā)明實(shí)施例應(yīng)用于分布式存儲系統(tǒng),該分布式存儲系統(tǒng)可以為TFS(Tencent File System,騰訊自研海量分布式存儲系統(tǒng))。
[0046]其中,本實(shí)施例的執(zhí)行主語為管理節(jié)點(diǎn)chxmaster,參見圖3,本發(fā)明實(shí)施例中一個(gè)管理節(jié)點(diǎn)chxmaster包括多個(gè)chxd_pair, chxd_pair是指節(jié)點(diǎn)列表,每個(gè)節(jié)點(diǎn)列表包括至少兩個(gè)節(jié)點(diǎn)chxd_server,本實(shí)施例中的節(jié)點(diǎn)是指存儲服務(wù)器。其中,chxmaster負(fù)責(zé)對各個(gè)節(jié)點(diǎn)列表包括的各個(gè)節(jié)點(diǎn)中存儲的數(shù)據(jù)信息進(jìn)行維護(hù),chxmaster中存儲了每個(gè)節(jié)點(diǎn)列表與文件的標(biāo)識的對應(yīng)關(guān)系,chxd_server負(fù)責(zé)實(shí)際數(shù)據(jù)的落地存儲,一個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)chxd_server存儲相同的內(nèi)容,各chxd_server同時(shí)對外提供服務(wù)且具有負(fù)載均衡功能。
[0047]另外,為了保證服務(wù)的可靠性,消除管理節(jié)點(diǎn)的故障瓶頸,本發(fā)明實(shí)施例的磁盤容錯(cuò)系統(tǒng)還包括備份管理節(jié)點(diǎn)salve_chxmaster,用于當(dāng)管理節(jié)點(diǎn)chxmaster發(fā)生故障時(shí),在備份管理節(jié)點(diǎn)上完成訪問文件操作和/或?qū)懳募僮?。其中,備份管理?jié)點(diǎn)與管理節(jié)點(diǎn)的結(jié)構(gòu)完全相同。
[0048]本實(shí)施例中,為了保證每個(gè)節(jié)點(diǎn)列表中的中所有節(jié)點(diǎn)存儲的數(shù)據(jù)完全一樣,每個(gè)節(jié)點(diǎn)包括一一對應(yīng)的磁盤,在每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤存儲相同的內(nèi)容,這樣不會造成磁盤空間的浪費(fèi)。參見圖4,第一節(jié)點(diǎn)Chxd_l包括若干個(gè)磁盤:第一磁盤sdb、第二磁盤
sdc、第三磁盤sdd、第四磁盤sde......第i磁盤sdl,第二節(jié)點(diǎn)chxd_2包括相互對應(yīng)的同樣
數(shù)目的磁盤:sdb、sdc、sdd、sde......sdl,且第一節(jié)點(diǎn)chxd_l與第二節(jié)點(diǎn)chxd_2相互對應(yīng)
的磁盤存儲相同的內(nèi)容,也就是說,邏輯上的一塊磁盤數(shù)據(jù)同時(shí)存儲在各chxd節(jié)點(diǎn)的對應(yīng)物理磁盤中,比如第一節(jié)點(diǎn)chxd_l上的sdl盤存儲的數(shù)據(jù)和chxd_2上的sdl盤存儲的數(shù)據(jù)完全一樣的,如第一節(jié)點(diǎn)chxd_l的sdb磁盤上存儲sdb_data,第二節(jié)點(diǎn)chxd_2的sdb磁
盤上也存儲sdb_data,同理,chxd_l節(jié)點(diǎn)的sdc磁盤、sdd磁盤、sde磁盤......sdl磁盤,分
別與chxd_2節(jié)點(diǎn)的sdc磁盤、sdd磁盤、sde磁盤......sdl磁盤上存儲的內(nèi)容相同,分別為:
第一數(shù)據(jù)sdb_data、第二數(shù)據(jù)sdc_data、第三數(shù)據(jù)sdd_data、第四數(shù)據(jù)sde_data......第i
數(shù)據(jù) sdl_data。
[0049]實(shí)際應(yīng)用中,待寫入的文件中一般包括文件的標(biāo)識、大小、內(nèi)容和類型等信息。
[0050]202:根據(jù)待寫入的文 件的標(biāo)識,從自身獲取待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表;
[0051]對于該步驟,管理節(jié)點(diǎn)中預(yù)存了文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系,可以在接收到客戶端發(fā)送的寫文件請求后,根據(jù)該文件信息的大小、類別等屬性信息實(shí)時(shí)為待寫入的文件分配存儲位置,即為待寫入的文件分配多個(gè)節(jié)點(diǎn)列表,獲取該待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,以將待寫入的文件寫入該多個(gè)節(jié)點(diǎn)列表包括的節(jié)點(diǎn)中的磁盤上。管理節(jié)點(diǎn)為待寫入的文件分配多個(gè)節(jié)點(diǎn)列表后,存儲文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系。
[0052]203:根據(jù)獲取的多個(gè)節(jié)點(diǎn)列表,將待寫入的文件劃分成多個(gè)數(shù)據(jù)塊,且劃分的數(shù)據(jù)塊與節(jié)點(diǎn)列表對應(yīng);
[0053]實(shí)際應(yīng)用中,管理節(jié)點(diǎn)獲取到多個(gè)節(jié)點(diǎn)列表,該待寫入的文件要寫入到該多個(gè)節(jié)點(diǎn)列表中時(shí),將待寫入的文件劃分為多個(gè)數(shù)據(jù)塊,劃分的數(shù)據(jù)塊與獲取的節(jié)點(diǎn)列表一一對應(yīng),也就是說劃分的數(shù)據(jù)塊的數(shù)目與獲取的節(jié)點(diǎn)列表的數(shù)目相同,并將待寫入的文件劃分的多個(gè)數(shù)據(jù)塊分別寫入到對應(yīng)的節(jié)點(diǎn)列表中。例如,管理節(jié)點(diǎn)根據(jù)待寫入的文件獲取N個(gè)節(jié)點(diǎn)列表:第一節(jié)點(diǎn)列表、第二節(jié)點(diǎn)列表……第N節(jié)點(diǎn)列表時(shí),根據(jù)獲取的N個(gè)節(jié)點(diǎn)列表將待寫入的文件分為N個(gè)數(shù)據(jù)塊:第一數(shù)據(jù)塊、第二數(shù)據(jù)塊……第N數(shù)據(jù)塊,以便于將待寫入的文件劃分的N個(gè)數(shù)據(jù)塊分別寫入到對應(yīng)的N個(gè)節(jié)點(diǎn)列表中,具體為:將第一數(shù)據(jù)塊寫入到第一節(jié)點(diǎn)列表中,將第二數(shù)據(jù)塊寫入第二節(jié)點(diǎn)列表中……將第N數(shù)據(jù)塊寫入第N節(jié)點(diǎn)列表中。
[0054]204:在每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,對該待寫入的文件執(zhí)行寫操作;
[0055]具體地,節(jié)點(diǎn)列表中的每個(gè)節(jié)點(diǎn)包括多個(gè)磁盤,每個(gè)磁盤對應(yīng)一個(gè)磁盤的標(biāo)識,本發(fā)明實(shí)施例可以在節(jié)點(diǎn)中預(yù)存文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系,也可以由管理節(jié)點(diǎn)為待寫入的文件分配節(jié)點(diǎn)列表時(shí),對分配的每個(gè)節(jié)點(diǎn)列表分配每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中存儲文件的磁盤的標(biāo)識后,在管理節(jié)點(diǎn)中存儲文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系。
[0056]在每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,對待寫入的文件執(zhí)行寫操作,具體為,在每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,確定出用于存儲該待寫入的文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,將待寫入的文件包括的數(shù)據(jù)塊寫入對應(yīng)的磁盤中。本實(shí)施例中,確定出用于存儲該待寫入的文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,可以為根據(jù)節(jié)點(diǎn)中預(yù)存的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系,獲取待與入的文件對應(yīng)的磁盤的標(biāo)識;也可以為由管理節(jié)點(diǎn)為待與入的文件分配磁盤的標(biāo)識,獲取待寫入的文件對應(yīng)的磁盤的標(biāo)識,從而將該待寫入的文件存儲到該磁盤的標(biāo)識對應(yīng)的磁盤中。
[0057]本實(shí)施例中,由于節(jié)點(diǎn)列表chxd_pair中包括的每個(gè)節(jié)點(diǎn)chxd_server均提供服務(wù)且具有負(fù)載均衡功能,節(jié)點(diǎn)列表中的各個(gè)節(jié)點(diǎn)之間為對等關(guān)系,與入待與入的文件時(shí),對該待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表中的每個(gè)節(jié)點(diǎn)均執(zhí)行寫操作。例如,第一節(jié)點(diǎn)列表
包括m個(gè)節(jié)點(diǎn):chxd_serverl、chxd_server2......chxd_serverm,當(dāng)將待寫入文件的第一
數(shù)據(jù)塊寫入第一節(jié)點(diǎn)列表中的節(jié)點(diǎn)chxd_serverl時(shí),可以同時(shí)將該寫操作更新到chxd_
server2......chxd_serverm,也就是說,將待寫入文件的第一數(shù)據(jù)塊同時(shí)寫入第一節(jié)點(diǎn)列表
中的其他節(jié)點(diǎn)chxd_server2......chxd_serverm中,由于不同節(jié)點(diǎn)的操作是獨(dú)立的,不會對
系統(tǒng)效率造成影響。
[0058]實(shí)際應(yīng)用中,從管理節(jié)點(diǎn)中獲取待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,將待寫入的文件分為多個(gè)數(shù)據(jù)塊,并在一個(gè)節(jié)點(diǎn)列表的節(jié)點(diǎn)上寫入一個(gè)數(shù)據(jù)塊,如,獲取N個(gè)節(jié)點(diǎn)列表,每個(gè)節(jié)點(diǎn)列表中包括m個(gè)節(jié)點(diǎn),將待寫入的文件分為N個(gè)數(shù)據(jù)塊,寫入待寫入的文件時(shí),根據(jù)獲取的第一節(jié)點(diǎn)列表中的節(jié)點(diǎn)中的磁盤的標(biāo)識,將待寫入文件的第一數(shù)據(jù)塊寫入第一節(jié)點(diǎn)列表的m個(gè)節(jié)點(diǎn)的磁盤中,將待寫入文件的第二數(shù)據(jù)塊寫入第二節(jié)點(diǎn)列表的m個(gè)節(jié)點(diǎn)的磁盤中,也就是說在不同節(jié)點(diǎn)列表的節(jié)點(diǎn)上并發(fā)執(zhí)行對待寫入的文件的不同數(shù)據(jù)塊的寫操作,同一節(jié)點(diǎn)列表的所有節(jié)點(diǎn)上并發(fā)執(zhí)行對待寫入的文件的相同數(shù)據(jù)塊的寫操作,使得每個(gè)節(jié)點(diǎn)列表的所有節(jié)點(diǎn)上均寫入一個(gè)數(shù)據(jù)塊。
[0059]另外,本實(shí)施例中,確定出用于存儲待寫入的文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識之后,還根據(jù)待寫入的文件的標(biāo)識和存儲該待寫入的文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,生成文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系,并將待寫入文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系存儲在管理節(jié)點(diǎn)中。由于管理節(jié)點(diǎn)中預(yù)存了文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系,此時(shí)管理節(jié)點(diǎn)中存儲了文件的標(biāo)識、節(jié)點(diǎn)列表與磁盤的標(biāo)識之間的對應(yīng)關(guān)系。
[0060]205:接收客戶端發(fā)送的讀文件請求,該讀文件請求中攜帶文件的標(biāo)識;
[0061]其中,訪問文件請求中攜帶的文件的標(biāo)識具體為文件名或文件屬性等,本發(fā)明對此不作限定。
[0062]206:根據(jù)預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系和文件的標(biāo)識,獲取該文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表;
[0063]當(dāng)客戶端client發(fā)起讀文件請求時(shí),chxmaster根據(jù)該文件的標(biāo)識,從預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系中獲取該文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,每個(gè)節(jié)點(diǎn)列表包括至少兩個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括多個(gè)磁盤,每個(gè)節(jié)點(diǎn)包括的磁盤一一對應(yīng),在每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤存儲相同的內(nèi)容。其中,管理節(jié)點(diǎn)預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系中,節(jié)點(diǎn)列表信息包括ip、port、devid、fid等,根據(jù)節(jié)點(diǎn)列表信息能夠獲得該文件在哪些節(jié)點(diǎn)上。ip是指節(jié)點(diǎn)的ip地址,用于確定出數(shù)據(jù)存儲的chxd_server節(jié)點(diǎn),port是指節(jié)點(diǎn)的具體服務(wù)進(jìn)程,用于確定該節(jié)點(diǎn)上用以提供數(shù)據(jù)訪問上的具體服務(wù)進(jìn)程,devid用以確定文件所在的數(shù)據(jù)塊位置,fid用以確定文件所在的時(shí)間存儲區(qū)間。根據(jù)ip和port能確定具體的chxd_server,根據(jù)devid和fid能確定文件具體的存儲位置。
[0064]207:從獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn),根據(jù)文件的標(biāo)識從每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中讀取該文件包括的數(shù)據(jù)塊;[0065]對于該步驟,獲取到文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表時(shí),對于每個(gè)節(jié)點(diǎn)列表,從該節(jié)點(diǎn)列表中選擇一個(gè)節(jié)點(diǎn)讀取該文件包括的數(shù)據(jù)塊,在該文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表均選擇一個(gè)節(jié)點(diǎn)讀取該文件包括的數(shù)據(jù)塊,可以訪問該節(jié)點(diǎn)列表中的任一節(jié)點(diǎn),本實(shí)施例對具體訪問該節(jié)點(diǎn)列表中的哪個(gè)節(jié)點(diǎn)不做限定。
[0066]其中,根據(jù)文件的標(biāo)識從每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中讀取該文件包括的數(shù)據(jù)塊,具體包括:
[0067]由于管理節(jié)點(diǎn)中存儲了節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系,根據(jù)文件的標(biāo)識,從該對應(yīng)關(guān)系中獲取存儲該文件的磁盤的標(biāo)識,從而根據(jù)該文件的標(biāo)識和存儲該文件的磁盤的標(biāo)識,從節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中讀取該文件包括的數(shù)據(jù)塊。
[0068]208:當(dāng)從某個(gè)節(jié)點(diǎn)中讀取失敗,則在該節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他的一個(gè)節(jié)點(diǎn),根據(jù)該文件的標(biāo)識從選擇的節(jié)點(diǎn)中讀取文件包括的數(shù)據(jù)塊。
[0069]本實(shí)施例中,每個(gè)節(jié)點(diǎn)列表中所有節(jié)點(diǎn)存儲的數(shù)據(jù)完全一樣,每個(gè)節(jié)點(diǎn)由相同塊磁盤組成,且每塊磁盤的大小相等,邏輯上的一塊磁盤數(shù)據(jù)同時(shí)存儲在各節(jié)點(diǎn)chxd_server的對應(yīng)物理磁盤中,這樣當(dāng)從任何一個(gè)機(jī)器上讀取失敗時(shí),會在該節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他一個(gè)節(jié)點(diǎn)進(jìn)行繼續(xù)讀取,此時(shí)根據(jù)文件的標(biāo)識從選擇的節(jié)點(diǎn)中讀取文件包括的數(shù)據(jù)塊。比如,chxd_l節(jié)點(diǎn)上的sdl盤數(shù)據(jù)和chxd_2上的sdl盤數(shù)據(jù)時(shí)完全一樣的,當(dāng)在chxd_l節(jié)點(diǎn)的sdl盤上讀取sdl_data數(shù)據(jù)失敗時(shí),選擇chxd_2上的sdl盤繼續(xù)讀取sdl_data數(shù)據(jù)。
[0070]實(shí)際應(yīng)用中,若任何一個(gè)機(jī)器上的一塊磁盤離線后,運(yùn)維人員會收到報(bào)警,由該機(jī)器所在的節(jié)點(diǎn)列表chxd_pair中的另一臺機(jī)器chxd_server能接管該服務(wù),及時(shí)將數(shù)據(jù)遷移到別的節(jié)點(diǎn)列表中,以保證數(shù)據(jù)的高可靠性,避免數(shù)據(jù)丟失。
[0071]其中,本發(fā)明實(shí)施例解決了由于磁盤級的故障造成業(yè)務(wù)層數(shù)據(jù)無法正常訪問的問題,當(dāng)對節(jié)點(diǎn)列表的一個(gè)節(jié)點(diǎn)中的磁盤訪問失敗時(shí),則將該訪問文件請求發(fā)送給該節(jié)點(diǎn)列表中的其他節(jié)點(diǎn)的對應(yīng)磁盤,由其他節(jié)點(diǎn)完成文件訪問操作,達(dá)到了當(dāng)某一節(jié)點(diǎn)的磁盤發(fā)生故障,不影響業(yè)務(wù)層數(shù)據(jù)訪問的技術(shù)效果。
[0072]本發(fā)明實(shí)施例提供的并發(fā)訪問操作,實(shí)現(xiàn)了對同一文件數(shù)據(jù)的讀訪問請求可以在不同節(jié)點(diǎn)的磁盤上并發(fā)處理,當(dāng)選擇了節(jié)點(diǎn)列表中的一個(gè)節(jié)點(diǎn)進(jìn)行訪問時(shí),可以同時(shí)選擇另一節(jié)點(diǎn)列表中的一個(gè)節(jié)點(diǎn)進(jìn)行并發(fā)訪問,由于不同節(jié)點(diǎn)的操作是獨(dú)立的,不會對系統(tǒng)效率造成影響。
[0073]本發(fā)明實(shí)施例提供的方法,通過結(jié)合雙機(jī)雙工的優(yōu)勢提出結(jié)對存儲技術(shù),將完全獨(dú)立的多臺機(jī)器從節(jié)點(diǎn)到磁盤進(jìn)行對等互備,解決了大規(guī)模分布式存儲系統(tǒng)中的數(shù)據(jù)讀寫故障、磁盤故障及單節(jié)點(diǎn)故障等問題,保證在任何場景下的數(shù)據(jù)可靠性,提高了磁盤利用率及讀寫性能;同時(shí)通過互備機(jī)器同時(shí)對外提供服務(wù),提高了數(shù)據(jù)讀寫吞吐率,提高系統(tǒng)服務(wù)效率。
[0074]實(shí)施例3
[0075]本發(fā)明在上述磁盤級別的數(shù)據(jù)冗余的基礎(chǔ)上,可以進(jìn)一步細(xì)化粒度,實(shí)現(xiàn)數(shù)據(jù)塊級別的數(shù)據(jù)冗余。目前,基于TFS的大規(guī)模分布式系統(tǒng)由上萬臺機(jī)器組成,每臺機(jī)器大致由11塊磁盤組成,一塊磁盤大約750G到2T大小,海量數(shù)據(jù)使得數(shù)據(jù)讀寫異常成為常態(tài),如果發(fā)生數(shù)據(jù)讀寫異常,就以磁盤為單位進(jìn)行數(shù)據(jù)遷移,一方面會嚴(yán)重的影響系統(tǒng)服務(wù)效率,另一方面會造成大量硬件開銷。數(shù)據(jù)塊級別的冗余可以解決上述問題。
[0076]參見圖5,本發(fā)明實(shí)施例提供了一種磁盤容錯(cuò)方法,所述方法包括:
[0077]301:接收客戶端發(fā)送的寫文件請求,該寫文件請求中攜帶待寫入的文件;
[0078]具體地,本發(fā)明實(shí)施例應(yīng)用于分布式存儲系統(tǒng),該分布式存儲系統(tǒng)可以為TFS(Tencent File System,騰訊自研海量分布式存儲系統(tǒng))。
[0079]其中,待寫入的文件中一般包括文件的標(biāo)識、大小、內(nèi)容和類型等信息。該步驟與上述實(shí)施例2中的步驟201相同,此處不再贅述。
[0080]302:根據(jù)待寫入的文件的標(biāo)識,從自身獲取待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表;
[0081]對于該步驟,管理節(jié)點(diǎn)中預(yù)存了文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系,可以在接收到客戶端發(fā)送的寫文件請求后,根據(jù)該文件信息的大小、類別等屬性信息實(shí)時(shí)為待寫入的文件分配存儲位置,即為待寫入的文件分配多個(gè)節(jié)點(diǎn)列表,獲取該待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,以將待寫入的文件寫入該多個(gè)節(jié)點(diǎn)列表包括的節(jié)點(diǎn)中的磁盤上。管理節(jié)點(diǎn)為待寫入的文件分配多個(gè)節(jié)點(diǎn)列表后,存儲文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系。
[0082]303:根據(jù)獲取的多個(gè)節(jié)點(diǎn)列表,將待寫入的文件劃分成多個(gè)數(shù)據(jù)塊,且劃分的數(shù)據(jù)塊與節(jié)點(diǎn)列表對應(yīng);
[0083]實(shí)際應(yīng)用中,管理節(jié)點(diǎn)獲取到多個(gè)節(jié)點(diǎn)列表,該待寫入的文件要寫入到該多個(gè)節(jié)點(diǎn)列表中時(shí),將待寫入的文件劃分為多個(gè)數(shù)據(jù)塊,劃分的數(shù)據(jù)塊與獲取的節(jié)點(diǎn)列表一一對應(yīng),也就是說劃分的數(shù) 據(jù)塊的數(shù)目與獲取的節(jié)點(diǎn)列表的數(shù)目相同,并將待寫入的文件劃分的多個(gè)數(shù)據(jù)塊分別寫入到對應(yīng)的節(jié)點(diǎn)列表中。例如,管理節(jié)點(diǎn)根據(jù)待寫入的文件獲取N個(gè)節(jié)點(diǎn)列表:第一節(jié)點(diǎn)列表、第二節(jié)點(diǎn)列表……第N節(jié)點(diǎn)列表時(shí),根據(jù)獲取的N個(gè)節(jié)點(diǎn)列表將待寫入的文件分為N個(gè)數(shù)據(jù)塊:第一數(shù)據(jù)塊、第二數(shù)據(jù)塊……第N數(shù)據(jù)塊,以便于將待寫入的文件劃分的N個(gè)數(shù)據(jù)塊分別寫入到對應(yīng)的N個(gè)節(jié)點(diǎn)列表中,具體為:將第一數(shù)據(jù)塊寫入到第一節(jié)點(diǎn)列表中,將第二數(shù)據(jù)塊寫入第二節(jié)點(diǎn)列表中……將第N數(shù)據(jù)塊寫入第N節(jié)點(diǎn)列表中。
[0084]304:在每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,對該待寫入的文件執(zhí)行寫操作;
[0085]本實(shí)施例中,為了保證每個(gè)節(jié)點(diǎn)列表中所有節(jié)點(diǎn)存儲的數(shù)據(jù)完全一樣,每個(gè)節(jié)點(diǎn)包括一一對應(yīng)的磁盤,在每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤存儲相同的內(nèi)容,每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤中存儲相同的數(shù)據(jù)塊,在所述每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤包括的相同的數(shù)據(jù)塊的偏移量相同,這樣不會造成磁盤空間的浪費(fèi)。參見圖6,結(jié)對節(jié)點(diǎn)上對等磁盤上存儲數(shù)據(jù)塊信息的結(jié)構(gòu),第一節(jié)點(diǎn)chxd_l和第二節(jié)點(diǎn)chxd_2互為備份,假設(shè)sdb盤大小750GB,實(shí)際存儲的數(shù)據(jù)占用668GB,將這680GB分為334個(gè)單元,每一單元稱為一個(gè)數(shù)據(jù)塊,大小為2G。
第一節(jié)點(diǎn)的第一磁盤chxd_l.sdb盤的第一數(shù)據(jù)塊chunk_l、第二數(shù)據(jù)塊chunk_2.......第
N數(shù)據(jù)塊chunk_N,分別和第二節(jié)點(diǎn)的第一磁盤chxd_2.sdb盤的第一數(shù)據(jù)塊chunk_l、第二
數(shù)據(jù)塊chunk_2.......第N數(shù)據(jù)塊chunk_N存儲的內(nèi)容完全一致,且每個(gè)數(shù)據(jù)塊在磁盤上
的偏移也一樣。
[0086]具體地,節(jié)點(diǎn)列表中的每個(gè)節(jié)點(diǎn)包括多個(gè)磁盤,每個(gè)磁盤對應(yīng)一個(gè)磁盤的標(biāo)識,本發(fā)明實(shí)施例可以在節(jié)點(diǎn)中預(yù)存文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系,也可以由管理節(jié)點(diǎn)為待寫入的文件分配節(jié)點(diǎn)列表時(shí),對分配的每個(gè)節(jié)點(diǎn)列表分配每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中存儲文件的磁盤的標(biāo)識后,在管理節(jié)點(diǎn)中存儲文件的標(biāo)識、節(jié)點(diǎn)列表與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系。
[0087]其中,在每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,對待寫入的文件執(zhí)行寫操作,具體為,在每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,確定出用于存儲該待寫入的文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,并根據(jù)存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,確定出磁盤中存儲所述文件包括的數(shù)據(jù)塊的偏移量,根據(jù)存儲所述文件包括的數(shù)據(jù)塊的偏移量,將所述文件包括的數(shù)據(jù)塊存儲在所述磁盤的標(biāo)識對應(yīng)的磁盤的數(shù)據(jù)塊中。本實(shí)施例中,確定出磁盤中存儲所述文件包括的數(shù)據(jù)塊的偏移量,可以為根據(jù)節(jié)點(diǎn)中預(yù)存的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系,獲取存儲所述文件包括的數(shù)據(jù)塊的偏移量;也可以為由管理節(jié)點(diǎn)為待寫入的文件分配磁盤的標(biāo)識和存儲該文件包括的數(shù)據(jù)塊的偏移量,獲取存儲所述文件包括的數(shù)據(jù)塊的偏移量,從而將該待寫入的文件包括的數(shù)據(jù)塊存儲在所述磁盤的標(biāo)識對應(yīng)的磁盤的數(shù)據(jù)塊中。
[0088]本實(shí)施例中,由于節(jié)點(diǎn)列表chxd_pair中包括的每個(gè)節(jié)點(diǎn)chxd_server均提供服務(wù)且具有負(fù)載均衡功能,節(jié)點(diǎn)列表中的各個(gè)節(jié)點(diǎn)之間為對等關(guān)系,與入待與入的文件時(shí),對該待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表中的每個(gè)節(jié)點(diǎn)均執(zhí)行寫操作。例如,第一節(jié)點(diǎn)列表
包括m個(gè)節(jié)點(diǎn):chxd_serverl、chxd_server2......chxd_serverm,當(dāng)將待寫入文件的第一
數(shù)據(jù)塊寫入第一節(jié)點(diǎn)列表中的節(jié)點(diǎn)chxd_serverl時(shí),可以同時(shí)將該寫操作更新到chxd_
server2......chxd_serverm,也就是說,將待寫入文件的第一數(shù)據(jù)塊同時(shí)寫入第一節(jié)點(diǎn)列表
中的其他節(jié)點(diǎn)chxd_server2......chxd_serverm中,由于不同節(jié)點(diǎn)的操作是獨(dú)立的,不會對
系統(tǒng)效率造成影響。
[0089]實(shí)際應(yīng)用中,從管理節(jié)點(diǎn)中獲取待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,將待寫入的文件分為多個(gè)數(shù)據(jù)塊,并在一個(gè)節(jié)點(diǎn)列表的節(jié)點(diǎn)上寫入一個(gè)數(shù)據(jù)塊,如,獲取N個(gè)節(jié)點(diǎn)列表,每個(gè)節(jié)點(diǎn)列表中包括m個(gè)節(jié)點(diǎn),將待寫入的文件分為N個(gè)數(shù)據(jù)塊,寫入待寫入的文件時(shí),根據(jù)獲取的第一節(jié)點(diǎn)列表中的節(jié)點(diǎn)中的磁盤的標(biāo)識,將待寫入文件的第一數(shù)據(jù)塊寫入第一節(jié)點(diǎn)列表的m個(gè)節(jié)點(diǎn)的磁盤的數(shù)據(jù)塊中,將待寫入文件的第二數(shù)據(jù)塊寫入第二節(jié)點(diǎn)列表的m個(gè)節(jié)點(diǎn)的磁盤的數(shù)據(jù)塊中,也就是說在不同節(jié)點(diǎn)列表的節(jié)點(diǎn)上并發(fā)執(zhí)行對待寫入的文件的不同數(shù)據(jù)塊的寫操作,同一節(jié)點(diǎn)列表的所有節(jié)點(diǎn)上并發(fā)執(zhí)行對待寫入的文件的相同數(shù)據(jù)塊的寫操作,使得每個(gè)節(jié)點(diǎn)列表的所有節(jié)點(diǎn)上均寫入一個(gè)數(shù)據(jù)塊。
[0090]另外,本實(shí)施例中,確定出用于存儲待寫入的文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識之后,還根據(jù)待寫入的文件的標(biāo)識、存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識和存儲文件包括的數(shù)據(jù)塊的偏移量,生成文件的標(biāo)識、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系,并將文件的標(biāo)識、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系存儲在管理節(jié)點(diǎn)中。由于管理節(jié)點(diǎn)中預(yù)存了文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系,此時(shí)管理節(jié)點(diǎn)中存儲了文件的標(biāo)識、節(jié)點(diǎn)列表、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量之間的對應(yīng)關(guān)系。
[0091]305:接收客戶端發(fā)送的讀文件請求,該讀文件請求中攜帶文件的標(biāo)識;
[0092]其中,訪問文件請求中攜帶的文件的標(biāo)識具體為文件名或文件屬性等,本發(fā)明對此不作限定。
[0093]306:根據(jù)預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系和文件的標(biāo)識,獲取該文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表;
[0094]當(dāng)客戶端client發(fā)起讀文件請求時(shí),chxmaster根據(jù)該文件的標(biāo)識,從預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系中獲取該文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,每個(gè)節(jié)點(diǎn)列表包括至少兩個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括多個(gè)磁盤,每個(gè)節(jié)點(diǎn)包括的磁盤一一對應(yīng),每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤中存儲相同的數(shù)據(jù)塊,在所述每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤包括的相同的數(shù)據(jù)塊的偏移量相同,在每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤中對應(yīng)的數(shù)據(jù)塊存儲相同的內(nèi)容。其中,管理節(jié)點(diǎn)預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系中,節(jié)點(diǎn)列表信息包括ip、port、devid、fid等,根據(jù)節(jié)點(diǎn)列表信息能夠獲得該文件在哪些節(jié)點(diǎn)上。ip是指節(jié)點(diǎn)的ip地址,用于確定出數(shù)據(jù)存儲的chxd_server節(jié)點(diǎn),port是指節(jié)點(diǎn)的具體服務(wù)進(jìn)程,用于確定該節(jié)點(diǎn)上用以提供數(shù)據(jù)訪問上的具體服務(wù)進(jìn)程,devid用以確定文件所在的數(shù)據(jù)塊位置,fid用以確定文件所在的時(shí)間存儲區(qū)間。根據(jù)ip和port能確定具體的chxd_server,根據(jù)devid和fid能確定文件具體的存儲位置。
[0095]307:從獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn),根據(jù)文件的標(biāo)識從每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中讀取該文件包括的數(shù)據(jù)塊;
[0096]對于該步驟,獲取到文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表時(shí),對于每個(gè)節(jié)點(diǎn)列表,從該節(jié)點(diǎn)列表中選擇一個(gè)節(jié)點(diǎn)讀取該文件包括的數(shù)據(jù)塊,在該文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表均選擇一個(gè)節(jié)點(diǎn)讀取該文件包括的數(shù)據(jù)塊,可以訪問該節(jié)點(diǎn)列表中的任一節(jié)點(diǎn),本實(shí)施例對具體訪問該節(jié)點(diǎn)列表中的哪個(gè)節(jié)點(diǎn)不做限定。
[0097]其中,根據(jù)文件的標(biāo)識從每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中讀取該文件包括的數(shù)據(jù)塊,具體包括:
[0098]由于管理節(jié)點(diǎn)中存儲了節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系,根據(jù)文件的標(biāo)識,從該對應(yīng)關(guān)系中獲取存儲該文件的磁盤的標(biāo)識以及文件包括的數(shù)據(jù)塊在磁盤中存儲的偏移量,從而根據(jù)存儲該文件的磁盤的標(biāo)識和文件包括的數(shù)據(jù)塊在磁盤中存儲的偏移量,從節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中讀取該文件包括的數(shù)據(jù)塊。
[0099]308:當(dāng)從某個(gè)節(jié)點(diǎn)中讀取失敗,則在該節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他的一個(gè)節(jié)點(diǎn),根據(jù)該文件的標(biāo)識從選擇的節(jié)點(diǎn)中讀取文件包括的數(shù)據(jù)塊。
[0100]本實(shí)施例中,每個(gè)節(jié)點(diǎn)列表chxd_pair中所有節(jié)點(diǎn)chxd_server的數(shù)據(jù)完全一樣,每個(gè)節(jié)點(diǎn)chxd_server由相同塊磁盤組成,且每塊磁盤的大小相等,邏輯上的一塊磁盤數(shù)據(jù)同時(shí)存儲在各節(jié)點(diǎn)chxd_server的對應(yīng)物理磁盤中,這樣當(dāng)從任何一個(gè)機(jī)器上讀取失敗時(shí),會在該節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他一個(gè)節(jié)點(diǎn)進(jìn)行繼續(xù)讀取,此時(shí)根據(jù)文件的標(biāo)識從選擇的節(jié)點(diǎn)中讀取文件包括的數(shù)據(jù)塊。比如chxd_l節(jié)點(diǎn)上的sdl盤數(shù)據(jù)和chxd_2上的sdl盤數(shù)據(jù)時(shí)完全一樣的,當(dāng)在chxd_l節(jié)點(diǎn)的sdl盤的第一數(shù)據(jù)塊讀取sdl_data數(shù)據(jù)失敗時(shí),選擇chxd_2上的sdl盤的第一數(shù)據(jù)塊上繼續(xù)讀取sdl_data數(shù)據(jù)。
[0101]實(shí)際應(yīng)用中,當(dāng)圖6中的chxd_l節(jié)點(diǎn)上sdb盤的第一個(gè)數(shù)據(jù)塊數(shù)據(jù)讀寫異常時(shí),以Chxd_2節(jié)點(diǎn)上sdb盤的第一個(gè)數(shù)據(jù)塊為源進(jìn)行數(shù)據(jù)遷移,sdb盤的其他數(shù)據(jù)塊并不需要移動(dòng)。這樣可以大大降低數(shù)據(jù)遷移造成的系統(tǒng)額外開銷,節(jié)省成本。
[0102]其中,本發(fā)明實(shí)施例解決了由于數(shù)據(jù)塊級的故障造成業(yè)務(wù)層數(shù)據(jù)無法正常訪問的問題,當(dāng)對節(jié)點(diǎn)列表的一個(gè)節(jié)點(diǎn)中的數(shù)據(jù)塊訪問失敗時(shí),則將該訪問文件請求發(fā)送給該節(jié)點(diǎn)列表中的其他節(jié)點(diǎn)的對應(yīng)磁盤中對應(yīng)的數(shù)據(jù)塊,由其他節(jié)點(diǎn)完成文件訪問操作,達(dá)到了當(dāng)某一節(jié)點(diǎn)的數(shù)據(jù)塊發(fā)生故障,不影響業(yè)務(wù)層數(shù)據(jù)訪問的技術(shù)效果。
[0103]本發(fā)明實(shí)施例提供的并發(fā)訪問的操作,實(shí)現(xiàn)了對同一文件數(shù)據(jù)的讀訪問請求可以在不同磁盤的數(shù)據(jù)塊上并發(fā)處理,當(dāng)選擇了節(jié)點(diǎn)列表中的一個(gè)節(jié)點(diǎn)的磁盤的數(shù)據(jù)塊進(jìn)行訪問時(shí),可以同時(shí)選擇另一節(jié)點(diǎn)列表中的一個(gè)節(jié)點(diǎn),對該節(jié)點(diǎn)中的磁盤的數(shù)據(jù)塊進(jìn)行并發(fā)訪問,由于不同節(jié)點(diǎn)的操作是獨(dú)立的,不會對系統(tǒng)效率造成影響。
[0104]本發(fā)明實(shí)施例提供的方法,通過結(jié)合雙機(jī)雙工的優(yōu)勢提出結(jié)對存儲技術(shù),將完全獨(dú)立的多臺機(jī)器從節(jié)點(diǎn)到磁盤進(jìn)行對等互備,解決了大規(guī)模分布式存儲系統(tǒng)中的數(shù)據(jù)讀寫故障、磁盤故障及單節(jié)點(diǎn)故障等問題,保證在任何場景下的數(shù)據(jù)可靠性,提高了磁盤利用率及讀寫性能;同時(shí)通過互備機(jī)器同時(shí)對外提供服務(wù),提高了數(shù)據(jù)讀寫吞吐率,提高系統(tǒng)服務(wù)效率。
[0105]實(shí)施例4
[0106]參見圖7,本發(fā)明實(shí)施例提供了 一種磁盤容錯(cuò)裝置,所述裝置包括:
[0107]第一接收模塊401,用于接收訪問文件請求,訪問文件請求中攜帶文件的標(biāo)識;
[0108]第一獲取模塊402,用于根據(jù)預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系和文件的標(biāo)識,獲取文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,節(jié)點(diǎn)列表包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括多個(gè)磁盤,每個(gè)節(jié)點(diǎn)包括的磁盤一一對應(yīng),在每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤存儲相同的內(nèi)容;
[0109]訪問模塊403,用于從獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn),根據(jù)文件的標(biāo)識從每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中訪問文件包括的數(shù)據(jù)塊;
[0110]容錯(cuò)模塊404,用于當(dāng)從某個(gè)節(jié)點(diǎn)中訪問失敗,則在節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他的一個(gè)節(jié)點(diǎn),根據(jù)文件的標(biāo)識從選擇的節(jié)點(diǎn)中訪問文件包括的數(shù)據(jù)塊。
[0111]其中,訪問模塊403,包括選擇單元和訪問單元:
[0112]選擇單元,用于從獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn);
[0113]訪問單元,包括:
[0114]第一獲取子單元,用于獲取節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系;
[0115]第二獲取子單元,用于根據(jù)文件的標(biāo)識,從節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系中獲取存儲文件的磁盤的標(biāo)識;
[0116]訪問子單元,用于根據(jù)文件的標(biāo)識和存儲文件的磁盤的標(biāo)識,從選擇單元選擇的一個(gè)節(jié)點(diǎn)中訪問文件包括的數(shù)據(jù)塊。
[0117]其中,在每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤中存儲相同的數(shù)據(jù)塊,在每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤包括的相同的數(shù)據(jù)塊的偏移量相同;相應(yīng)地,訪問模塊包括選擇單元和訪問單元,
[0118]選擇單元,用于從獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn);
[0119]訪問單元包括:
[0120]第一獲取子單元,用于獲取節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系;
[0121]第二獲取子單元,用于根據(jù)文件的標(biāo)識,從節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系中獲取存儲文件的磁盤的標(biāo)識以及文件包括的數(shù)據(jù)塊在磁盤中存儲的偏移量;
[0122]訪問子單元,用于根據(jù)存儲文件的磁盤的標(biāo)識和文件包括的數(shù)據(jù)塊在磁盤中存儲的偏移量,從選擇單元選擇的一個(gè)節(jié)點(diǎn)中訪問文件包括的數(shù)據(jù)塊。
[0123]進(jìn)一步地,參見圖8,該裝置還包括:[0124]第二接收模塊405,用于接收寫文件請求,寫文件請求中攜帶待寫入的文件;
[0125]第二獲取模塊406,用于根據(jù)待寫入的文件的標(biāo)識,從存儲的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系中獲取待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表;
[0126]劃分模塊407,用于根據(jù)獲取的多個(gè)節(jié)點(diǎn)列表,將待寫入的文件劃分成多個(gè)數(shù)據(jù)塊,且劃分的數(shù)據(jù)塊與節(jié)點(diǎn)列表一一對應(yīng);
[0127]寫入模塊408,用于在每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,確定出用于存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,將文件包括的數(shù)據(jù)塊寫入磁盤的標(biāo)識對應(yīng)的磁盤中。
[0128]進(jìn)一步地,該裝置還包括存儲模塊,用于根據(jù)待寫入的文件的標(biāo)識和存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,生成文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系;并將文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系存儲。
[0129]其中,寫入模塊408,包括:
[0130]確定單元,用于在每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,確定出用于存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,并根據(jù)存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,確定出磁盤中存儲文件包括的數(shù)據(jù)塊的偏移量;
[0131]寫入單元,用于根據(jù)存儲文件包括的數(shù)據(jù)塊的偏移量,將文件包括的數(shù)據(jù)塊存儲在磁盤的標(biāo)識對應(yīng)的磁盤的數(shù)據(jù)塊中。
[0132]進(jìn)一步地,該裝置還包括存儲模塊,用于根據(jù)待寫入的文件的標(biāo)識、存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識和存儲文件包括的數(shù)據(jù)塊的偏移量,生成文件的標(biāo)識、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系;并將文件的標(biāo)識、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系存儲。
[0133]本發(fā)明實(shí)施例提供的裝置,通過結(jié)合雙機(jī)雙工的優(yōu)勢提出結(jié)對存儲技術(shù),將完全獨(dú)立的多臺機(jī)器從節(jié)點(diǎn)到磁盤進(jìn)行對等互備,解決了大規(guī)模分布式存儲系統(tǒng)中的數(shù)據(jù)讀寫故障、磁盤故障及單節(jié)點(diǎn)故障等問題,保證在任何場景下的數(shù)據(jù)可靠性,提高了磁盤利用率及讀寫性能;同時(shí)通過互備機(jī)器同時(shí)對外提供服務(wù),提高了數(shù)據(jù)讀寫吞吐率,提高系統(tǒng)服務(wù)效率。
[0134]需要說明的是:上述實(shí)施例提供的磁盤容錯(cuò)裝置在磁盤容錯(cuò)時(shí),僅以上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實(shí)施例提供的磁盤容錯(cuò)裝置與磁盤容錯(cuò)方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過程詳見方法實(shí)施例,這里不再贅述。
[0135]上述本發(fā)明實(shí)施例序號僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
[0136]實(shí)施例5
[0137]參見圖9,本發(fā)明實(shí)施例提供了一種磁盤容錯(cuò)系統(tǒng),包括客戶端501、存儲服務(wù)器集群502和管理服務(wù)器503 ;
[0138]客戶端501,用于向管理服務(wù)器503發(fā)送訪問文件請求,訪問文件請求中攜帶文件的標(biāo)識;
[0139]存儲服務(wù)器集群502,包括多個(gè)存儲服務(wù)器組,每個(gè)存儲服務(wù)器組包括至少兩個(gè)存儲服務(wù)器,每個(gè)存儲服務(wù)器包括多個(gè)磁盤,每個(gè)存儲服務(wù)器包括的磁盤一一對應(yīng),在每個(gè)存儲服務(wù)器中相互對應(yīng)的磁盤存儲相同的內(nèi)容;[0140]管理服務(wù)器503,用于接收客戶端501發(fā)送的訪問文件請求,根據(jù)預(yù)存的文件的標(biāo)識與存儲服務(wù)器集群502包括的存儲服務(wù)器組的對應(yīng)關(guān)系和文件的標(biāo)識,獲取文件對應(yīng)的多個(gè)存儲服務(wù)器組;從獲取的每個(gè)存儲服務(wù)器組中分別選擇一個(gè)存儲服務(wù)器,根據(jù)文件的標(biāo)識從每個(gè)存儲服務(wù)器組選擇的一個(gè)存儲服務(wù)器中訪問文件包括的數(shù)據(jù)塊;當(dāng)從某個(gè)存儲服務(wù)器訪問失敗,則在存儲服務(wù)器所在的存儲服務(wù)器組中選擇其他的一個(gè)存儲服務(wù)器,根據(jù)文件的標(biāo)識從選擇的存儲服務(wù)器中訪問文件包括的數(shù)據(jù)塊。
[0141]其中,本實(shí)施例中的管理服務(wù)器是指上述實(shí)施例中的管理節(jié)點(diǎn)。
[0142]進(jìn)一步地,管理服務(wù)器503還用于:獲取存儲服務(wù)器組對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系;根據(jù)文件的標(biāo)識,從存儲服務(wù)器組對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系中獲取存儲文件的磁盤的標(biāo)識;根據(jù)文件的標(biāo)識和存儲文件的磁盤的標(biāo)識,從存儲服務(wù)器組選擇的一個(gè)存儲服務(wù)器中訪問文件包括的數(shù)據(jù)塊。
[0143]進(jìn)一步地,管理服務(wù)器503還用于在每個(gè)存儲服務(wù)器中相互對應(yīng)的磁盤中存儲相同的數(shù)據(jù)塊,在每個(gè)存儲服務(wù)器中相互對應(yīng)的磁盤包括的相同的數(shù)據(jù)塊的偏移量相同。
[0144]進(jìn)一步地,管理服務(wù)器503還用于:獲取存儲服務(wù)器組對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系;根據(jù)文件的標(biāo)識,從存儲服務(wù)器組對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系中獲取存儲文件的磁盤的標(biāo)識以及文件包括的數(shù)據(jù)塊在磁盤中存儲的偏移量;根據(jù)存儲文件的磁盤的標(biāo)識和文件包括的數(shù)據(jù)塊在磁盤中存儲的偏移量,從存儲服務(wù)器組選擇的一個(gè)存儲服務(wù)器中訪問文件包括的數(shù)據(jù)塊。
[0145]其中,客戶端501還用于向管理服務(wù)器503發(fā)送寫文件請求,寫文件請求中攜帶待寫入的文件;
[0146]相應(yīng)地,管理服務(wù)器503還用于接收客戶端501發(fā)送的寫文件請求;根據(jù)待寫入的文件的標(biāo)識,獲取待寫入的文件對應(yīng)的多個(gè)存儲服務(wù)器組,管理服務(wù)器中存儲文件的標(biāo)識與存儲服務(wù)器組的對應(yīng)關(guān)系;根據(jù)獲取的多個(gè)存儲服務(wù)器組,將待寫入的文件劃分成多個(gè)數(shù)據(jù)塊,且劃分的數(shù)據(jù)塊與存儲服務(wù)器組一一對應(yīng);在每個(gè)存儲服務(wù)器組包括的每個(gè)存儲服務(wù)器中,確定出用于存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,將文件包括的數(shù)據(jù)塊寫入磁盤的標(biāo)識對應(yīng)的磁盤中。
[0147]進(jìn)一步地,管理服務(wù)器503還用于根據(jù)待寫入的文件的標(biāo)識和存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,生成并存儲文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系。
[0148]其中,管理服務(wù)器503還用于在每個(gè)存儲服務(wù)器組包括的每個(gè)存儲服務(wù)器中,確定出用于存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,并根據(jù)存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,確定出磁盤中存儲文件包括的數(shù)據(jù)塊的偏移量;根據(jù)存儲文件包括的數(shù)據(jù)塊的偏移量,將文件包括的數(shù)據(jù)塊存儲在磁盤的標(biāo)識對應(yīng)的磁盤的數(shù)據(jù)塊中。
[0149]其中,管理服務(wù)器503還用于根據(jù)待寫入的文件的標(biāo)識、存儲文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識和存儲文件包括的數(shù)據(jù)塊的偏移量,生成并存儲文件的標(biāo)識、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系。
[0150]另外,為了保證服務(wù)的可靠性,消除管理服務(wù)器的故障瓶頸,本發(fā)明實(shí)施例的磁盤容錯(cuò)系統(tǒng)還包括備份管理服務(wù)器及備份存儲服務(wù)器集群,用于當(dāng)管理服務(wù)器發(fā)生故障時(shí),在備份管理服務(wù)器上完成訪問文件操作和/或?qū)懳募僮鳌F渲?,備份存儲服?wù)器集群與存儲服務(wù)器集群的結(jié)構(gòu)完全相同,備份管理服務(wù)器與管理服務(wù)器的結(jié)構(gòu)完全相同。[0151]具體地,備份存儲服務(wù)器集群包括多個(gè)備份存儲服務(wù)器組,每個(gè)備份存儲服務(wù)器組包括至少兩個(gè)備份存儲服務(wù)器,每個(gè)備份存儲服務(wù)器包括多個(gè)磁盤,所述每個(gè)備份存儲服務(wù)器包括的磁盤一一對應(yīng),在所述每個(gè)備份存儲服務(wù)器中相互對應(yīng)的磁盤存儲相同的內(nèi)容。
[0152]具體地,備份管理服務(wù)器,用于當(dāng)管理服務(wù)器發(fā)生故障時(shí),獲取管理服務(wù)器發(fā)送的訪問文件請求,根據(jù)預(yù)存的文件的標(biāo)識與備份存儲服務(wù)器集群包括的備份存儲服務(wù)器組的對應(yīng)關(guān)系和文件的標(biāo)識,獲取文件對應(yīng)的多個(gè)備份存儲服務(wù)器組,每個(gè)備份存儲服務(wù)器組包括多個(gè)備份存儲服務(wù)器,每個(gè)備份存儲服務(wù)器包括多個(gè)磁盤,每個(gè)備份存儲服務(wù)器包括的磁盤 對應(yīng),在每個(gè)備份存儲服務(wù)器中相互對應(yīng)的磁盤存儲相同的內(nèi)容;從獲取的每個(gè)備份存儲服務(wù)器組中分別選擇一個(gè)備份存儲服務(wù)器,根據(jù)文件的標(biāo)識從每個(gè)備份存儲服務(wù)器組選擇的一個(gè)備份存儲服務(wù)器中訪問文件包括的數(shù)據(jù)塊;當(dāng)從某個(gè)備份存儲服務(wù)器中訪問失敗,則在備份存儲服務(wù)器所在的備份存儲服務(wù)器組中選擇其他的一個(gè)節(jié)點(diǎn),根據(jù)文件的標(biāo)識從選擇的備份存儲服務(wù)器中訪問文件包括的數(shù)據(jù)塊。
[0153]本發(fā)明實(shí)施例提供的系統(tǒng),通過結(jié)合雙機(jī)雙工的優(yōu)勢提出結(jié)對存儲技術(shù),將完全獨(dú)立的多臺機(jī)器從存儲服務(wù)器到磁盤,再到數(shù)據(jù)塊進(jìn)行對等互備,解決了大規(guī)模分布式存儲系統(tǒng)中的數(shù)據(jù)讀寫故障、磁盤故障及單個(gè)服務(wù)器故障等問題,保證在任何場景下的數(shù)據(jù)可靠性,提高了磁盤利用率及讀寫性能;同時(shí)通過互備的存儲服務(wù)器同時(shí)對外提供服務(wù),提聞了數(shù)據(jù)讀與吞吐率,提聞系統(tǒng)服務(wù)效率。
[0154]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計(jì)算機(jī)可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
[0155]以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種磁盤容錯(cuò)方法,其特征在于,所述方法包括: 接收訪問文件請求,所述訪問文件請求中攜帶文件的標(biāo)識; 根據(jù)預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系和所述文件的標(biāo)識,獲取所述文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,每個(gè)節(jié)點(diǎn)列表包括至少兩個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括多個(gè)磁盤,所述每個(gè)節(jié)點(diǎn)包括的磁盤一一對應(yīng),在所述每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤存儲相同的內(nèi)容; 從所述獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn),根據(jù)所述文件的標(biāo)識從所述每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊; 當(dāng)從某個(gè)節(jié)點(diǎn)中訪問失敗,則在所述節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他的一個(gè)節(jié)點(diǎn),根據(jù)所述文件的標(biāo)識從所述選擇的節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊。
2.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述文件的標(biāo)識從所述每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊,包括: 獲取節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系; 根據(jù)所述文件的標(biāo)識,從所述節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系中獲取存儲所述文件的磁盤的標(biāo)識; 根據(jù)所述文件的標(biāo)識和存儲所述文件的磁盤的標(biāo)識,從所述節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中訪問所述文件包括的數(shù) 據(jù)塊。
3.如權(quán)利要求1所述的方法,其特征在于,在所述每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤中存儲相同的數(shù)據(jù)塊,在所述每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤包括的相同的數(shù)據(jù)塊的偏移量相同。
4.如權(quán)利要求3所述的方法,其特征在于,所述根據(jù)所述文件的標(biāo)識從所述每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊,包括: 獲取節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系; 根據(jù)所述文件的標(biāo)識,從所述節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系中獲取存儲所述文件的磁盤的標(biāo)識以及所述文件包括的數(shù)據(jù)塊在所述磁盤中存儲的偏移量; 根據(jù)存儲所述文件的磁盤的標(biāo)識和所述文件包括的數(shù)據(jù)塊在所述磁盤中存儲的偏移量,從所述節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊。
5.如權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 接收寫文件請求,所述寫文件請求中攜帶待寫入的文件; 根據(jù)待寫入的文件的標(biāo)識,從存儲的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系中獲取所述待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表; 根據(jù)所述獲取的多個(gè)節(jié)點(diǎn)列表,將所述待寫入的文件劃分成多個(gè)數(shù)據(jù)塊,且劃分的數(shù)據(jù)塊與所述節(jié)點(diǎn)列表對應(yīng); 在每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,確定出用于存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,將所述文件包括的數(shù)據(jù)塊寫入所述磁盤的標(biāo)識對應(yīng)的磁盤中。
6.如權(quán)利要求5所述的方法,其特征在于,所述確定出用于存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識之后,還包括: 根據(jù)所述待寫入的文件的標(biāo)識和所述存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,生成文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系; 將所述文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系存儲。
7.如權(quán)利要求5所述的方法,其特征在于,所述確定出用于存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識之后,還包括: 根據(jù)存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,確定出所述磁盤中存儲所述文件包括的數(shù)據(jù)塊的偏移量; 所述將所述文件包括的數(shù)據(jù)塊存入所述磁盤的標(biāo)識對應(yīng)的磁盤中,包括: 根據(jù)存儲所述文件包括的數(shù)據(jù)塊的偏移量,將所述文件包括的數(shù)據(jù)塊存儲在所述磁盤的標(biāo)識對應(yīng)的磁盤的數(shù)據(jù)塊中。
8.如權(quán)利要求7所述的方法,其特征在于,所述確定出所述磁盤中存儲所述文件包括的數(shù)據(jù)塊的偏移量之后,還包括: 根據(jù)所述待寫入的文件的標(biāo)識、所述存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識和存儲所述文件包括的數(shù)據(jù)塊的偏移量,生成文件的標(biāo)識、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系; 將所述文件的標(biāo)識、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系存儲。
9.一種磁盤容錯(cuò)裝置,其特征在于,所述裝置包括: 接收模塊,用于接收訪問文件請求,所述訪問文件請求中攜帶文件的標(biāo)識; 第一獲取模塊,用于根據(jù)預(yù)存的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系和所述文件的標(biāo)識,獲取所述文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表,每個(gè)節(jié)點(diǎn)列表包括至少兩個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括多個(gè)磁盤,所述每個(gè)節(jié)點(diǎn)包括的磁盤一一對應(yīng),在所述每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤存儲相同的內(nèi)容; 訪問模塊,用于從所述獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn),根據(jù)所述文件的標(biāo)識從所述每個(gè)節(jié)點(diǎn)列表選擇的一個(gè)節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊; 容錯(cuò)模塊,用于當(dāng)從某個(gè)節(jié)點(diǎn)中訪問失敗,則在所述節(jié)點(diǎn)所在的節(jié)點(diǎn)列表中選擇其他的一個(gè)節(jié)點(diǎn),根據(jù)所述文件的標(biāo)識從所述選擇的節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊。
10.如權(quán)利要求9所述的裝置,其特征在于,所述訪問模塊,包括: 選擇單元,用于從所述獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn); 訪問單元,包括: 第一獲取子單元,用于獲取節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系; 第二獲取子單元,用于根據(jù)所述文件的標(biāo)識,從所述節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系中獲取存儲所述文件的磁盤的標(biāo)識; 訪問子單元,用于根據(jù)所述文件的標(biāo)識和存儲所述文件的磁盤的標(biāo)識,從所述選擇單元選擇的一個(gè)節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊。
11.如權(quán)利要求9所述的裝置,其特征在于,在所述每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤中存儲相同的數(shù)據(jù)塊,在所述每個(gè)節(jié)點(diǎn)中相互對應(yīng)的磁盤包括的相同的數(shù)據(jù)塊的偏移量相同。
12.如權(quán)利要求11所述的裝置,其特征在于,所述訪問模塊包括: 選擇單元,用于從所述獲取的每個(gè)節(jié)點(diǎn)列表中分別選擇一個(gè)節(jié)點(diǎn); 訪問單元包括: 第一獲取子單元,用于獲取節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系; 第二獲取子單元,用于根據(jù)所述文件的標(biāo)識,從所述節(jié)點(diǎn)列表對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系中獲取存儲所述文件的磁盤的標(biāo)識以及所述文件包括的數(shù)據(jù)塊在所述磁盤中存儲的偏移量; 訪問子單元,用于根據(jù)存儲所述文件的磁盤的標(biāo)識和所述文件包括的數(shù)據(jù)塊在所述磁盤中存儲的偏移量,從所述選擇單元選擇的一個(gè)節(jié)點(diǎn)中訪問所述文件包括的數(shù)據(jù)塊。
13.如權(quán)利要求10所述的裝置,其特征在于,所述裝置還包括: 接收模塊,用于接收寫文件請求,所述寫文件請求中攜帶待寫入的文件; 第二獲取模塊,用于根據(jù)待寫入的文件的標(biāo)識,從存儲的文件的標(biāo)識與節(jié)點(diǎn)列表的對應(yīng)關(guān)系中獲取所述待寫入的文件對應(yīng)的多個(gè)節(jié)點(diǎn)列表; 劃分模塊,用于根據(jù)所述獲取的多個(gè)節(jié)點(diǎn)列表,將所述待寫入的文件劃分成多個(gè)數(shù)據(jù)塊,且劃分的數(shù)據(jù)塊與所述節(jié)點(diǎn)列表一一對應(yīng); 寫入模塊,用于在每個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,確定出用于存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,將所述文件包括的數(shù)據(jù)塊寫入所述磁盤的標(biāo)識對應(yīng)的磁盤中。
14.如權(quán)利要求13所述的裝置,其特征在于,所述裝置還包括存儲模塊,用于根據(jù)所述待寫入的文件的標(biāo)識和所述存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,生成文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系;并將所述文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系存儲。
15.如權(quán)利要求13所述的裝置,其特征在于,所述寫入模塊,包括: 確定單元,用于在每 個(gè)節(jié)點(diǎn)列表包括的每個(gè)節(jié)點(diǎn)中,確定出用于存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,并根據(jù)存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,確定出所述磁盤中存儲所述文件包括的數(shù)據(jù)塊的偏移量; 寫入單元,用于根據(jù)存儲所述文件包括的數(shù)據(jù)塊的偏移量,將所述文件包括的數(shù)據(jù)塊存儲在所述磁盤的標(biāo)識對應(yīng)的磁盤的數(shù)據(jù)塊中。
16.如權(quán)利要求15所述的裝置,其特征在于,所述裝置還包括存儲模塊,用于根據(jù)所述待寫入的文件的標(biāo)識、所述存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識和存儲所述文件包括的數(shù)據(jù)塊的偏移量,生成文件的標(biāo)識、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系;并將所述文件的標(biāo)識、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系存儲。
17.—種磁盤容錯(cuò)系統(tǒng),其特征在于,所述系統(tǒng)包括客戶端、存儲服務(wù)器集群和管理服務(wù)器; 所述客戶端,用于向所述管理服務(wù)器發(fā)送訪問文件請求,所述訪問文件請求中攜帶文件的標(biāo)識; 所述存儲服務(wù)器集群,包括多個(gè)存儲服務(wù)器組,每個(gè)存儲服務(wù)器組包括至少兩個(gè)存儲服務(wù)器,每個(gè)存儲服務(wù)器包括多個(gè)磁盤,所述每個(gè)存儲服務(wù)器包括的磁盤一一對應(yīng),在所述每個(gè)存儲服務(wù)器中相互對應(yīng)的磁盤存儲相同的內(nèi)容; 所述管理服務(wù)器,用于接收所述客戶端發(fā)送的訪問文件請求;根據(jù)預(yù)存的文件的標(biāo)識與所述存儲服務(wù)器集群包括的存儲服務(wù)器組的對應(yīng)關(guān)系和所述文件的標(biāo)識,獲取所述文件對應(yīng)的多個(gè)存儲服務(wù)器組;從所述獲取的每個(gè)存儲服務(wù)器組中分別選擇一個(gè)存儲服務(wù)器,根據(jù)所述文件的標(biāo)識從所述每個(gè)存儲服務(wù)器組選擇的一個(gè)存儲服務(wù)器中訪問所述文件包括的數(shù)據(jù)塊;當(dāng)從某個(gè)存儲服務(wù)器訪問失敗,則在所述存儲服務(wù)器所在的存儲服務(wù)器組中選擇其他的一個(gè)存儲服務(wù)器,根據(jù)所述文件的標(biāo)識從所述選擇的存儲服務(wù)器中訪問所述文件包括的數(shù)據(jù)塊。
18.如權(quán)利要求17所述的系統(tǒng),其特征在于,所述管理服務(wù)器還用于:獲取存儲服務(wù)器組對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系;根據(jù)所述文件的標(biāo)識,從所述存儲服務(wù)器組對應(yīng)的文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系中獲取存儲所述文件的磁盤的標(biāo)識;根據(jù)所述文件的標(biāo)識和存儲所述文件的磁盤的標(biāo)識,從所述存儲服務(wù)器組選擇的一個(gè)存儲服務(wù)器中訪問所述文件包括的數(shù)據(jù)塊。
19.如權(quán)利要求17所述的系統(tǒng),其特征在于,所述存儲服務(wù)器集群還用于在所述每個(gè)存儲服務(wù)器中相互對應(yīng)的磁盤中存儲相同的數(shù)據(jù)塊,在所述每個(gè)存儲服務(wù)器中相互對應(yīng)的磁盤包括的相同的數(shù)據(jù)塊的偏移量相同。
20.如權(quán)利要求19所述的系統(tǒng),其特征在于,所述管理服務(wù)器還用于:獲取存儲服務(wù)器組對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系;根據(jù)所述文件的標(biāo)識,從所述存儲服務(wù)器組對應(yīng)的文件的標(biāo)識、磁盤的標(biāo)識與數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系中獲取存儲所述文件的磁盤的標(biāo)識以及所述文件包括的數(shù)據(jù)塊在所述磁盤中存儲的偏移量;根據(jù)存儲所述文件的磁盤的標(biāo)識和所述文件包括的數(shù)據(jù)塊在所述磁盤中存儲的偏移量,從所述存儲服務(wù)器組選擇的一個(gè)存儲服務(wù)器中訪問所述文件包括的數(shù)據(jù)塊。
21.如權(quán)利要求17所述的系統(tǒng),其特征在于,所述客戶端還用于向所述管理服務(wù)器發(fā)送寫文件請求,所 述寫文件請求中攜帶待寫入的文件; 相應(yīng)地,所述管理服務(wù)器還用于接收客戶端發(fā)送的寫文件請求;根據(jù)待寫入的文件的標(biāo)識,獲取所述待寫入的文件對應(yīng)的多個(gè)存儲服務(wù)器組,所述管理服務(wù)器中存儲文件的標(biāo)識與存儲服務(wù)器組的對應(yīng)關(guān)系;根據(jù)所述獲取的多個(gè)存儲服務(wù)器組,將所述待寫入的文件劃分成多個(gè)數(shù)據(jù)塊,且劃分的數(shù)據(jù)塊與所述存儲服務(wù)器組一一對應(yīng);在每個(gè)存儲服務(wù)器組包括的每個(gè)存儲服務(wù)器中,確定出用于存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,將所述文件包括的數(shù)據(jù)塊寫入所述磁盤的標(biāo)識對應(yīng)的磁盤中。
22.如權(quán)利要求21所述的系統(tǒng),其特征在于,所述管理服務(wù)器還用于根據(jù)所述待寫入的文件的標(biāo)識和所述存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,生成并存儲文件的標(biāo)識與磁盤的標(biāo)識的對應(yīng)關(guān)系。
23.如權(quán)利要求21所述的系統(tǒng),其特征在于,所述管理服務(wù)器還用于在每個(gè)存儲服務(wù)器組包括的每個(gè)存儲服務(wù)器中,確定出用于存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,并根據(jù)存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識,確定出所述磁盤中存儲所述文件包括的數(shù)據(jù)塊的偏移量;根據(jù)存儲所述文件包括的數(shù)據(jù)塊的偏移量,將所述文件包括的數(shù)據(jù)塊存儲在所述磁盤的標(biāo)識對應(yīng)的磁盤的數(shù)據(jù)塊中。
24.如權(quán)利要求23所述的系統(tǒng),其特征在于,所述管理服務(wù)器還用于根據(jù)所述待寫入的文件的標(biāo)識、所述存儲所述文件包括的數(shù)據(jù)塊的磁盤的標(biāo)識和存儲所述文件包括的數(shù)據(jù)塊的偏移量,生成并存儲文件的標(biāo)識、磁盤的標(biāo)識和數(shù)據(jù)塊的偏移量的對應(yīng)關(guān)系。
【文檔編號】G06F11/07GK103942112SQ201310027284
【公開日】2014年7月23日 申請日期:2013年1月22日 優(yōu)先權(quán)日:2013年1月22日
【發(fā)明者】婁繼冰 申請人:深圳市騰訊計(jì)算機(jī)系統(tǒng)有限公司