
本發明涉及IO緩存
技術領域:
,特別是涉及一種控制器緩存方法及存儲控制器。本發明還涉及一種多控制器存儲系統。
背景技術:
:存儲區域網絡(StorageAreaNetworkandSANProtocols,簡寫SAN,即存儲區域網絡及其協議)是一種高速網絡或子網絡,提供在計算機與存儲系統之間的數據傳輸。存儲設備是指一臺或多臺用以存儲計算機數據的磁盤設備,通常指磁盤陣列。現有的磁盤陣列通常包括兩個或多個控制器,俗稱雙控或多控。雙控一般采用緊耦合的物理硬件結構,即一般雙控存儲硬件呈現出來的是一個機器盒子;多控一般采用松耦合的物理結構,即一般由多個雙控,通過某種控制器/引擎互聯技術,將多個雙控直接連接起來,使其對外呈現為一個整體。存儲系統和其它計算機系統一樣,一般通過物理內存來緩存讀寫數據,IO讀取進來的數據先緩存在控制器內,當緩存的數據達到一定量時統一刷寫至后端存儲內。而存儲系統為了提高高可用性,一般在控制器中的緩存數據,都會有鏡像的,比如控制器A上的緩存數據,會實時鏡像到控制器B上,確保任何時間A和B上的緩存數據是一致的,這樣在任意時間,當某一控制器故障時,其鏡像控制器會將鏡像數據刷寫至后端存儲,避免了數據丟失。但在多控存儲系統,由于物理上是有多個雙控存儲組成的,所以,目前采用的普遍都是在雙控存儲之間進行緩存鏡像,這種情況下只能允許同一時間內僅一個控制器故障;但因為雙控存儲本身為一體,所以同時故障的概率很大,而同一個雙控存儲的兩個控制器同時故障后會導致緩存數據丟失,后端存儲數據與IO輸入的數據不一致的情況發生。因此,如何提供一種存儲可靠性高的控制器緩存方法及存儲控制器和多控制器存儲系統是本領域技術人員目前需要解決的問題。技術實現要素:本發明的目的是提供一種控制器緩存方法及存儲控制器,能夠盡可能避免緩存數據的丟失,減少后端存儲數據與IO輸入的數據不一致的情況發生,可靠性高;本發明的另一目的是提供一種多控制器存儲系統。為解決上述技術問題,本發明提供了一種控制器緩存方法,用于多控制器存儲系統,包括:接收計算機發送的IO數據,將所述IO數據緩存至自身所在的控制器并生成對應的鏡像;從除自身所在的控制器以外的其他控制器中按照預設規則選擇N個控制器作為鏡像控制器,并將所述鏡像分別發送至兩個所述鏡像控制器內存儲;N為不小于2的正整數;周期性地檢測自身是否故障,若是,發送故障信號至對應的鏡像控制器內,供所述鏡像控制器將存儲的故障控制器的鏡像刷寫至后端存儲設備內。優選地,還包括:當接收到其他控制器發送的故障信號后,確定當前除故障控制器以外的非故障控制器的總個數;若所述總個數大于N,則按照預設規則從除自身所在控制器以外的其余非故障控制器內重新選擇N個控制器作為鏡像控制器,并將自身所在控制器生成的鏡像發送至對應的鏡像控制器內進行存儲;若所述總個數大于1但不大于N,則將除自身所在控制器以外的全部非故障控制器均作為鏡像控制器,并將自身所在控制器生成的鏡像發送至對應的鏡像控制器內進行存儲。優選地,每次選擇鏡像控制器后,還包括:對當前自身選擇的各個鏡像控制器的標識信息進行記錄,得到對應當前控制器情況的記錄結果;當檢測到其他控制器發送的恢復信號后,依據所述記錄結果、所述恢復信號對應的控制器的信息、當前非故障控制器的總個數以及所述預設規則重新選擇自身對應的鏡像控制器。優選地,N取2。為解決上述技術問題,本發明還提供了一種存儲控制器,用于多控制器存儲系統,包括:緩存模塊,用于接收計算機發送的IO數據,將所述IO數據緩存至自身所在的控制器并生成對應的鏡像;鏡像控制器選擇模塊,用于從除自身所在的控制器以外的其他控制器中按照預設規則選擇N個控制器作為鏡像控制器,并將所述鏡像分別發送至兩個所述鏡像控制器內存儲;N為不小于2的正整數;高可用模塊,用于周期性地檢測自身是否故障,若是,發送故障信號至對應的所述鏡像控制器內,供所述鏡像控制器將存儲的故障控制器的鏡像刷寫至后端存儲設備內;互聯模塊,用于建立自身所在控制器與所述多控制器存儲系統內的其他全部控制器之間的通信連接。優選地,所述鏡像控制器選擇模塊還用于:當接收到其他控制器發送的故障信號后,確定當前除故障控制器以外的非故障控制器的總個數;若所述總個數大于N,則按照預設規則從除自身所在控制器以外的其余非故障控制器內重新選擇N個控制器作為鏡像控制器,并將自身所在控制器生成的鏡像發送至對應的鏡像控制器內進行存儲;若所述總個數大于1但不大于N,則將除自身所在控制器以外的全部非故障控制器均作為鏡像控制器,并將自身所在控制器生成的鏡像發送至對應的鏡像控制器內進行存儲。優選地,還包括:鏡像歷史數據庫,用于在每次選擇鏡像控制器后,對當前自身選擇的各個鏡像控制器的標識信息進行記錄,得到對應當前控制器情況的記錄結果;相應的,所述鏡像控制器選擇模塊還用于:當檢測到其他控制器發送的恢復信號后,依據所述記錄結果、所述恢復信號對應的控制器的信息、當前非故障控制器的總個數以及所述預設規則重新選擇自身對應的鏡像控制器。為解決上述技術問題,本發明還提供了一種多控制器存儲系統,包括后端存儲設備、計算機以及多個如以上任一項所述的存儲控制器;其中,所述存儲控制器的個數不少于N+1個,N為不小于2的正整數。本發明提供了一種控制器緩存方法及存儲控制器,用于多控制器存儲系統,本發明中,控制器接收計算機發送的IO數據后,會將IO數據緩存至自身,并且,還會將該IO數據的鏡像緩存至另外N個控制器內,其中,N不小于2。可見,即使有一組雙控存儲中的兩個控制器均出現故障,本發明還有另外的至少一個控制器內存儲有故障控制器的鏡像,盡可能避免了緩存數據的丟失,減少了后端存儲數據與IO輸入的數據不一致的情況發生,可靠性高。本發明還提供了一種多控制器存儲系統,在此不再贅述。附圖說明為了更清楚地說明本發明實施例中的技術方案,下面將對現有技術和實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖1為本發明提供的一種控制器緩存方法的過程的流程圖;圖2為本發明提供的一種存儲控制器的結構示意圖。具體實施方式本發明的核心是提供一種控制器緩存方法及存儲控制器,能夠盡可能避免緩存數據的丟失,減少后端存儲數據與IO輸入的數據不一致的情況發生,可靠性高;本發明的另一核心是提供一種多控制器存儲系統。為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。本發明提供了一種控制器緩存方法,用于多控制器存儲系統,參見圖1所示,圖1為本發明提供的一種控制器緩存方法的過程的流程圖;該方法包括:步驟s101:接收計算機發送的IO數據,將IO數據緩存至自身所在的控制器并生成對應的鏡像;步驟s102:從除自身所在的控制器以外的其他控制器中按照預設規則選擇N個控制器作為鏡像控制器,并將鏡像分別發送至兩個鏡像控制器內存儲;N為不小于2的正整數;步驟s103:周期性地檢測自身是否故障,若是,發送故障信號至對應的鏡像控制器內,供鏡像控制器將存儲的故障控制器的鏡像刷寫至后端存儲設備內。其中,步驟s103與步驟s101以及步驟s102并無先后順序之分,在周期性檢測當前控制器是否故障時,也可以同時接收計算機發送的IO數據,并將生成的鏡像發送至鏡像控制器進行存儲。正常來說,若多控制器存儲系統內沒有控制器發生故障的話,則每個控制器的鏡像控制器一旦選定即不再變化,即每次接收到IO數據后,均會將生成的鏡像發送至之前選定的N個控制器內存儲。可以理解的是,控制器會將接收到的IO數據進行緩存,存夠一定量的數據后才會統一刷寫至后端存儲設備,而不是立即刷寫至后端存儲設備,故一旦控制器故障的話,若沒有存儲鏡像的話,尚未刷寫至后端存儲設備的數據即會丟失。另外,這里的預設規則一般需要避免個別控制器內存儲的鏡像過多,盡可能保證每個控制器作為其他控制器的鏡像控制器的次數相同。例如,若包括ABCD四個控制器,N取2;則可令A作為B和C的鏡像控制器,B作為C和D的鏡像控制器,C作為A和D的鏡像控制器,D作為A和B的鏡像控制器,這樣每個控制器均作為其他兩個控制器的鏡像控制器,每個控制器內存儲的數據總量不會差異過大。并且,這里的預設規則還包括若當前已經選擇好對應的鏡像控制器,且此時并未出現新的故障控制器時,則將鏡像發送至之前選定的鏡像控制器,而不需要每次均重新選擇。作為優選地,該方法還包括:當接收到其他控制器發送的故障信號后,確定當前除故障控制器以外的非故障控制器的總個數;若總個數大于N,則按照預設規則從除自身所在控制器以外的其余非故障控制器內重新選擇N個控制器作為鏡像控制器,并將自身所在控制器生成的鏡像發送至對應的鏡像控制器內進行存儲;若總個數大于1但不大于N,則將除自身所在控制器以外的全部非故障控制器均作為鏡像控制器,并將自身所在控制器生成的鏡像發送至對應的鏡像控制器內進行存儲。可以理解的是,當多控制器存儲系統內有控制器發生故障時,將該故障控制器作為鏡像控制器的若干個控制器則會失去自身的一個鏡像控制器,這樣剩余未故障的各個控制器的鏡像分布即變得不均勻,鏡像控制器變少的這部分控制器的數據丟失危險增大。為了盡可能保證各個控制器的數據不丟失,故需要對鏡像控制器進行重新分配,即根據當前非故障控制器的情況,重新為每個控制器選擇鏡像控制器,盡可能保證每個非故障控制器的鏡像控制器的個數相同。進一步可知,每次選擇鏡像控制器后,該方法還包括:對當前自身選擇的各個鏡像控制器的標識信息進行記錄,得到對應當前控制器情況的記錄結果;當檢測到其他控制器發送的恢復信號后,依據記錄結果、恢復信號對應的控制器的信息、當前非故障控制器的總個數以及預設規則重新選擇自身對應的鏡像控制器。可以理解的是,這里的記錄結果記錄的是,在當前多控制器存儲系統的故障情況下,自身對應的控制器所選擇的的鏡像控制器是哪幾個。當由于故障恢復等原因,導致多控制器存儲系統變回上述故障情況時,即可令自身對應的鏡像控制器恢復成上次所選擇的的那幾個。即上述實施例的目的是為了使多控制器存儲系統在每種故障情況下,采用同一種鏡像分配方式。例如,若包括ABCD四個控制器,N取2;當A故障后,對BCD進行重分配,得到分配結果1,之后B故障,對CD進行重分配,得到分配結果2;若之后B恢復正常,則此時系統又處于僅有A故障,故此時BCD的分配方式采用之前的分配結果1。為方便理解,下面就一個具體實施例對本發明提出的方案進行介紹:多控制器存儲系統包括兩個雙控存儲,共組成四控存儲系統,每個雙控系統稱之為一個引擎,即引擎0和引擎1。每個引擎中包括兩個控制器,引擎0中包括控制器A和控制器B,引擎1中包括控制器C和控制器D。N取2。參見表1所示,表1為各個控制器的鏡像分配情況。其中,每個控制器也存儲了一份自己本身的鏡像。表1各個控制器存儲的鏡像情況控制器ABCD緩存部分一鏡像AAAB緩存部分二鏡像CBBC緩存部分三鏡像DDCD故由表1可知,從單個控制器來看,即:控制器A的緩存的是控制器A、C、D的緩存數據;控制器B的緩存的是控制器A、B、D的緩存數據;控制器C的緩存的是控制器A、B、C的緩存數據;控制器D的緩存的是控制器B、C、D的緩存數據。從緩存鏡像來看,即:控制器A的鏡像,緩存到控制器A、B、C上面;控制器B的鏡像,緩存到控制器B、C、D上面;控制器C的鏡像,緩存到控制器A、C、D上面;控制器D的鏡像,緩存到控制器A、B、D上面。即若控制器A接收到IO數據后,會將該IO鏡像到控制器B、C上面;即若控制器B接收到IO數據后,會將該IO鏡像到控制器C、D上面;即若控制器C接收到IO數據后,會將該IO鏡像到控制器A、D上面;即若控制器D接收到IO數據后,會將該IO鏡像到控制器A、B上面;從而可以確保每個IO數據都會有三份鏡像存在;且每個控制器作為另外兩個控制器的鏡像控制器,鏡像存儲分布均勻。這樣,可以保證滿足任意兩個控制器故障,緩存中的數據依然存在不丟失,提高了數據存儲的可靠性。進一步的,若檢測到控制器A故障,則將B或C中存儲的控制器A的鏡像刷寫至后端存儲設備(磁盤或非易失存儲)上,并進行鏡像重新分配,同時記錄分配情況,得到記錄結果。重分配后的鏡像分布如表2。表2控制器A故障后各個控制器存儲的鏡像情況控制器BCD緩存部分一鏡像BBB緩存部分二鏡像CCC緩存部分三鏡像DDD此時因為只剩下3個控制器,故每個控制器上的緩存數據是一樣的。進一步的,若在控制器A故障的基礎上,又檢測到控制器D故障,將B或C中存儲的控制器D的鏡像刷寫至后端存儲設備(磁盤或非易失存儲)上,并進行鏡像重新分配,同時記錄分配情況,得到記錄結果。重分配后的鏡像分布如表3。表3控制器A和D故障后各個控制器存儲的鏡像情況控制器BC緩存部分一鏡像BB緩存部分二鏡像CC此時因為只剩下2個控制器,故重新劃分每個控制器的緩存部分,只劃分為兩部分,類似雙控存儲系統。進一步的,當檢測到故障控制器D恢復后,依據存儲的記錄結果,將鏡像控制器的分配情況恢復到表2所示的狀態;當若檢測到故障控制器A和D均恢復后,則依據存儲的記錄結果,將鏡像控制器的分配情況恢復到表1所示的狀態。另外,若在表1的基礎上,檢測到控制器A、D同時故障,則會將控制器B、C上面關于控制器A、D的緩存數據刷寫到后端存儲設備上,然后重新分布鏡像控制器,因為只剩下2個控制器,故重新劃分每個控制器的緩存部分,只劃分為兩部分。當然,A、B同時故障后的步驟與上述步驟相同。可見,本發明可以確保支持任意N個控制器同時故障,其中,N可以為2,當然,本發明不限定N的具體數值。本發明提供了一種控制器緩存方法,用于多控制器存儲系統,本發明中,控制器接收計算機發送的IO數據后,會將IO數據緩存至自身,并且,還會將該IO數據的鏡像緩存至另外N個控制器內,其中,N不小于2。可見,即使有一組雙控存儲中的兩個控制器均出現故障,本發明還有另外的至少一個控制器內存儲有故障控制器的鏡像,盡可能避免了緩存數據的丟失,減少了后端存儲數據與IO輸入的數據不一致的情況發生,可靠性高。本發明還提供了一種存儲控制器,用于多控制器存儲系統,參見圖2所示,圖2為本發明提供的一種存儲控制器的結構示意圖。該存儲控制器包括:緩存模塊1,用于接收計算機發送的IO數據,將IO數據緩存至自身所在的控制器并生成對應的鏡像;鏡像控制器選擇模塊2,用于從除自身所在的控制器以外的其他控制器中按照預設規則選擇N個控制器作為鏡像控制器,并將鏡像分別發送至兩個鏡像控制器內存儲;N為不小于2的正整數;高可用模塊3,用于周期性地檢測自身是否故障,若是,發送故障信號至對應的鏡像控制器內,供鏡像控制器將存儲的故障控制器的鏡像刷寫至后端存儲設備內;互聯模塊4,用于建立自身所在控制器與多控制器存儲系統內的其他全部控制器之間的通信連接。可以理解的是,為了實現鏡像文件的傳輸,各個控制器兩兩之間均應建立有通信連接。作為優選地,鏡像控制器選擇模塊2還用于:當接收到其他控制器發送的故障信號后,確定當前除故障控制器以外的非故障控制器的總個數;若總個數大于N,則按照預設規則從除自身所在控制器以外的其余非故障控制器內重新選擇N個控制器作為鏡像控制器,并將自身所在控制器生成的鏡像發送至對應的鏡像控制器內進行存儲;若總個數大于1但不大于N,則將除自身所在控制器以外的全部非故障控制器均作為鏡像控制器,并將自身所在控制器生成的鏡像發送至對應的鏡像控制器內進行存儲。作為優選地,該存儲控制器還包括:鏡像歷史數據庫,用于在每次選擇鏡像控制器后,對當前自身選擇的各個鏡像控制器的標識信息進行記錄,得到對應當前控制器情況的記錄結果;相應的,鏡像控制器選擇模塊2還用于:當檢測到其他控制器發送的恢復信號后,依據記錄結果、恢復信號對應的控制器的信息、當前非故障控制器的總個數以及預設規則重新選擇自身對應的鏡像控制器。本發明提供了一種存儲控制器,用于多控制器存儲系統,本發明中,控制器接收計算機發送的IO數據后,會將IO數據緩存至自身,并且,還會將該IO數據的鏡像緩存至另外N個控制器內,其中,N不小于2。可見,即使有一組雙控存儲中的兩個控制器均出現故障,本發明還有另外的至少一個控制器內存儲有故障控制器的鏡像,盡可能避免了緩存數據的丟失,減少了后端存儲數據與IO輸入的數據不一致的情況發生,可靠性高。本發明還提供了一種多控制器存儲系統,包括后端存儲設備、計算機以及多個如以上任一項的存儲控制器;其中,存儲控制器的個數不少于N+1個,N為不小于2的正整數。本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。還需要說明的是,在本說明書中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。對所公開的實施例的上述說明,使本領域專業技術人員能夠實現或使用本發明。對這些實施例的多種修改對本領域的專業技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發明的精神或范圍的情況下,在其他實施例中實現。因此,本發明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。當前第1頁1 2 3