本發(fā)明屬于存儲(chǔ)技術(shù)領(lǐng)域,更具體地,涉及一種雙機(jī)存儲(chǔ)系統(tǒng)及方法。
背景技術(shù):
隨著信息技術(shù)的飛速發(fā)展,數(shù)據(jù)也呈現(xiàn)爆炸性的增長(zhǎng)趨勢(shì)?,F(xiàn)在很多應(yīng)用領(lǐng)域?qū)Υ鎯?chǔ)系統(tǒng)的容錯(cuò)性方面有著很高的要求,如金融、軍事、工業(yè)界、航空等。在這些應(yīng)用環(huán)境中,很多因素會(huì)對(duì)存儲(chǔ)系統(tǒng)的容錯(cuò)性帶來極大的威脅。一旦引起存儲(chǔ)節(jié)點(diǎn)部分甚至整體失效,便會(huì)增加服務(wù)不可用甚至是數(shù)據(jù)丟失的風(fēng)險(xiǎn)。因此,提高存儲(chǔ)系統(tǒng)的容錯(cuò)能力是一個(gè)很關(guān)鍵的問題。
常見的存儲(chǔ)系統(tǒng),例如分布式存儲(chǔ)系統(tǒng)中,其節(jié)點(diǎn)錯(cuò)誤可分為兩類,一類是管理節(jié)點(diǎn)失效,二是數(shù)據(jù)節(jié)點(diǎn)失效。而對(duì)存儲(chǔ)系統(tǒng)的訪問將不可避免的途經(jīng)管理節(jié)點(diǎn),加上管理節(jié)點(diǎn)存在單點(diǎn)故障問題,一旦管理節(jié)點(diǎn)失效,整個(gè)存儲(chǔ)系統(tǒng)極可能陷入癱瘓,無法對(duì)外提供服務(wù)。對(duì)此,已有研究者提出高可用性方案來保證管理節(jié)點(diǎn)的容錯(cuò)能力,降低系統(tǒng)中的可靠性與可用性風(fēng)險(xiǎn)。
現(xiàn)有的管理節(jié)點(diǎn)的容錯(cuò)技術(shù)主要是以下三種:
第一種,元數(shù)據(jù)備份法。該方法的主要思想是管理節(jié)點(diǎn)將元數(shù)據(jù)信息保存到多個(gè)目錄以達(dá)到容錯(cuò)的目的。通常的做法,選擇一個(gè)本地目錄、一個(gè)遠(yuǎn)程目錄,這兩個(gè)目錄通過NFS進(jìn)行共享。當(dāng)管理節(jié)點(diǎn)發(fā)生故障時(shí),啟動(dòng)一個(gè)備用機(jī)器的管理節(jié)點(diǎn),加載遠(yuǎn)程目錄中的元數(shù)據(jù)信息,提供服務(wù)。
第二種,第二管理節(jié)點(diǎn)法。該方法的目的就是對(duì)文件系統(tǒng)內(nèi)存中的元數(shù)據(jù)進(jìn)行檢查,在固定的一段時(shí)間或者當(dāng)日志文件的大小達(dá)到了設(shè)定的大小時(shí),就將日志文件記錄的內(nèi)容更新到元數(shù)據(jù)鏡像文件中,從而避免日志文件無限制的增加。
第三種,熱備管理節(jié)點(diǎn)法。該方法提供了一個(gè)熱備管理節(jié)點(diǎn),它備份主管理節(jié)點(diǎn)的所有數(shù)據(jù),隨時(shí)可以頂替主節(jié)點(diǎn)功能。主管理節(jié)點(diǎn)包括響應(yīng)客戶端請(qǐng)求,備份數(shù)據(jù)節(jié)點(diǎn)數(shù)據(jù)等功能。這兩個(gè)管理節(jié)點(diǎn)的元數(shù)據(jù)會(huì)保持一致,當(dāng)主管理節(jié)點(diǎn)發(fā)生故障宕機(jī)時(shí),熱備管理節(jié)點(diǎn)切換狀態(tài)且切換的時(shí)間很短,這就保證了系統(tǒng)可靠性。
上述的第一種和第二種方法是基于管理節(jié)點(diǎn)重啟恢復(fù)服務(wù)的方式,只是減少啟動(dòng)時(shí)間,并沒有做到熱備。上述的第三種方法雖然突破了重啟限制,但其依賴于獨(dú)立的NFS服務(wù)器來保障兩個(gè)管理節(jié)點(diǎn)的元數(shù)據(jù)一致性,并且熱備管理節(jié)點(diǎn)狀態(tài)的切換需要人工介入。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種雙機(jī)存儲(chǔ)系統(tǒng)和方法,在保證存儲(chǔ)系統(tǒng)的可靠性并提高系統(tǒng)可用性的同時(shí),維持雙機(jī)系統(tǒng)的數(shù)據(jù)一致性。該方法在讀寫過程中依據(jù)雙機(jī)數(shù)據(jù)版本號(hào)的不同狀態(tài)來區(qū)分?jǐn)?shù)據(jù)的一致和不一致情況。
為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種雙機(jī)存儲(chǔ)系統(tǒng),所述雙擊存儲(chǔ)系統(tǒng)的管理節(jié)點(diǎn)由第一和第二管理節(jié)點(diǎn)組成,所述第一和第二管理節(jié)點(diǎn)互為鏡像,用于存儲(chǔ)元數(shù)據(jù)信息以及數(shù)據(jù)塊版本信息,并監(jiān)聽客戶端請(qǐng)求,根據(jù)客戶端請(qǐng)求讀取數(shù)據(jù)提供給客戶端。
優(yōu)選地,所述雙機(jī)存儲(chǔ)系統(tǒng),其第一管理節(jié)點(diǎn),還用于存儲(chǔ)第二管理節(jié)點(diǎn)的數(shù)據(jù)塊版本信息。
優(yōu)選地,所述雙機(jī)存儲(chǔ)系統(tǒng),其第二管理節(jié)點(diǎn),還用于存儲(chǔ)第一管理節(jié)點(diǎn)的數(shù)據(jù)塊版本信息。
優(yōu)選地,所述雙機(jī)存儲(chǔ)系統(tǒng),其還包括用于在本地文件系統(tǒng)存儲(chǔ)數(shù)據(jù)的第一和第二數(shù)據(jù)節(jié)點(diǎn);所述第一數(shù)據(jù)節(jié)點(diǎn)用于向第一管理節(jié)點(diǎn)提供數(shù)據(jù);所述第二數(shù)據(jù)節(jié)點(diǎn)用于向第二管理節(jié)點(diǎn)提供數(shù)據(jù)。
優(yōu)選地,所述雙機(jī)存儲(chǔ)系統(tǒng),其版本信息包括本地?cái)?shù)據(jù)版本號(hào)和異地?cái)?shù)據(jù)版本號(hào),所述本地?cái)?shù)據(jù)塊版本號(hào)為第一或第二管理節(jié)點(diǎn)上該數(shù)據(jù)塊本地保存版本的對(duì)應(yīng)編號(hào);所述異地?cái)?shù)據(jù)塊版本號(hào)為第一或第二管理節(jié)點(diǎn)上該數(shù)據(jù)塊在相對(duì)的外部管理節(jié)點(diǎn)即第二或第一管理節(jié)點(diǎn)上保存版本的對(duì)應(yīng)編號(hào)。
優(yōu)選地,所述雙機(jī)存儲(chǔ)系統(tǒng),其本地版本號(hào)可能值為“0”和“-1”,其中“0”表示“本地?cái)?shù)據(jù)塊寫操作成功”,“-1”表示“本地?cái)?shù)據(jù)塊寫操作失敗”;“0”、“-1”和“?”,其中“0”表示“接收到外部管理節(jié)點(diǎn)的寫成功信息”,“-1”表示“接收到外部管理節(jié)點(diǎn)的寫失敗信息”,“?”表示“沒有接收到外部管理節(jié)點(diǎn)的反饋報(bào)告”。
按照本發(fā)明的另一方面,提供了一種雙機(jī)存儲(chǔ)方法,包括以下步驟:
讀操作:本地管理節(jié)點(diǎn)接收來自客戶端的讀請(qǐng)求,核對(duì)雙方管理節(jié)點(diǎn)的版本狀態(tài),判斷是否需要數(shù)據(jù)同步。處理讀請(qǐng)求后,根據(jù)讀請(qǐng)求完成請(qǐng)求給客戶端反饋報(bào)告。
寫操作:本地管理節(jié)點(diǎn)接收來自客戶端的寫請(qǐng)求,核對(duì)雙方管理節(jié)點(diǎn)的版本對(duì)狀態(tài),判斷是否需要數(shù)據(jù)同步。處理寫請(qǐng)求后,給客戶端和外部管理節(jié)點(diǎn)反饋報(bào)告,并根據(jù)寫請(qǐng)求完成情況和外部的反饋報(bào)告完成本地版本對(duì)的更新。
同步:每次數(shù)據(jù)塊的讀寫操作之前都會(huì)核對(duì)雙方管理節(jié)點(diǎn)的版本對(duì)的狀態(tài),發(fā)現(xiàn)需要同步時(shí),需要等待一次同步的完成后才能執(zhí)行讀寫操作。
總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下有益效果:
1、本發(fā)明提出的一種雙機(jī)存儲(chǔ)系統(tǒng)及方法,相對(duì)與現(xiàn)有的三個(gè)以上管理節(jié)點(diǎn),本發(fā)明框架結(jié)構(gòu)簡(jiǎn)單,不再依靠額外的設(shè)備來維持?jǐn)?shù)據(jù)一致性。雙機(jī)系統(tǒng)中的兩個(gè)管理節(jié)點(diǎn)是完全獨(dú)立的。當(dāng)一個(gè)管理節(jié)點(diǎn)失效時(shí),另外一個(gè)管理節(jié)點(diǎn)可以繼續(xù)對(duì)外提供有限的讀寫服務(wù),可避免管理節(jié)點(diǎn)的單點(diǎn)故障問題,保證了存儲(chǔ)系統(tǒng)的可靠性,提高了系統(tǒng)的可用性。
2、本發(fā)明提出的一種雙機(jī)系統(tǒng)的管理方法,每次通過比較雙機(jī)數(shù)據(jù)版本號(hào)的狀態(tài),來區(qū)分?jǐn)?shù)據(jù)的一致和不一致情況,從而維持了雙機(jī)系統(tǒng)的數(shù)據(jù)一致性。
附圖說明
圖1是本發(fā)明實(shí)施例提供的雙機(jī)存儲(chǔ)系統(tǒng)的框架圖;
圖2是本發(fā)明實(shí)施例提供的雙機(jī)存儲(chǔ)方法的寫請(qǐng)求的流程圖;其中,圖2a、圖2b和圖2c分別為3中情況寫操作的流程;
圖3是本發(fā)明實(shí)施例提供的雙機(jī)存儲(chǔ)方法讀請(qǐng)求下本地管理節(jié)點(diǎn)的操作步驟。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
本發(fā)明提供的雙機(jī)存儲(chǔ)系統(tǒng),包括:
第一和第二管理節(jié)點(diǎn),所述第一和第二管理節(jié)點(diǎn)互為鏡像,用于存儲(chǔ)元數(shù)據(jù)信息以及數(shù)據(jù)塊版本信息,并監(jiān)聽客戶端請(qǐng)求,根據(jù)客戶端請(qǐng)求讀取數(shù)據(jù)提供給客戶端;
所述第一管理節(jié)點(diǎn),還用于存儲(chǔ)第二管理節(jié)點(diǎn)的數(shù)據(jù)塊版本信息;
所述第二管理節(jié)點(diǎn),還用于存儲(chǔ)第一管理節(jié)點(diǎn)的數(shù)據(jù)塊版本信息;
所述系統(tǒng),還包括用于在本地文件系統(tǒng)存儲(chǔ)數(shù)據(jù)的第一和第二數(shù)據(jù)節(jié)點(diǎn);所述第一數(shù)據(jù)節(jié)點(diǎn)用于向第一管理節(jié)點(diǎn)提供數(shù)據(jù);所述第二數(shù)據(jù)節(jié)點(diǎn)用于向第二管理節(jié)點(diǎn)提供數(shù)據(jù)。
所述數(shù)據(jù)塊版本信息為版本號(hào),包括本地?cái)?shù)據(jù)塊版本號(hào)和異地?cái)?shù)據(jù)塊版本。所述本地?cái)?shù)據(jù)塊版本號(hào)為第一或第二管理節(jié)點(diǎn)上該數(shù)據(jù)塊本地保存版本的對(duì)應(yīng)編號(hào);所述異地?cái)?shù)據(jù)塊版本號(hào)為第一或第二管理節(jié)點(diǎn)上該數(shù)據(jù)塊在相對(duì)的外部管理節(jié)點(diǎn)即第二或第一管理節(jié)點(diǎn)上保存版本的對(duì)應(yīng)編號(hào)。具體例如,數(shù)據(jù)塊保存在數(shù)據(jù)節(jié)點(diǎn)A/B上的同時(shí)會(huì)在對(duì)應(yīng)的管理節(jié)點(diǎn)A/B上記錄著一對(duì)數(shù)值版本號(hào),形如(vera,verb)。其中vera為本地?cái)?shù)據(jù)塊版本,表示本地?cái)?shù)據(jù)塊的版本信息,verb為異地?cái)?shù)據(jù)塊版本,表示同一數(shù)據(jù)塊對(duì)應(yīng)的外部管理節(jié)點(diǎn)的版本信息。vera可能出現(xiàn)兩種值:“0”和“-1”,其中“0”表示“本地?cái)?shù)據(jù)塊寫操作成功”,“-1”表示“本地?cái)?shù)據(jù)塊寫操作失敗”;verb可能出現(xiàn)三種值:“0”、“-1”和“?”,其中“0”表示“接收到外部管理節(jié)點(diǎn)的寫成功信息”,“-1”表示“接收到外部管理節(jié)點(diǎn)的寫失敗信息”,“?”表示“沒有接收到外部管理節(jié)點(diǎn)的反饋報(bào)告”。第一管理節(jié)點(diǎn),節(jié)點(diǎn)A中記錄形式為(Avera,Averb),第二管理節(jié)點(diǎn),節(jié)點(diǎn)B中記錄形式為(Bvera,Bverb)。每個(gè)數(shù)據(jù)塊的版本號(hào)的初始狀態(tài)為(0,0)。
本發(fā)明提供的雙機(jī)存儲(chǔ)方法,包括以下步驟:
讀操作:本地管理節(jié)點(diǎn)接收來自客戶端的讀請(qǐng)求,核對(duì)雙方管理節(jié)點(diǎn)的版本狀態(tài),判斷是否需要數(shù)據(jù)同步。處理讀請(qǐng)求后,根據(jù)讀請(qǐng)求完成請(qǐng)求給客戶端反饋報(bào)告。
寫操作:本地管理節(jié)點(diǎn)接收來自客戶端的寫請(qǐng)求,核對(duì)雙方管理節(jié)點(diǎn)的版本對(duì)狀態(tài),判斷是否需要數(shù)據(jù)同步。處理寫請(qǐng)求后,給客戶端和外部管理節(jié)點(diǎn)反饋報(bào)告,并根據(jù)寫請(qǐng)求完成情況和外部的反饋報(bào)告完成本地版本對(duì)的更新。
同步:每次數(shù)據(jù)塊的讀寫操作之前都會(huì)核對(duì)雙方管理節(jié)點(diǎn)的版本對(duì)的狀態(tài),發(fā)現(xiàn)需要同步時(shí),需要等待一次同步的完成后才能執(zhí)行讀寫操作。
以下為實(shí)施例:
如圖1所示,為本發(fā)明所提供的雙機(jī)存儲(chǔ)系統(tǒng)的框架圖。第一管理節(jié)點(diǎn)A和第二管理節(jié)點(diǎn)B的地位是完全對(duì)等的,負(fù)責(zé)元數(shù)據(jù)信息以及數(shù)據(jù)塊版本信息進(jìn)行管理和維護(hù),監(jiān)聽與處理客戶端的請(qǐng)求,管理節(jié)點(diǎn)接收彼此版本信息的反饋并處理。第一管理節(jié)點(diǎn)A和第二管理節(jié)點(diǎn)B分別負(fù)責(zé)管理對(duì)應(yīng)的一個(gè)數(shù)據(jù)節(jié)點(diǎn)。數(shù)據(jù)節(jié)點(diǎn)A和數(shù)據(jù)節(jié)點(diǎn)B負(fù)責(zé)將數(shù)據(jù)塊存儲(chǔ)在本地文件系統(tǒng)中。
兩個(gè)管理節(jié)點(diǎn)同時(shí)接收并處理用戶的請(qǐng)求,這樣可以有效地避免單點(diǎn)故障問題。在此情況下,會(huì)因多結(jié)點(diǎn)而產(chǎn)生數(shù)據(jù)不一致的問題。本發(fā)明提供了一種雙機(jī)存儲(chǔ)方法,包括:
(1)版本號(hào)初始化步驟:數(shù)據(jù)塊保存在數(shù)據(jù)節(jié)點(diǎn)A/B上的同時(shí)會(huì)在對(duì)應(yīng)的管理節(jié)點(diǎn)A/B上記錄著一對(duì)數(shù)值版本號(hào),形如(vera,verb),其中vera表示本地?cái)?shù)據(jù)塊的版本信息,verb表示同一數(shù)據(jù)塊對(duì)應(yīng)的外部管理節(jié)點(diǎn)的版本信息。管理節(jié)點(diǎn)A中記錄形式為(Avera,Averb),管理節(jié)點(diǎn)B中記錄形式為(Bvera,Bverb)。每個(gè)數(shù)據(jù)塊的版本號(hào)的初始狀態(tài)為(0,0)。
(2)版本號(hào)修改步驟:每一次執(zhí)行數(shù)據(jù)塊的寫操作請(qǐng)求,本地管理節(jié)點(diǎn)會(huì)監(jiān)聽外部管理節(jié)點(diǎn)的寫操作反饋報(bào)告,同時(shí)處理寫操作請(qǐng)求,完成后會(huì)給客戶端和外部管理節(jié)點(diǎn)反饋報(bào)告。以管理節(jié)點(diǎn)A的版本對(duì)(Avera,Averb)為例,本地?cái)?shù)據(jù)塊寫操作成功后,Avera會(huì)被置為“0”,否則被置為“-1;Averb可能出現(xiàn)三種值:“0”、“-1”和“?”,其中“0”表示“接收到外部管理節(jié)點(diǎn)的寫成功信息”,“-1”表示“接收到外部管理節(jié)點(diǎn)的寫失敗信息”,“?”表示“沒有接收到外部管理節(jié)點(diǎn)的反饋報(bào)告”。
(3)數(shù)據(jù)同步步驟:每次數(shù)據(jù)塊的讀寫操作之前都會(huì)核對(duì)雙方管理節(jié)點(diǎn)的版本對(duì)的狀態(tài),發(fā)現(xiàn)需要同步時(shí),需要等待一次同步的完成后才能執(zhí)行讀寫操作。
(4)寫請(qǐng)求下本地管理節(jié)點(diǎn)的操作步驟:本地管理節(jié)點(diǎn)接收來自客戶端的寫請(qǐng)求,核對(duì)雙方管理節(jié)點(diǎn)的版本對(duì)狀態(tài),判斷是否需要數(shù)據(jù)同步。處理寫請(qǐng)求后,給客戶端和外部管理節(jié)點(diǎn)反饋報(bào)告,并根據(jù)寫請(qǐng)求完成情況和外部的反饋報(bào)告完成本地版本對(duì)的更新。
(5)讀請(qǐng)求下本地管理節(jié)點(diǎn)的操作步驟:本地管理節(jié)點(diǎn)接收來自客戶端的讀請(qǐng)求,核對(duì)雙方管理節(jié)點(diǎn)的版本對(duì)狀態(tài),判斷是否需要數(shù)據(jù)同步。處理讀請(qǐng)求后,根據(jù)讀請(qǐng)求完成情況給客戶端反饋報(bào)告。
其中,步驟(1)在接收到新數(shù)據(jù)塊的寫請(qǐng)求時(shí)運(yùn)行。步驟(2)在每次數(shù)據(jù)塊的寫操作時(shí)運(yùn)行。當(dāng)數(shù)據(jù)不一致需要同步時(shí),運(yùn)行步驟(3)。
進(jìn)一步,如圖2所示,所述步驟(4)具體包括:
(4.1)收到來自客戶端的寫請(qǐng)求,核對(duì)雙方管理節(jié)點(diǎn)的版本對(duì)狀態(tài),根據(jù)同一數(shù)據(jù)塊的兩個(gè)版本對(duì)狀態(tài)作出判斷,如果不需要同步,進(jìn)入步驟(4.5);如果需要本地同步,進(jìn)入步驟(4.2);如果需要外部同步,進(jìn)入步驟(4.3);否則,進(jìn)入步驟(4.4);
(4.2)本地需要同步,進(jìn)行同步,同步成功進(jìn)入步驟(4.6);否則進(jìn)入步驟(4.7);
(4.3)等待外部同步完成,進(jìn)入步驟(4.5);
(4.4)確認(rèn)版本號(hào)發(fā)現(xiàn)該數(shù)據(jù)塊無效,不執(zhí)行寫操作,給客戶端反饋報(bào)告;
(4.5)執(zhí)行寫操作,接收外部報(bào)告,并根據(jù)寫請(qǐng)求完成情況和外部的反饋報(bào)告完成本地版本對(duì)的更新。
(4.6)本地版本對(duì)更改為(0,0),執(zhí)行寫操作,接收外部報(bào)告,并根據(jù)寫請(qǐng)求完成情況和外部的反饋報(bào)告完成本地版本對(duì)的更新;
(4.7)本地版本對(duì)更改為(-1,0),不執(zhí)行寫操作但接收外部管理節(jié)點(diǎn)的反饋報(bào)告,根據(jù)外部的反饋報(bào)告完成本地版本對(duì)的更新。
進(jìn)一步,如圖3所示,所述步驟(5)具體包括:
(5.1)收到來自客戶端的讀請(qǐng)求,核對(duì)雙方管理節(jié)點(diǎn)的版本對(duì)狀態(tài),根據(jù)同一數(shù)據(jù)塊的兩個(gè)版本對(duì)狀態(tài)作出判斷,如果不需要同步,進(jìn)入步驟(5.5);如果需要本地同步,進(jìn)入步驟(5.2);如果需要外部同步,進(jìn)入步驟(5.3);否則,進(jìn)入步驟(5.4);
(5.2)本地需要同步,進(jìn)行同步,同步成功進(jìn)入步驟(5.6);否則進(jìn)入步驟(5.7);
(5.3)等待外部同步完成,進(jìn)入步驟(5.5);
(5.4)確認(rèn)版本號(hào)發(fā)現(xiàn)該數(shù)據(jù)塊無效,不執(zhí)行讀操作,給客戶端反饋報(bào)告;
(5.5)執(zhí)行讀操作;
(5.6)本地版本對(duì)更改為(0,0),執(zhí)行讀操作;
(5.7)本地版本對(duì)更改為(-1,0),不執(zhí)行讀操作,給客戶端反饋報(bào)告。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。