本發(fā)明涉及存儲領(lǐng)域,尤其涉及一種數(shù)據(jù)存儲方法以及存儲系統(tǒng)。
背景技術(shù):
上位機(jī)中運(yùn)算的數(shù)據(jù),大部分最終都要發(fā)送到存儲設(shè)備中進(jìn)行存儲。為了保證上位機(jī)將數(shù)據(jù)存儲到存儲設(shè)備過程的可靠性,存儲系統(tǒng)通常采用多控制器結(jié)構(gòu)。例如,如圖1所示,存儲系統(tǒng)120包括第一控制器121、第二控制器122以及存儲設(shè)備123。其中,第一控制器121用于與上位機(jī)110數(shù)據(jù)通信,第二控制器122同樣用于與上位機(jī)110數(shù)據(jù)通信,第一控制器121和第二控制器122之間通過PCIe/IB(nfiniband)連接,第一控制器121連接存儲設(shè)備123,第二控制器同樣連接存儲設(shè)備123。
由于上位機(jī)110與控制器之間讀寫數(shù)據(jù)的速度遠(yuǎn)比上位機(jī)110與存儲設(shè)備123之間讀寫數(shù)據(jù)的速度快,當(dāng)數(shù)據(jù)頻繁讀寫時(shí),上位機(jī)110不會將數(shù)據(jù)直接存儲到讀寫速度比較慢的存儲設(shè)備123中,而是向讀寫速度比較快的控制器發(fā)送數(shù)據(jù),直到控制器內(nèi)的數(shù)據(jù)達(dá)到一定的量或者上位機(jī)110確定要將數(shù)據(jù)存儲到存儲設(shè)備123時(shí),控制器將控制器內(nèi)的數(shù)據(jù)發(fā)送給存儲設(shè)備123進(jìn)行存儲。例如,上位機(jī)110先將數(shù)據(jù)發(fā)送給第一控制器121和第二控制器122中的任意一個(gè)控制器,接收到數(shù)據(jù)的控制器會將接收到的數(shù)據(jù)存儲在本控制器的緩存中,以便于和上位機(jī)110進(jìn)行交互。此外,為了提高數(shù)據(jù)的可靠性,接收到數(shù)據(jù)的控制器將數(shù)據(jù)通過PCIe/IB(nfiniband)等通路傳輸?shù)搅硪粋€(gè)控制器的內(nèi)存中進(jìn)行存儲以獲得一份鏡像數(shù)據(jù)來進(jìn)行備份。最后,當(dāng)數(shù)據(jù)達(dá)到一定的量或者上位機(jī)110確定將數(shù)據(jù)存儲到存儲設(shè)備123時(shí),控制器將內(nèi)存中的數(shù)據(jù)處理后發(fā)送給存儲設(shè)備123進(jìn)行存儲,從而提高數(shù)據(jù)讀寫效率。
但是,在這種方式下,控制器的內(nèi)存中必須預(yù)留鏡像數(shù)據(jù)存儲的空間,以容納其他控制器發(fā)送過來的鏡像數(shù)據(jù),所以對控制器的內(nèi)存的容量要求比較大。而且,由于PCIe/IB(nfiniband)通路的帶寬是有限的,當(dāng)鏡像數(shù)據(jù)較多時(shí),會 給PCIe/IB(nfiniband)通路的正常數(shù)據(jù)傳輸帶來壓力。最后,當(dāng)其中一個(gè)控制器出現(xiàn)問題時(shí),所有數(shù)據(jù)都只能通過剩下的控制器進(jìn)行存儲,為了保證數(shù)據(jù)的可靠性,剩下的控制器不會將數(shù)據(jù)緩存在本控制器中,而是直接寫入到存儲設(shè)備中,大大降低了讀寫的速度。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例所要解決的技術(shù)問題在于,提供一種存儲系統(tǒng)以及數(shù)據(jù)存儲方法,實(shí)現(xiàn)了減少對內(nèi)存容量的要求。
第一方面,本發(fā)明提供了一種數(shù)據(jù)存儲方法,包括:包含至少第一控制器以及第二控制器在內(nèi)的至少兩個(gè)控制器、存儲設(shè)備以及包含第一緩存設(shè)備以及第二緩存設(shè)備在內(nèi)的至少兩個(gè)緩存設(shè)備,所述第一控制器用于與上位機(jī)進(jìn)行通信,所述第一控制器還分別連接所述存儲設(shè)備、所述第一緩存設(shè)備以及所述第二緩存設(shè)備,所述第二控制器用于與上位機(jī)進(jìn)行通信,所述第二控制器還分別連接所述存儲設(shè)備、所述第一緩存設(shè)備以及所述第二緩存設(shè)備,所述第一控制器連接所述第二控制器,所述第一緩存設(shè)備中設(shè)置有第一歸屬區(qū)域以及第二歸屬區(qū)域,所述第二緩存設(shè)備中設(shè)置有第一歸屬區(qū)域以及第二歸屬區(qū)域,
所述第一歸屬區(qū)域的屬性為:所述第一控制器對所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中的第一歸屬區(qū)域可進(jìn)行讀取操作和寫操作,所述第二控制器對所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中的第一歸屬區(qū)域可進(jìn)行讀取操作但不能進(jìn)行寫操作,
所述第二歸屬區(qū)域的屬性為:所述第二控制器對所述第一緩存設(shè)備中的第二歸屬區(qū)域以及所述第二緩存設(shè)備中的第二歸屬區(qū)域可進(jìn)行讀取操作和寫操作,所述第一控制器對所述第一緩存設(shè)備中的第二歸屬區(qū)域以及所述第二緩存設(shè)備中的第二歸屬區(qū)域可進(jìn)行讀取操作但不能進(jìn)行寫操作;
所述第一控制器接收所述上位機(jī)所發(fā)送的目標(biāo)數(shù)據(jù);
所述第一控制器根據(jù)所述目標(biāo)數(shù)據(jù)中的歸屬信息判斷所述目標(biāo)數(shù)據(jù)是否屬于所述第一控制器處理;
如果否,則所述第一控制器將所述目標(biāo)數(shù)據(jù)轉(zhuǎn)發(fā)至所述第二控制器,如果是,則所述第一控制器將所述目標(biāo)數(shù)據(jù)發(fā)送至所述第一緩存設(shè)備或所述第二緩存設(shè)備中的第一歸屬區(qū)域進(jìn)行存儲以獲得第一鏡像數(shù)據(jù);
在需要將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到所述存儲設(shè)備時(shí),所述第一控制器將所述第一緩存設(shè)備和所述第二緩存設(shè)備的第一歸屬區(qū)域中的包含所述目標(biāo)數(shù)據(jù)在內(nèi)的由所述第一控制器處理之后的數(shù)據(jù)存儲到所述存儲設(shè)備中。
結(jié)合第一方面,本發(fā)明第一方面的第一種可能的實(shí)施方式中,所述方法還包括:
如果所述第一緩存設(shè)備發(fā)生故障,則所述第一控制器以及所述第二控制器將所述第一緩存設(shè)備中的數(shù)據(jù)轉(zhuǎn)移至所述第二緩存設(shè)備。
結(jié)合第一方面,本發(fā)明第一方面的第二種可能的實(shí)施方式中,所述方法還包括:
如果所述第一控制器將所述目標(biāo)數(shù)據(jù)發(fā)送給所述第一緩存設(shè)備以獲得所述第一鏡像數(shù)據(jù),則所述第一控制器還將所述目標(biāo)數(shù)據(jù)發(fā)送給所述第二緩存設(shè)備以獲得所述第二鏡像數(shù)據(jù)。
結(jié)合第一方面或第一方面的第一種可能的實(shí)施方式或第一方面的第二種可能的實(shí)施方式,本發(fā)明第一方面的第三種可能的實(shí)施方式中,當(dāng)所述第一控制器出現(xiàn)故障時(shí),所述第二控制器修改所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中的第一歸屬區(qū)域的屬性為:所述第二控制器對所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中的第一歸屬區(qū)域可進(jìn)行讀取操作和寫操作,
所述第二控制器讀取所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中的第一歸屬區(qū)域中的數(shù)據(jù),并存儲到所述存儲設(shè)備中;
所述第二控制器接收到上位機(jī)發(fā)送的數(shù)據(jù)后,可以將上位機(jī)發(fā)送的數(shù)據(jù)發(fā)送到所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中第一歸屬區(qū)域進(jìn)行存儲。
結(jié)合第一方面或第一方面的第一種可能的實(shí)施方式或第一方面的第二種可能的實(shí)施方式,本發(fā)明第一方面的第四種可能的實(shí)施方式中,如果所述第一控制器和所述第二控制器發(fā)生故障,當(dāng)?shù)谌刂破魈鎿Q所述第一控制器,第四控制器替換所述第二控制器后,所述第三控制器從所述第一緩存設(shè)備中的第一歸屬區(qū)域和/或所述第二緩存設(shè)備中的第一歸屬區(qū)域讀取所述第一控制器存儲的數(shù)據(jù),所述第四控制器從所述第一緩存設(shè)備中的第二歸屬區(qū)域和/或所述第二緩存設(shè)備中的第二歸屬區(qū)域讀取所述第二控制器存儲的數(shù)據(jù),以恢復(fù)數(shù)據(jù)業(yè)務(wù)。
第二方面,本發(fā)明提供了一種存儲系統(tǒng),包括:包含至少第一控制器以及第二控制器在內(nèi)的至少兩個(gè)控制器、存儲設(shè)備以及包含第一緩存設(shè)備以及第二緩存設(shè)備在內(nèi)的至少兩個(gè)緩存設(shè)備,所述第一控制器用于與上位機(jī)進(jìn)行通信,所述第一控制器還分別連接所述存儲設(shè)備、所述第一緩存設(shè)備以及所述第二緩存設(shè)備,所述第二控制器用于與上位機(jī)進(jìn)行通信,所述第二控制器還分別連接所述存儲設(shè)備、所述第一緩存設(shè)備以及所述第二緩存設(shè)備,所述第一控制器連接所述第二控制器,所述第一緩存設(shè)備中設(shè)置有第一歸屬區(qū)域以及第二歸屬區(qū)域,所述第二緩存設(shè)備中設(shè)置有第一歸屬區(qū)域以及第二歸屬區(qū)域,
所述第一歸屬區(qū)域的屬性為:所述第一控制器對所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中的第一歸屬區(qū)域可進(jìn)行讀取操作和寫操作,所述第二控制器對所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中的第一歸屬區(qū)域可進(jìn)行讀取操作但不能進(jìn)行寫操作,
所述第二歸屬區(qū)域的屬性為:所述第二控制器對所述第一緩存設(shè)備中的第二歸屬區(qū)域以及所述第二緩存設(shè)備中的第二歸屬區(qū)域可進(jìn)行讀取操作和寫操作,所述第一控制器對所述第一緩存設(shè)備中的第二歸屬區(qū)域以及所述第二緩存設(shè)備中的第二歸屬區(qū)域可進(jìn)行讀取操作但不能進(jìn)行寫操作;
所述第一控制器用于接收所述上位機(jī)所發(fā)送的目標(biāo)數(shù)據(jù);
所述第一控制器用于根據(jù)所述目標(biāo)數(shù)據(jù)中的歸屬信息判斷所述目標(biāo)數(shù)據(jù)是否屬于所述第一控制器處理,在判斷結(jié)果為否時(shí),將所述目標(biāo)數(shù)據(jù)轉(zhuǎn)發(fā)至所述第二控制器,在判斷結(jié)果為是時(shí),將所述目標(biāo)數(shù)據(jù)發(fā)送至所述第一緩存設(shè)備或所述第二緩存設(shè)備中的第一歸屬區(qū)域進(jìn)行存儲以獲得第一鏡像數(shù)據(jù);
所述第一控制器還用于在需要將數(shù)據(jù)從緩存設(shè)備存儲到所述存儲設(shè)備時(shí),將所述第一緩存設(shè)備和所述第二緩存設(shè)備的第一歸屬區(qū)域中的包含所述目標(biāo)數(shù)據(jù)在內(nèi)的由所述第一控制器處理之后的數(shù)據(jù)存儲到所述存儲設(shè)備中。
結(jié)合第二方面,本發(fā)明第二方面的第一種可能的實(shí)施方式中,所述第一控制器以及所述第二控制器用于在所述第一緩存設(shè)備發(fā)生故障時(shí),將所述第一緩存設(shè)備中的數(shù)據(jù)轉(zhuǎn)移至所述第二緩存設(shè)備。
結(jié)合第二方面,本發(fā)明第二方面的第二種可能的實(shí)施方式中,所述第一控制器還用于在所述第一控制器將所述目標(biāo)數(shù)據(jù)發(fā)送給所述第一緩存設(shè)備以獲得所述第一鏡像數(shù)據(jù)時(shí),將所述目標(biāo)數(shù)據(jù)發(fā)送給所述第二緩存設(shè)備以獲得所述第 二鏡像數(shù)據(jù)。
結(jié)合第二方面或第二方面的第一種可能的實(shí)施方式或第二方面的第二種可能的實(shí)施方式,本發(fā)明第二方面的第三種可能的實(shí)施方式中,當(dāng)所述第一控制器出現(xiàn)故障時(shí),所述第二控制器修改所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中的第一歸屬區(qū)域的屬性為:所述第二控制器對所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中的第一歸屬區(qū)域可進(jìn)行讀取操作和寫操作,
所述第二控制器用于讀取所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中的第一歸屬區(qū)域中的數(shù)據(jù),并存儲到所述存儲設(shè)備中;
所述第二控制器還用于接收到上位機(jī)發(fā)送的數(shù)據(jù)后,可以將上位機(jī)發(fā)送的數(shù)據(jù)發(fā)送到所述第一緩存設(shè)備中的第一歸屬區(qū)域以及所述第二緩存設(shè)備中第一歸屬區(qū)域進(jìn)行存儲。
結(jié)合第二方面或第二方面的第一種可能的實(shí)施方式或第二方面的第二種可能的實(shí)施方式,本發(fā)明第二方面的第四種可能的實(shí)施方式中,在所述第一控制器和所述第二控制器發(fā)生故障,當(dāng)?shù)谌刂破魈鎿Q所述第一控制器,第四控制器替換所述第二控制器后,
所述第三控制器用于從所述第一緩存設(shè)備中的第一歸屬區(qū)域和/或所述第二緩存設(shè)備中的第一歸屬區(qū)域讀取所述第一控制器存儲的數(shù)據(jù);
所述第四控制器用于從所述第一緩存設(shè)備中的第二歸屬區(qū)域和/或所述第二緩存設(shè)備中的第二歸屬區(qū)域讀取所述第二控制器存儲的數(shù)據(jù),以恢復(fù)數(shù)據(jù)業(yè)務(wù)。
通過實(shí)施本發(fā)明實(shí)施例,能夠另外設(shè)置緩存設(shè)備并將鏡像數(shù)據(jù)存儲在緩存設(shè)備中,則控制器無需為鏡像數(shù)據(jù)提供存儲空間,從而減少對控制器內(nèi)存大小的要求。而且,當(dāng)上位機(jī)發(fā)送的數(shù)據(jù)到達(dá)所屬的控制器后,不需要通過PCIe/IB(nfiniband)通路將數(shù)據(jù)發(fā)送至另一個(gè)控制器,則能減輕兩個(gè)控制器之間的PCIe/IB(nfiniband)通路的數(shù)據(jù)傳輸?shù)膲毫?。最后,?dāng)其中一個(gè)控制器出現(xiàn)問題時(shí),另一個(gè)控制器可以把上位機(jī)發(fā)送的數(shù)據(jù)寫到緩存設(shè)備中以保證數(shù)據(jù)可靠性,而且,控制器不需要將數(shù)據(jù)直接寫入到存儲設(shè)備中,從而大大提高了寫數(shù)據(jù)的速度。而且,第一控制器不能寫屬于第二控制器可以寫的第二歸屬區(qū)域,第二控制器不能寫屬于第一控制器可以寫的第一歸屬區(qū)域,即,第一控制器和第二控制器可以進(jìn)行寫操作的存儲空間是互相獨(dú)立的,可以防止兩個(gè)不同的控制 器同時(shí)對同一存儲單元進(jìn)行寫操作而造成的沖突。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是現(xiàn)有技術(shù)存儲系統(tǒng)一實(shí)施方式的結(jié)構(gòu)示意圖;
圖2是本發(fā)明存儲系統(tǒng)一種可能的實(shí)施方式的結(jié)構(gòu)示意圖;
圖3是本發(fā)明存儲系統(tǒng)中緩存設(shè)備中第一歸屬區(qū)域和第二歸屬區(qū)域的示意圖;
圖4是本發(fā)明存儲系統(tǒng)中緩存設(shè)備一實(shí)施方式的結(jié)構(gòu)示意圖;
圖5是本發(fā)明存儲系統(tǒng)中緩存設(shè)備另一實(shí)施方式的結(jié)構(gòu)示意圖;
圖6是本發(fā)明數(shù)據(jù)存儲方法一實(shí)施方式的流程圖;
圖7是本發(fā)明數(shù)據(jù)存儲方法另一實(shí)施方式的流程圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
需要說明的是,在本發(fā)明實(shí)施例中使用的術(shù)語是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本發(fā)明。在本發(fā)明實(shí)施例和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
參閱圖2,圖2是本發(fā)明存儲系統(tǒng)一種可能的實(shí)施方式的結(jié)構(gòu)示意圖。本實(shí)施方式的存儲系統(tǒng)220包括:第一控制器221、第二控制器222、存儲設(shè)備223、第一緩存設(shè)備224以及第二緩存設(shè)備225。其中,第一緩存設(shè)備224和第二緩存 設(shè)備225均是多端口設(shè)備,這里,第一緩存設(shè)備224和第二緩存設(shè)備225均具有第一端口以及第二端口兩個(gè)端口。
第一控制器221用于連接上位機(jī)210,第一控制器221還分別連接存儲設(shè)備223、第一緩存設(shè)備224的第一端口以及第二緩存設(shè)備225的第一端口,第一控制器221通過PCIe/IB(nfiniband)連接第二控制器222,第二控制器222用于連接上位機(jī)210,第二控制器222連接存儲設(shè)備223、第一緩存設(shè)備224的第二端口以及第二緩存設(shè)備225的第二端口。其中,第一控制器221與第一緩存設(shè)備224的第一端口以及第二緩存設(shè)備225的第一端口之間,第二控制器222與第一緩存設(shè)備224的第二端口以及第二緩存設(shè)備225的第二端口之間都可以通過PCIe/IB(nfiniband)連接。在其他的實(shí)施方式中,也可以通過其他總線進(jìn)行連接,本發(fā)明不作具體限定。
上位機(jī)210可以選擇性向第一控制器221和第二控制器222中的任意一個(gè)控制器發(fā)送目標(biāo)數(shù)據(jù)。由于一個(gè)數(shù)據(jù)不能同時(shí)被兩個(gè)控制器進(jìn)行處理,所以,在目標(biāo)數(shù)據(jù)中設(shè)置了目標(biāo)數(shù)據(jù)的歸屬信息,控制器可以根據(jù)這個(gè)歸屬信息判斷目標(biāo)數(shù)據(jù)是否屬于自己處理。假設(shè)接收到目標(biāo)數(shù)據(jù)的控制器為第一控制器221,則第一控制器221根據(jù)目標(biāo)數(shù)據(jù)中的所屬控制器的信息判斷目標(biāo)數(shù)據(jù)是否屬于第一控制器221處理。如果目標(biāo)數(shù)據(jù)不屬于第一控制器221處理,則第一控制器221通過PCIe/IB(nfiniband)將目標(biāo)數(shù)據(jù)轉(zhuǎn)發(fā)給第二控制器222,再由第二控制器222根據(jù)目標(biāo)數(shù)據(jù)中的所屬控制器的信息判斷目標(biāo)數(shù)據(jù)是否屬于第二控制器222處理。如果目標(biāo)數(shù)據(jù)屬于第一控制器221處理,則第一控制器221會將目標(biāo)數(shù)據(jù)發(fā)送給第一緩存設(shè)備224和第二緩存設(shè)備225中的一個(gè)緩存設(shè)備進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。
當(dāng)上位機(jī)210選擇向第二控制器222發(fā)送目標(biāo)數(shù)據(jù)時(shí),第二控制器222也進(jìn)行類似的操作。
在需要將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到存儲設(shè)備223時(shí),例如,緩存設(shè)備中的數(shù)據(jù)達(dá)到閾值,或者上位機(jī)210下指令將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到存儲設(shè)備223時(shí),第一控制器221會將第一緩存設(shè)備224和第二緩存設(shè)備225中的包含目標(biāo)數(shù)據(jù)在內(nèi)由第一控制器221進(jìn)行處理的數(shù)據(jù)存儲到存儲設(shè)備223中。第二控制器222也會將第一緩存設(shè)備224和第二緩存設(shè)備225中的由第二控制器222處理的數(shù)據(jù)存儲到存儲設(shè)備223中。
如果第一緩存設(shè)備224發(fā)生非毀滅性故障,則第一控制器221以及第二控 制器222可以將第一緩存設(shè)備224中的數(shù)據(jù)轉(zhuǎn)移至第二緩存設(shè)備225,相反,如果第二緩存設(shè)備225發(fā)生故障,則第一控制器221以及第二控制器222可以將第二緩存設(shè)備225中的數(shù)據(jù)轉(zhuǎn)移至第一緩存設(shè)備224,從而提高了數(shù)據(jù)的安全性。
在本實(shí)施方式中,在第一控制器221和第二控制器222之外另外設(shè)置了第一緩存設(shè)備224以及第二緩存設(shè)備225。當(dāng)?shù)谝豢刂破?21或第二控制器222接收到上位機(jī)210所發(fā)送的目標(biāo)數(shù)據(jù)時(shí),第一控制器221或第二控制器222可以將目標(biāo)數(shù)據(jù)轉(zhuǎn)發(fā)至第一緩存設(shè)備224或者第二緩存設(shè)備225中進(jìn)行存儲從而獲得第一鏡像數(shù)據(jù)。所以,當(dāng)目標(biāo)數(shù)據(jù)出現(xiàn)問題時(shí),還可以使用作為備份的第一鏡像數(shù)據(jù),提高了數(shù)據(jù)的可靠性。
在另一種實(shí)施方式中,第一控制器221接收到上位機(jī)210所發(fā)送的目標(biāo)數(shù)據(jù)后,除了將目標(biāo)數(shù)據(jù)發(fā)送至第一緩存設(shè)備224和第二緩存設(shè)備225中的一個(gè)緩存設(shè)備進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)外,第一控制器221還可以將目標(biāo)數(shù)據(jù)發(fā)送至另一個(gè)緩存設(shè)備中進(jìn)行存儲,從而得到第二鏡像數(shù)據(jù)。此時(shí),第一緩存設(shè)備224和第二緩存設(shè)備225中各有一份數(shù)據(jù),即使其中一個(gè)緩存設(shè)備中的數(shù)據(jù)出現(xiàn)了問題,還有另一個(gè)緩存設(shè)備中的數(shù)據(jù)可以使用,從而大大提升了數(shù)據(jù)的可靠性。
如圖3所示,在另一實(shí)施方式中,第一緩存設(shè)備224和第二緩存設(shè)備225都可以設(shè)置有第一歸屬區(qū)域以及第二歸屬區(qū)域。其中,第一歸屬區(qū)域的屬性為:第一控制器221對第一歸屬區(qū)域可進(jìn)行讀取操作和寫操作,第二控制器222對第一歸屬區(qū)域可進(jìn)行讀取操作但不能進(jìn)行寫操作。第二歸屬區(qū)域的屬性為:第二控制器222對第二歸屬區(qū)域可進(jìn)行讀取操作和寫操作,第一控制器221對第二歸屬區(qū)域可進(jìn)行讀取操作但不能進(jìn)行寫操作。所以,上述的第一控制器221接收到目標(biāo)數(shù)據(jù)后,第一控制器221將目標(biāo)數(shù)據(jù)發(fā)送給第一緩存設(shè)備224和第二緩存設(shè)備225中的一個(gè)緩存設(shè)備進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)具體為:第一控制器221將目標(biāo)數(shù)據(jù)發(fā)送給第一緩存設(shè)備224和第二緩存設(shè)備225中的一個(gè)緩存設(shè)備的第一歸屬區(qū)域進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。如果接收到目標(biāo)數(shù)據(jù)的是第二控制器222,則第二控制器222會將目標(biāo)數(shù)據(jù)發(fā)送給第一緩存設(shè)備224和第二緩存設(shè)備225中的一個(gè)緩存設(shè)備的第二歸屬區(qū)域進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。
在另一種實(shí)施方式中,當(dāng)?shù)谝豢刂破?21出現(xiàn)故障時(shí),可由第二控制器222 讀取第一緩存設(shè)備224中的第一歸屬區(qū)域以及第二緩存設(shè)備225中的第一歸屬區(qū)域中的數(shù)據(jù),并存儲到存儲設(shè)備223中;第二控制器222接收到上位機(jī)210發(fā)送的數(shù)據(jù)后,可以將上位機(jī)210發(fā)送的數(shù)據(jù)發(fā)送到第一緩存設(shè)備224中的第一歸屬區(qū)域以及第二緩存設(shè)備225中第一歸屬區(qū)域進(jìn)行存儲。
此時(shí),即使其中一個(gè)控制器發(fā)生了故障,另一個(gè)控制器也可以接管發(fā)生故障的控制器,不會造成上位機(jī)210和存儲設(shè)備223之間不能正常進(jìn)行讀寫操作。
當(dāng)?shù)谝豢刂破?21的故障排除了后,或者第一控制器221更換為新的控制器后,第一控制器221可以從第一緩存設(shè)備224和/或第二緩存設(shè)備225中讀取故障前存儲的數(shù)據(jù),從而快速恢復(fù)數(shù)據(jù)業(yè)務(wù)。
在另一種實(shí)施方式中,如果第一控制器221和第二控制器222都發(fā)生故障,當(dāng)?shù)谌刂破魈鎿Q第一控制器221,第四控制器替換第二控制器222后,第三控制器從第一緩存設(shè)備224和/或第二緩存設(shè)備225的第一歸屬區(qū)域讀取第一控制器221故障前存儲的數(shù)據(jù),第四控制器從第一緩存設(shè)備224和/或第二緩存設(shè)備225的第二歸屬區(qū)域讀取第二控制器222故障前存儲的數(shù)據(jù),以恢復(fù)數(shù)據(jù)業(yè)務(wù)。
參閱圖4,為了進(jìn)一步提高數(shù)據(jù)的可靠性,可以使得緩存設(shè)備400(可以是上述的第一緩存設(shè)備,也可以是第二緩存設(shè)備)具有掉電保護(hù)功能。只有一份鏡像數(shù)據(jù)存儲在第一緩存設(shè)備或者第二緩存設(shè)備時(shí),可以相應(yīng)地只令第一緩存設(shè)備或者第二緩存設(shè)備具有掉電保護(hù)功能。如果第一緩存設(shè)備和第二緩存設(shè)備均具有一份鏡像數(shù)據(jù)時(shí),則需要令第一緩存設(shè)備和第二緩存設(shè)備均具有掉電保護(hù)功能。
為了使緩存設(shè)備400具有掉電保護(hù)功能,在一種具體的實(shí)施方式中,緩存設(shè)備400包括控制芯片410、非易失存儲器420以及隨機(jī)存取存儲器430,控制芯片410分別連接非易失存儲器420以及隨機(jī)存取存儲器430。其中,非易失存儲器420的其中一部分存儲空間作為第一空間,另一部分存儲空間作為第二空間。隨機(jī)存取存儲器430的一部分存儲空間作為第一歸屬區(qū)域,一部分空間作為第二歸屬區(qū)域。
當(dāng)緩存設(shè)備400掉電時(shí),控制芯片410從隨機(jī)存取存儲器420的第一歸屬區(qū)域中取出數(shù)據(jù),并將從第一歸屬區(qū)域中取出的數(shù)據(jù)存儲到非易失存儲器430的第一空間,以及,從隨機(jī)存取存儲器420的第二歸屬區(qū)域中取出數(shù)據(jù),并將從第二歸屬區(qū)域取出的數(shù)據(jù)存儲到非易失存儲器430的第二空間。
當(dāng)緩存設(shè)備400重新上電后,控制芯片410從非易失存儲器430的第一空 間取出數(shù)據(jù),并將從第一空間取出的數(shù)據(jù)還原到隨機(jī)存取存儲器420的第一歸屬區(qū)域,以及,從非易失存儲器430的第二空間取出數(shù)據(jù),并將從第二空間取出的數(shù)據(jù)還原到隨機(jī)存取存儲器的第二歸屬區(qū)域,以恢復(fù)數(shù)據(jù)業(yè)務(wù)。
在另一種具體的實(shí)施方式中,當(dāng)緩存設(shè)備400掉電時(shí),控制芯片410從隨機(jī)存取存儲器420的第一歸屬區(qū)域中取出數(shù)據(jù),為從第一歸屬區(qū)域中取出的數(shù)據(jù)添加第一標(biāo)簽,并將添加第一標(biāo)簽后的數(shù)據(jù)存儲到非易失存儲器430中,以及,從隨機(jī)存取存儲器420的第二歸屬區(qū)域中取出數(shù)據(jù),為從第二歸屬區(qū)域中取出的數(shù)據(jù)添加第二標(biāo)簽,并將添加第二標(biāo)簽后的數(shù)據(jù)存儲到非易失存儲器430中。
當(dāng)緩存設(shè)備400重新上電后,控制芯片410從非易失存儲器430中取出數(shù)據(jù),并將從非易失存儲器430中取出數(shù)據(jù)中標(biāo)簽為第一標(biāo)簽的數(shù)據(jù)還原到隨機(jī)存取存儲器420的第一歸屬區(qū)域中,將從非易失存儲器430中取出數(shù)據(jù)中標(biāo)簽為第二標(biāo)簽的數(shù)據(jù)還原到隨機(jī)存取存儲器430的第二歸屬區(qū)域中。
參閱圖5,緩存設(shè)備400中的非易失存儲器以及隨機(jī)存取存儲器,也可以由磁性隨機(jī)存儲器450代替,磁性隨機(jī)存儲器450既有隨機(jī)存取存儲器存取速度快的特點(diǎn),又具有非易失存儲器掉電保存的特點(diǎn)。
可以理解的是,上面的實(shí)施方式中只以兩個(gè)控制器和兩個(gè)緩存設(shè)備為例進(jìn)行說明,在其他的實(shí)施方式中,控制器的數(shù)量可以為三個(gè)或者更多,此時(shí),緩存設(shè)備中的歸屬領(lǐng)域的數(shù)量也應(yīng)相應(yīng)增加,使得一個(gè)控制器對應(yīng)一個(gè)歸屬領(lǐng)域。而緩存設(shè)備的數(shù)量也可以為4個(gè)或者更多,本發(fā)明不作具體限定。
參閱圖6,圖6是本發(fā)明數(shù)據(jù)存儲方法一種可能的實(shí)施方式的流程圖。本實(shí)施方式從如圖2所示的存儲系統(tǒng)的角度出發(fā)來進(jìn)行描述。請結(jié)合圖2進(jìn)行理解,在本實(shí)施方式中,數(shù)據(jù)存儲方法包括如下步驟:
510:上位機(jī)210將目標(biāo)數(shù)據(jù)選擇性發(fā)送第一控制器221或者第二控制器222。
上位機(jī)210可以選擇性向第一控制器221和第二控制器222中的任意一個(gè)控制器發(fā)送目標(biāo)數(shù)據(jù)。由于一個(gè)數(shù)據(jù)不能同時(shí)被兩個(gè)控制器進(jìn)行處理,所以,在目標(biāo)數(shù)據(jù)中設(shè)置了目標(biāo)數(shù)據(jù)的歸屬信息,控制器可以根據(jù)這個(gè)歸屬信息判斷目標(biāo)數(shù)據(jù)是否屬于自己處理。如果上位機(jī)210將目標(biāo)數(shù)據(jù)發(fā)送給第一控制器221,則進(jìn)入步驟520;如果上位機(jī)210將目標(biāo)數(shù)據(jù)發(fā)送給第二控制器222,則進(jìn)入步 驟540。
520:第一控制器221根據(jù)目標(biāo)數(shù)據(jù)中的歸屬信息判斷目標(biāo)數(shù)據(jù)是否屬于第一控制器221處理。
第一控制器221在接收到目標(biāo)數(shù)據(jù)后,從目標(biāo)數(shù)據(jù)中獲取歸屬信息,并根據(jù)目標(biāo)數(shù)據(jù)信息判斷是否屬于第一控制器221處理。如果是屬于第一控制器221處理,進(jìn)入步驟530;如果不屬于第一控制器221處理,則轉(zhuǎn)發(fā)給第二控制器222,并進(jìn)入步驟540。
530:第一控制器221將目標(biāo)數(shù)據(jù)發(fā)送至第一緩存設(shè)備224或第二緩存設(shè)備225中進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。
第一控制器221可以選擇將目標(biāo)數(shù)據(jù)發(fā)送至第一緩存設(shè)備224中進(jìn)行存儲以獲得第一鏡像數(shù)據(jù),也可以選擇將目標(biāo)數(shù)據(jù)發(fā)送至第二緩存設(shè)備225中進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。在一具體的實(shí)施方式中,第一緩存設(shè)備224和第二緩存設(shè)備225都設(shè)置有第一歸屬區(qū)域以及第二歸屬區(qū)域。其中,第一歸屬區(qū)域的屬性為:第一控制器221對第一歸屬區(qū)域可進(jìn)行讀取操作和寫操作,第二控制器222對第一歸屬區(qū)域可進(jìn)行讀取操作但不能進(jìn)行寫操作。第二歸屬區(qū)域的屬性為:第二控制器222對第二歸屬區(qū)域可進(jìn)行讀取操作和寫操作,第一控制器221對第二歸屬區(qū)域可進(jìn)行讀取操作但不能進(jìn)行寫操作。所以,第一控制器221將目標(biāo)數(shù)據(jù)發(fā)送給第一緩存設(shè)備224和第二緩存設(shè)備225中的一個(gè)緩存設(shè)備的第一歸屬區(qū)域進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。然后,返回步驟510,直到需要將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到存儲設(shè)備223時(shí),進(jìn)入步驟560。
540:第二控制器222根據(jù)目標(biāo)數(shù)據(jù)中的歸屬信息判斷目標(biāo)數(shù)據(jù)是否屬于第二控制器222處理。
第二控制器222在接收到目標(biāo)數(shù)據(jù)后,從目標(biāo)數(shù)據(jù)中獲取歸屬信息,并根據(jù)目標(biāo)數(shù)據(jù)信息判斷是否屬于第二控制器222處理。如果是屬于第二控制器222處理,進(jìn)入步驟550;如果不屬于第二控制器222處理,則轉(zhuǎn)發(fā)目標(biāo)數(shù)據(jù)給第一控制器221,并進(jìn)入步驟520。
550:第二控制器222將目標(biāo)數(shù)據(jù)發(fā)送至第一緩存設(shè)備224或第二緩存設(shè)備225中進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。
第二控制器222可以選擇將目標(biāo)數(shù)據(jù)發(fā)送至第一緩存設(shè)備224中進(jìn)行存儲以獲得第一鏡像數(shù)據(jù),也可以選擇將目標(biāo)數(shù)據(jù)發(fā)送至第二緩存設(shè)備225中進(jìn)行 存儲以獲得第一鏡像數(shù)據(jù)。在一具體的實(shí)施方式中,第二控制器222將目標(biāo)數(shù)據(jù)發(fā)送給第一緩存設(shè)備224和第二緩存設(shè)備225中的一個(gè)緩存設(shè)備的第二歸屬區(qū)域進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。然后,返回步驟510,直到需要將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到存儲設(shè)備223時(shí),進(jìn)入步驟560。
560:第一控制器221以及第二控制器222將第一緩存設(shè)備224和第二緩存設(shè)備225中的數(shù)據(jù)存儲到存儲設(shè)備223中。
在需要將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到存儲設(shè)備223時(shí),例如,緩存設(shè)備中的數(shù)據(jù)達(dá)到閾值,或者上位機(jī)210下指令將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到存儲設(shè)備223時(shí),第一控制器221會將第一緩存設(shè)備224和第二緩存設(shè)備225中的由第一控制器221進(jìn)行處理的數(shù)據(jù)存儲到存儲設(shè)備223中。第二控制器222也會將第一緩存設(shè)備224和第二緩存設(shè)備225中的由第二控制器222處理的數(shù)據(jù)存儲到存儲設(shè)備223中。
可以理解,如果第一緩存設(shè)備224發(fā)生非毀滅性故障,則第一控制器221以及第二控制器222可以將第一緩存設(shè)備224中的數(shù)據(jù)轉(zhuǎn)移至第二緩存設(shè)備225,相反,如果第二緩存設(shè)備225發(fā)生故障,則第一控制器221以及第二控制器222可以將第二緩存設(shè)備225中的數(shù)據(jù)轉(zhuǎn)移至第一緩存設(shè)備224,從而提高了數(shù)據(jù)的安全性。
通過實(shí)施本發(fā)明實(shí)施例,能夠另外設(shè)置緩存設(shè)備并將鏡像數(shù)據(jù)存儲在緩存設(shè)備中,則控制器無需為鏡像數(shù)據(jù)提供存儲空間,從而減少對控制器內(nèi)存大小的要求。而且,鏡像數(shù)據(jù)不需要通過PCIe/IB(nfiniband)通路進(jìn)行傳輸,則能減輕PCIe/IB(nfiniband)通路的數(shù)據(jù)傳輸?shù)膲毫?。最后,控制器的?fù)荷減少了,即使其中一個(gè)控制器出現(xiàn)問題時(shí),控制器也不會因?yàn)樨?fù)荷太重而被迫將數(shù)據(jù)直接寫入到存儲設(shè)備中,從而大大提高了數(shù)據(jù)讀寫的速度。
而且,第一控制器不能寫屬于第二控制器可以寫的第二歸屬區(qū)域,第二控制器不能寫屬于第一控制器可以寫的第一歸屬區(qū)域,即,第一控制器和第二控制器可以進(jìn)行寫操作的存儲空間是互相獨(dú)立的,可以防止兩個(gè)不同的控制器同時(shí)對同一存儲單元進(jìn)行寫操作而造成的沖突。
參閱圖7,圖7是本發(fā)明數(shù)據(jù)存儲方法另一種可能的實(shí)施方式的流程圖。本實(shí)施方式從如圖2所示的存儲系統(tǒng)的角度出發(fā)來進(jìn)行描述。請結(jié)合圖2進(jìn)行理 解,在本實(shí)施方式中,數(shù)據(jù)存儲方法包括如下步驟:
610:上位機(jī)210將目標(biāo)數(shù)據(jù)選擇性發(fā)送第一控制器221或者第二控制器222。
上位機(jī)210可以選擇性向第一控制器221和第二控制器222中的任意一個(gè)控制器發(fā)送目標(biāo)數(shù)據(jù)。由于一個(gè)數(shù)據(jù)不能同時(shí)被兩個(gè)控制器進(jìn)行處理,所以,在目標(biāo)數(shù)據(jù)中設(shè)置了目標(biāo)數(shù)據(jù)的歸屬信息,控制器可以根據(jù)這個(gè)歸屬信息判斷目標(biāo)數(shù)據(jù)是否屬于自己處理。如果上位機(jī)210將目標(biāo)數(shù)據(jù)發(fā)送給第一控制器221,則進(jìn)入步驟620;如果上位機(jī)210將目標(biāo)數(shù)據(jù)發(fā)送給第二控制器222,則進(jìn)入步驟650。
620:第一控制器221根據(jù)目標(biāo)數(shù)據(jù)中的歸屬信息判斷目標(biāo)數(shù)據(jù)是否屬于第一控制器221處理。
第一控制器221在接收到目標(biāo)數(shù)據(jù)后,從目標(biāo)數(shù)據(jù)中獲取歸屬信息,并根據(jù)目標(biāo)數(shù)據(jù)信息判斷是否屬于第一控制器221處理。如果是屬于第一控制器221處理,進(jìn)入步驟630;如果不屬于第一控制器221處理,則轉(zhuǎn)發(fā)給第二控制器222,并進(jìn)入步驟640。
630:第一控制器221將目標(biāo)數(shù)據(jù)發(fā)送至第一緩存設(shè)備224中進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。
第一控制器221將目標(biāo)數(shù)據(jù)發(fā)送至第一緩存設(shè)備224中進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。在一具體的實(shí)施方式中,第一緩存設(shè)備224設(shè)置有第一歸屬區(qū)域以及第二歸屬區(qū)域。其中,第一歸屬區(qū)域的屬性為:第一控制器221對第一歸屬區(qū)域可進(jìn)行讀取操作和寫操作,第二控制器222對第一歸屬區(qū)域可進(jìn)行讀取操作但不能進(jìn)行寫操作。第二歸屬區(qū)域的屬性為:第二控制器222對第二歸屬區(qū)域可進(jìn)行讀取操作和寫操作,第一控制器221對第二歸屬區(qū)域可進(jìn)行讀取操作但不能進(jìn)行寫操作。所以,第一控制器221將目標(biāo)數(shù)據(jù)發(fā)送給第一緩存設(shè)備224的第一歸屬區(qū)域進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。
640:第一控制器221將目標(biāo)數(shù)據(jù)發(fā)送至第二緩存設(shè)備225中進(jìn)行存儲以獲得第二鏡像數(shù)據(jù)。
第一控制器221將目標(biāo)數(shù)據(jù)發(fā)送至第二緩存設(shè)備225中進(jìn)行存儲以獲得第二鏡像數(shù)據(jù)。在一具體的實(shí)施方式中,第一控制器221將目標(biāo)數(shù)據(jù)發(fā)送給第二緩存設(shè)備225的第一歸屬區(qū)域進(jìn)行存儲以獲得第二鏡像數(shù)據(jù)。然后,返回步驟610,直到需要將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到存儲設(shè)備223時(shí),進(jìn)入步驟680。
650:第二控制器222根據(jù)目標(biāo)數(shù)據(jù)中的歸屬信息判斷目標(biāo)數(shù)據(jù)是否屬于第二控制器222處理。
第二控制器222在接收到目標(biāo)數(shù)據(jù)后,從目標(biāo)數(shù)據(jù)中獲取歸屬信息,并根據(jù)目標(biāo)數(shù)據(jù)信息判斷是否屬于第二控制器222處理。如果是屬于第二控制器222處理,進(jìn)入步驟660;如果不屬于第二控制器222處理,則轉(zhuǎn)發(fā)目標(biāo)數(shù)據(jù)給第一控制器221,并進(jìn)入步驟620。
660:第二控制器222將目標(biāo)數(shù)據(jù)發(fā)送至第一緩存設(shè)備224中進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。
第二控制器222將目標(biāo)數(shù)據(jù)發(fā)送至第一緩存設(shè)備224中進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。在一具體的實(shí)施方式中,第二控制器222將目標(biāo)數(shù)據(jù)發(fā)送給第一緩存設(shè)備224的第二歸屬區(qū)域進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)。
670:第二控制器222將目標(biāo)數(shù)據(jù)發(fā)送至第二緩存設(shè)備225中進(jìn)行存儲以獲得第二鏡像數(shù)據(jù)。
第二控制器222將目標(biāo)數(shù)據(jù)發(fā)送至第二緩存設(shè)備225中進(jìn)行存儲以獲得第二鏡像數(shù)據(jù)。在一具體的實(shí)施方式中,第二控制器222將目標(biāo)數(shù)據(jù)發(fā)送給第二緩存設(shè)備225的第二歸屬區(qū)域進(jìn)行存儲以獲得第二鏡像數(shù)據(jù)。然后,返回步驟610,直到需要將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到存儲設(shè)備223時(shí),進(jìn)入步驟680。
680:第一控制器221以及第二控制器222將第一緩存設(shè)備224和第二緩存設(shè)備225中的數(shù)據(jù)存儲到存儲設(shè)備223中。
在需要將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到存儲設(shè)備223時(shí),例如,緩存設(shè)備中的數(shù)據(jù)達(dá)到閾值,或者上位機(jī)210下指令將緩存設(shè)備內(nèi)的數(shù)據(jù)存儲到存儲設(shè)備223時(shí),第一控制器221會將第一緩存設(shè)備224和第二緩存設(shè)備225中的由第一控制器221進(jìn)行處理的數(shù)據(jù)存儲到存儲設(shè)備223中。第二控制器222也會將第一緩存設(shè)備224和第二緩存設(shè)備225中的由第二控制器222處理的數(shù)據(jù)存儲到存儲設(shè)備223中。
在本實(shí)施方式中,第一控制器221接收到上位機(jī)210所發(fā)送的目標(biāo)數(shù)據(jù)后,除了將目標(biāo)數(shù)據(jù)發(fā)送至第一緩存設(shè)備224進(jìn)行存儲以獲得第一鏡像數(shù)據(jù)外,第一控制器221還可以將目標(biāo)數(shù)據(jù)發(fā)送至第二緩存設(shè)備225中進(jìn)行存儲,從而得到第二鏡像數(shù)據(jù)。此時(shí),第一緩存設(shè)備224和第二緩存設(shè)備225中各有一份數(shù)據(jù),即使其中一個(gè)緩存設(shè)備中的數(shù)據(jù)出現(xiàn)了問題,還有另一個(gè)緩存設(shè)備中的數(shù) 據(jù)可以使用,從而大大提升了數(shù)據(jù)的可靠性。
當(dāng)?shù)谝豢刂破?21出現(xiàn)故障時(shí),可由第二控制器222讀取第一緩存設(shè)備224中的第一歸屬區(qū)域以及第二緩存設(shè)備225中的第一歸屬區(qū)域中的數(shù)據(jù),并存儲到存儲設(shè)備223中;第二控制器222接收到上位機(jī)210發(fā)送的數(shù)據(jù)后,可以將上位機(jī)210發(fā)送的數(shù)據(jù)發(fā)送到第一緩存設(shè)備224中的第一歸屬區(qū)域以及第二緩存設(shè)備225中第一歸屬區(qū)域進(jìn)行存儲。
此時(shí),即使其中一個(gè)控制器發(fā)生了故障,另一個(gè)控制器也可以接管發(fā)生故障的控制器,不會造成上位機(jī)210和存儲設(shè)備223之間不能正常進(jìn)行讀寫操作。
當(dāng)?shù)谝豢刂破?21的故障排除了后,或者第一控制器221更換為新的控制器后,第一控制器221可以從第一緩存設(shè)備224和/或第二緩存設(shè)備225中讀取故障前存儲的數(shù)據(jù),從而快速恢復(fù)數(shù)據(jù)業(yè)務(wù)。
可以理解的是,如果第一控制器221和第二控制器222都發(fā)生故障,當(dāng)?shù)谌刂破魈鎿Q第一控制器221,第四控制器替換第二控制器222后,第三控制器從第一緩存設(shè)備224和/或第二緩存設(shè)備225的第一歸屬區(qū)域讀取第一控制器221故障前存儲的數(shù)據(jù),第四控制器從第一緩存設(shè)備224和/或第二緩存設(shè)備225的第二歸屬區(qū)域讀取第二控制器222故障前存儲的數(shù)據(jù),以恢復(fù)數(shù)據(jù)業(yè)務(wù)。
參閱圖4,為了進(jìn)一步提高數(shù)據(jù)的可靠性,可以使得緩存設(shè)備400(可以是上述的第一緩存設(shè)備,也可以是第二緩存設(shè)備)具有掉電保護(hù)功能。只有一份鏡像數(shù)據(jù)存儲在第一緩存設(shè)備或者第二緩存設(shè)備時(shí),可以相應(yīng)地只令第一緩存設(shè)備或者第二緩存設(shè)備具有掉電保護(hù)功能。如果第一緩存設(shè)備和第二緩存設(shè)備均具有一份鏡像數(shù)據(jù)時(shí),則需要令第一緩存設(shè)備和第二緩存設(shè)備均具有掉電保護(hù)功能。
為了使緩存設(shè)備400具有掉電保護(hù)功能,在一種具體的實(shí)施方式中,緩存設(shè)備400包括控制芯片410、非易失存儲器420以及隨機(jī)存取存儲器430,控制芯片410分別連接非易失存儲器420以及隨機(jī)存取存儲器430。其中,非易失存儲器420的其中一部分存儲空間作為第一空間,另一部分存儲空間作為第二空間。隨機(jī)存取存儲器430的一部分存儲空間作為第一歸屬區(qū)域,一部分空間作為第二歸屬區(qū)域。
當(dāng)緩存設(shè)備400掉電時(shí),控制芯片410從隨機(jī)存取存儲器420的第一歸屬區(qū)域中取出數(shù)據(jù),并將從第一歸屬區(qū)域中取出的數(shù)據(jù)存儲到非易失存儲器430的第一空間,以及,從隨機(jī)存取存儲器420的第二歸屬區(qū)域中取出數(shù)據(jù),并將 從第二歸屬區(qū)域取出的數(shù)據(jù)存儲到非易失存儲器430的第二空間。
當(dāng)緩存設(shè)備400重新上電后,控制芯片410從非易失存儲器430的第一空間取出數(shù)據(jù),并將從第一空間取出的數(shù)據(jù)還原到隨機(jī)存取存儲器420的第一歸屬區(qū)域,以及,從非易失存儲器430的第二空間取出數(shù)據(jù),并將從第二空間取出的數(shù)據(jù)還原到隨機(jī)存取存儲器的第二歸屬區(qū)域,以恢復(fù)數(shù)據(jù)業(yè)務(wù)。
在另一種具體的實(shí)施方式中,當(dāng)緩存設(shè)備400掉電時(shí),控制芯片410從隨機(jī)存取存儲器420的第一歸屬區(qū)域中取出數(shù)據(jù),為從第一歸屬區(qū)域中取出的數(shù)據(jù)添加第一標(biāo)簽,并將添加第一標(biāo)簽后的數(shù)據(jù)存儲到非易失存儲器430中,以及,從隨機(jī)存取存儲器420的第二歸屬區(qū)域中取出數(shù)據(jù),為從第二歸屬區(qū)域中取出的數(shù)據(jù)添加第二標(biāo)簽,并將添加第二標(biāo)簽后的數(shù)據(jù)存儲到非易失存儲器430中。
當(dāng)緩存設(shè)備400重新上電后,控制芯片410從非易失存儲器430中取出數(shù)據(jù),并將從非易失存儲器430中取出數(shù)據(jù)中標(biāo)簽為第一標(biāo)簽的數(shù)據(jù)還原到隨機(jī)存取存儲器420的第一歸屬區(qū)域中,將從非易失存儲器430中取出數(shù)據(jù)中標(biāo)簽為第二標(biāo)簽的數(shù)據(jù)還原到隨機(jī)存取存儲器430的第二歸屬區(qū)域中。
參閱圖5,緩存設(shè)備400中的非易失存儲器以及隨機(jī)存取存儲器,也可以由磁性隨機(jī)存儲器450代替,磁性隨機(jī)存儲器450既有隨機(jī)存取存儲器存取速度快的特點(diǎn),又具有非易失存儲器掉電保存的特點(diǎn)。
可以理解的是,上面的實(shí)施方式中只以兩個(gè)控制器和兩個(gè)緩存設(shè)備為例進(jìn)行說明,在其他的實(shí)施方式中,控制器的數(shù)量可以為三個(gè)或者更多,此時(shí),緩存設(shè)備中的歸屬領(lǐng)域的數(shù)量也應(yīng)相應(yīng)增加,使得一個(gè)控制器對應(yīng)一個(gè)歸屬領(lǐng)域。而緩存設(shè)備的數(shù)量也可以為4個(gè)或者更多,本發(fā)明不作具體限定。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計(jì)算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機(jī)存儲記憶體(Random Access Memory,RAM)等。
以上所揭露的僅為本發(fā)明一種較佳實(shí)施例而已,當(dāng)然不能以此來限定本發(fā)明之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分流 程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。