雙控磁碟陣列系統及其數據存取方法與流程
2023-07-03 22:40:21 4

本發明涉及計算機數據存儲技術領域,特別是涉及雙控磁碟陣列系統及其數據存取方法。
背景技術:
獨立冗餘磁碟陣列(Redundant Arrays of Inexpensive Disk,RAID)主要包括前端的陣列控制器和後端的若干磁碟。陣列控制器中實現由RAID算法,讀寫磁碟組時,讀寫請求按照特定的RAID級別並行地分布到各個磁碟,同時完成校驗計算,在性能和數據完整性方面較好地滿足了用戶的需求。
雙控磁碟陣列系統(雙控制器磁碟陣列系統)包括兩臺控制器(分別是第一控制器和第二控制器)和後端由多個物理硬碟形成的磁碟陣列,兩個控制器共同管理磁碟陣列,根據應用需求,磁碟陣列將被劃分成若干個邏輯卷,每一個邏輯卷相當於一個虛擬磁碟,以邏輯號作為標識,主機可通過任一控制器訪問邏輯卷。雙控磁碟陣列系統在運行過程中,其中一個控制器中的緩存數據以及相關的數據信息被同步備份到另一個控制器,當一個控制器發生故障時,可以從另一個控制器中恢復數據和控制信息,從而保證數據不丟失。目前主流的雙控設計是雙活模式(active-active)。
一般雙控磁碟陣列系統都是基於SAS硬碟(Serial Attached SCSI,串行連接SCSI)設計的,SAS磁碟具有雙埠,因此可以直接連接雙控制器,但SAS硬碟成本昂貴,若改用價格低廉的SATA硬碟(Serial ATA,串口硬碟)或NVMe硬碟(Non-Volatile Memory,非易失性硬碟),則由於SATA硬碟或單埠的NVMe硬碟不具有雙埠,因此無法實現雙控制器同時與SATA硬碟或單埠的NVMe硬碟的連接(SATA硬碟或NVMe硬碟同一時刻只能與其中一個控制器連接),這樣在雙控磁碟陣列系統運行讀寫數據時,由於兩個控制器中只有一個控制器與SATA硬碟或NVMe硬碟進行連接,因此不能並行地處理來自主機的輸入輸出請求,即不能實現雙控磁碟陣列系統的雙活模式。
由於SATA硬碟或單埠的NVMe硬碟不具有雙埠,若需要實現雙控制器同時與SATA硬碟或單埠的NVMe硬碟連接,則必須藉助設置有復用器AAMUX晶片進行信號切換的轉接板,這種藉助轉接板的方式不僅需要增加成本,而且該轉接板也可能成為數據存取的性能瓶頸或故障點。
技術實現要素:
基於此,有必要針對傳統雙控磁碟陣列系統使用SATA硬碟或NVMe硬碟時由於SATA硬碟或NVMe硬碟不具有雙埠而使雙控磁碟陣列系統不能實現雙活模式的問題,提供一種基於SATA或NVMe盤的雙控磁碟陣列系統及其數據存取方法,能夠在雙控磁碟陣列系統使用SATA硬碟或NVMe硬碟時,不需要轉接板以及復用器AAMUX晶片進行信號切換也能夠實現雙活模式。
為達到發明目的,提供一種雙控磁碟陣列系統的數據存取方法,所述雙控磁碟陣列系統包括第一控制器,第二控制器,設置有第一、第二埠選擇線路的背板以及由SATA或NVMe硬碟形成的磁碟陣列,所述第一控制器和所述第二控制器均與所述背板連接,所述背板上的第一、第二埠選擇線路合併後與所述磁碟陣列連接;所述數據存取方法包括:
所述第一控制器接收到主機發送的輸入輸出信號時,判斷其自身是否為所述輸入輸出信號對應的磁碟陣列的邏輯卷預設的主控制器;
若所述第一控制器為所述主控制器,所述主控制器從所述背板上選擇與所述第一控制器相對應的所述第一埠選擇線路,並將所述第一控制器與所述第一埠選擇線路連接,使得所述第一控制器通過所述第一埠選擇線路對所述磁碟陣列的邏輯卷進行存取控制;
否則,則確定所述第二控制器為所述主控制器,所述主控制器從所述背板上選擇與所述第二控制器相對應的所述第二埠選擇線路,並將所述第二控制器與所述第二埠選擇線路連接,使得所述第二控制器通過所述第二埠選擇線路對所述磁碟陣列的邏輯卷進行存取控制;
在確定所述主控制器,並將所述背板上的第一埠選擇線路與所述第一控制器連接或將所述背板上第二埠選擇線路與所述第二控制器連接後,所述主控制器根據所述輸入輸出信號控制所述磁碟陣列的邏輯卷存取數據。
在其中一個實施例中,所述在確定所述主控制器,並將所述背板上的第一埠選擇線路與所述第一控制器連接或將所述背板上第二埠選擇線路與所述第二控制器連接後,所述主控制器根據所述輸入輸出信號控制所述磁碟陣列的邏輯卷存取數據的步驟之後,還包括:
從控制器定時向所述主控制器發送心跳檢測信號;
所述從控制器根據所述心跳檢測信號判斷所述主控制器是否發生故障,並在所述主控制器發生故障時,所述主控制器斷開與其連接的埠選擇線路,所述從控制器從所述背板上選擇與其對應的埠選擇線路連接,所述從控制器根據所述輸入輸出信號對所述磁碟陣列的邏輯卷進行存取控制。
在其中一個實施例中,所述從控制器根據所述心跳檢測信號判斷所述主控制器是否發生故障,並在所述主控制器發生故障時,所述主控制器斷開與其連接的埠選擇線路,所述從控制器從所述背板上選擇與其對應的埠選擇線路,並將選擇的埠選擇線路與其連接,所述從控制器根據所述輸入輸出信號對所述磁碟陣列的邏輯卷進行存取控制的步驟包括:
所述從控制器判斷是否在預設時間內接收到所述主控制器反饋的心跳信號;
若所述從控制器在所述預設時間內未接收到所述心跳信號,則判定所述主控制器發生故障,所述主控制器斷開與其連接的埠選擇線路,所述從控制器從所述背板上選擇與其對應的埠選擇線路連接,所述從控制器根據所述輸入輸出信號對所述磁碟陣列的邏輯卷進行存取控制;
若所述從控制器在所述預設時間內接收到所述心跳信號,則判定所述主控制器未發生故障,所述主控制器根據所述輸入輸出信號對所述磁碟陣列的邏輯卷進行存取控制。
在其中一個實施例中,所述在確定所述主控制器,並將所述背板上的第一埠選擇線路與所述第一控制器連接或將所述背板上第二埠選擇線路與所述第二控制器連接後,所述主控制器根據所述輸入輸出信號控制所述磁碟陣列的邏輯卷存取數據的步驟包括:
若確定所述第一控制器為所述主控制器,則將所述第二控制器的第二內存地址映射到所述第一控制器,並與所述第一控制器的第一內存地址合併構成第一合併內存地址;
若所述輸入輸出信號為輸出信號,所述主控制器控制所述磁碟陣列的邏輯卷將其內的數據緩存到所述第一合併內存地址內,並通過所述第一合併內存地址讀取所述數據;
若所述輸入輸出信號為輸入信號,所述主控制器將所述數據緩存到所述第一合併內存地址中,並通過所述第一合併內存地址將所述數據寫入所述磁碟陣列的邏輯卷中。
在其中一個實施例中,所述在確定所述主控制器,並將所述背板上的第一埠選擇線路與所述第一控制器連接或將所述背板上第二埠選擇線路與所述第二控制器連接後,所述主控制器根據所述輸入輸出信號控制所述磁碟陣列存取數據的步驟還包括:
若確定所述第二控制器為所述主控制器,所述第一控制器將所述輸入輸出信號傳遞給所述第二控制器,並將所述第一控制器的第一內存地址映射到所述第二控制器,與所述第二控制器的第二內存地址合併構成第二合併內存地址;
若所述輸入輸出信號為輸出信號,所述主控制器將所述磁碟陣列的邏輯卷中的數據緩存到所述第二合併內存地址內,並通過所述第二合併內存地址讀取數據;
若所述輸入輸出信號為輸入信號,所述主控制器將所述數據緩存到所述第二合併內存地址中,並通過所述第二合併內存地址將所述數據寫入所述磁碟陣列的邏輯卷中。
本發明還提供一種用於數據存取的雙控磁碟陣列系統,所述系統包括第一控制器,第二控制器,設置有第一、第二埠選擇線路的背板以及由SATA或NVMe硬碟形成的磁碟陣列,所述第一控制器和所述第二控制器均與所述背板連接,所述背板上的第一、第二埠選擇線路合併後與所述磁碟陣列連接;其中,所述第一控制器和所述第二控制器均包括接收判斷模塊,第一選擇控制模塊和第二選擇控制模塊;
所述接收判斷模塊,用於接收到主機發送的輸入輸出信號時,判斷所述第一控制器是否為所述輸入輸出信號對應的磁碟陣列的邏輯卷預設的主控制器;
所述第一選擇控制模塊,用於在判定所述第一控制器為所述主控制器時,從所述背板上選擇與所述第一控制器相對應的所述第一埠選擇線路,並將所述第一控制器與所述第一埠選擇線路連接,使得所述第一控制器通過所述第一埠選擇線路對所述磁碟陣列的邏輯卷進行存取控制,並根據所述輸入輸出信號控制所述磁碟陣列的邏輯卷存取數據;
所述第二選擇控制模塊,用於在判定所述第二控制器為所述主控制器時,從所述背板上選擇與所述第二控制器相對應的所述第二埠選擇線路,並將所述第二控制器與所述第二埠選擇線路連接,使得所述第二控制器通過所述第二埠選擇線路對所述磁碟陣列的邏輯卷進行存取控制,並根據所述輸入輸出信號控制所述磁碟陣列的邏輯卷存取數據。
在其中一個實施例中,所述第一控制器和所述第二控制器均還包括:
心跳檢測模塊,用於定時向所述主控制器發送心跳檢測信號;
判斷控制模塊,用於根據所述心跳檢測信號判斷所述主控制器是否發生故障,並在所述主控制器發生故障時,斷開所述主控制器與所述主控制器對應的埠選擇線路之間的連接,從所述背板上選擇與所述從控制器對應的埠選擇線路,並將所述從控制器與選擇的埠選擇線路連接,使得所述從控制器對所述磁碟陣列的邏輯卷進行存取控制。
在其中一個實施例中,所述判斷控制模塊包括:
判斷單元,用於判斷所述從控制器是否在預設時間內接收到所述主控制器反饋的心跳信號;若是,則進入第一判定單元,若否,則進入第二判定單元;
所述第一判定單元,用於判定所述主控制器未發生故障,所述主控制器繼續根據所述輸入輸出信號對所述磁碟陣列的邏輯卷進行存取控制;
所述第二判定單元,用於判定所述主控制器發生故障,斷開所述主控制器與所述主控制器對應的埠選擇線路之間的連接,從所述背板上選擇與所述從控制器對應的埠選擇線路,將所述從控制器與選擇的埠選擇線路連接,並根據所述輸入輸出信號對所述磁碟陣列的邏輯卷進行存取控制。
在其中一個實施例中,所述第一選擇控制模塊包括:
第一映射單元,用於在確定所述第一控制器為所述主控制器時,將所述第二控制器的第二內存地址映射到所述第一控制器,並與所述第一控制器的第一內存地址合併構成第一合併內存地址;
第一讀取單元,用於若所述輸入輸出信號為輸出信號,控制所述磁碟陣列的邏輯卷將其內的數據緩存到所述第一合併內存地址內,並通過所述第一合併內存地址讀取所述數據;
第一寫入單元,用於若所述輸入輸出信號為輸入信號,將所述數據緩存到所述第一合併內存地址中,並通過所述第一合併內存地址將所述數據寫入所述磁碟陣列的邏輯卷中。
在其中一個實施例中,所述第二選擇控制模塊包括:
第二映射單元,用於在確定所述第二控制器為所述主控制器時,接收所述第一控制器傳遞的所述輸入輸出信號,並將其第一內存地址映射到所述第二控制器,與所述第二控制器的第二內存地址合併構成第二合併內存地址;
第二讀取單元,用於若所述輸入輸出信號為輸出信號,將所述磁碟陣列的邏輯卷中的數據緩存到所述第二合併內存地址內,並通過所述第二合併內存地址讀取數據;
第二寫入單元,用於若所述輸入輸出信號為輸入信號,將所述數據緩存到所述第二合併內存地址中,並通過所述第二合併內存地址將所述數據寫入所述磁碟陣列的邏輯卷中。
本發明的有益效果包括:
上述雙控磁碟陣列系統及其數據存取方法,在接收到主機發送的輸入輸出信號後,從第一、第二控制器中判斷出哪個是當前的主控制器,主控制器控制背板上與其相對應的埠選擇線路與其連接,從而實現主控制器與磁碟陣列的連接,此時主控制器可根據接收到的輸入輸出信號通過與其對應的埠選擇線路控制磁碟陣列的邏輯卷進行數據的存取,這樣第一控制器和第二控制器便可並行處理來自主機的輸入輸出請求,實現雙控磁碟陣列系統的雙活模式。同時,本實施例中的雙控磁碟陣列系統的數據存取方法通過控制背板上的第一、第二埠選擇線路來實現第一控制器或第二控制器與磁碟陣列的連接,避免了對SATA或NVMe硬碟的埠的頻繁插拔,保證SATA或NVMe硬碟的埠不被磨損,從而確保SATA或NVMe硬碟的可靠性。並且,由於背板的使用,省去了為了避免SATA或NVMe硬碟的埠的磨損而使用的轉接板,省去了使用轉接板的成本,且無需為轉接板預留空間,雙控磁碟陣列系統結構更加緊湊集中化,且第一控制器和第二控制器使用背板上的第一、第二埠選擇線路與磁碟陣列連接時,使用的仍是SATA或NVMe硬碟的埠的標準,不會因為埠標準不同而使雙控磁碟陣列系統的使用變得複雜化,有效地避免了使用轉接板對雙控磁碟陣列系統的數據存取等性能的限制。
附圖說明
圖1為一個實施例中的雙控磁碟陣列系統的數據存取方法的流程示意圖;
圖2為一個實施例中傳統的雙控磁碟陣列系統的架構示意圖;
圖3為一個實施例中的雙控磁碟陣列系統的架構示意圖;
圖4為一個實施例中的雙控磁碟陣列系統中背板與第一、第二控制器以及物理硬碟連接的結構示意圖;
圖5為另一個實施例中的雙控磁碟陣列系統的數據存取方法的流程示意圖;
圖6為一個實施例中的用於數據存取的雙控磁碟陣列系統的結構示意圖。
具體實施方式
為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實施例對本發明雙控磁碟陣列系統及其數據存取方法進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發明,並不用於限定本發明。
在一個實施例中,如圖1所示,提供了一種雙控磁碟陣列系統的數據存取方法,所述雙控磁碟陣列系統包括第一控制器,第二控制器,設置有第一、第二埠選擇線路的背板以及由SATA或NVMe硬碟形成的磁碟陣列,第一控制器和第二控制器均與背板連接,背板上的第一、第二埠選擇線路合併後與磁碟陣列連接。該數據存取方法包括以下步驟:
S100,第一控制器接收到主機發送的輸入輸出信號時,判斷其自身是否為輸入輸出信號對應的磁碟陣列的邏輯卷預設的主控制器。
S200,若第一控制器為主控制器,主控制器從背板上選擇與第一控制器相對應的第一埠選擇線路,並將第一控制器與第一埠選擇線路連接,使得第一控制器通過第一埠選擇線路對磁碟陣列的邏輯卷進行存取控制。
S300,否則,則確定第二控制器為主控制器,主控制器從背板上選擇與第二控制器相對應的第二埠選擇線路,並將第二控制器與第二埠選擇線路連接,使得第二控制器通過第二埠選擇線路對磁碟陣列的邏輯卷進行存取控制。
S400,在確定主控制器,並將背板上的第一埠選擇線路與第一控制器連接或將背板上的第二埠選擇線路與第二控制器連接後,主控制器根據輸入輸出信號控制磁碟陣列的邏輯卷存取數據。
本實施例中,雙控磁碟陣列系統包括第一控制器和第二控制器,兩個控制器在與SATA或NVMe硬碟形成的磁碟陣列連接時,由於SATA或單埠的NVMe硬碟只有一個埠,因此第一控制器和第二控制器中同時只能有一個控制器與SATA或單埠的NVMe硬碟連接,如:當第一控制器與SATA或NVMe硬碟連接後,如果第一控制器發生故障,想要改用第二控制器時,需要先將第一控制器從SATA或NVMe硬碟的埠中拔出,再將第二控制器與SATA或NVMe硬碟的埠連接,這種頻繁地對SATA或NVMe硬碟的埠進行插拔的過程顯然會對SATA或NVMe硬碟的埠產生磨損,從而影響SATA或NVMe硬碟的使用壽命。為了減少對SATA或NVMe硬碟的埠的磨損,通常使用轉接板來避免這種磨損,使用設置有復用器AAMUX晶片(設置在硬碟驅動器和SATA/NVMe控制器之間提供雙埠路徑,進行信號切換的晶片)的轉接板來實現兩個控制器同時對SATA或NVMe硬碟進行信號切換的目的,從而實現雙控磁碟陣列系統的雙活模式,但設置有復用器AAMUX晶片的轉接板的使用在一定程度上增加了成本,且SATA或NVMe硬碟的埠處需要預留空間來設置轉接板。而本實施例中在SATA或NVMe硬碟和控制器之間設置一個背板,該背板上設置有第一、第二埠選擇線路,第一、第二埠選擇線路合併後與由SATA或NVMe硬碟形成的磁碟陣列連接,如圖4所示,第一控制器和第二控制器均與背板連接。此處需要說明的是,在從第一控制器和第二控制器中確定出主控制器之前,第一控制器和第二控制器與背板的連接指的只是與背板本體結構上的物理連接,實質上並未與背板中設置的第一、第二埠選擇線路產生電氣連接。
當第一控制器和/或第二控制器需要控制磁碟陣列存取數據時,即第一控制器(此處的第一控制器指的是兩個控制器中的任一個)接收到主機發送的輸入輸出信號時,第一控制器先判斷自身是否是輸入輸出信號對應的磁碟陣列的邏輯卷的預設的主控制器,由於只有主控制器才能對磁碟陣列的邏輯卷進行存取操作,而從控制器是不能對磁碟陣列的邏輯卷進行存取操作的,因此需要先從第一控制器和第二控制器中判定出主控制器。如果第一控制器確定自己為主控制器,就控制背板上與其對應的第一埠選擇線路與其連接,從而實現第一控制器通過第一埠選擇線路與磁碟陣列的邏輯卷連接,此時作為主控制器的第一控制器便可根據接收到輸入輸出信號對磁碟陣列的邏輯卷進行數據存取操作;當第一控制器判斷自身不是輸入輸出信號對應的磁碟陣列的邏輯卷的預設的主控制器,則能夠確定第二控制器為主控制器,此時第一控制器將輸入輸出信號傳遞給第二控制器,第二控制器控制背板上與其對應的第二埠選擇線路與其連接,從而實現第二控制器通過第二埠選擇線路與磁碟陣列的邏輯卷連接,此時作為主控制器的第二控制器便可根據輸入輸出信號對磁碟陣列的邏輯卷進行數據存取操作,這樣第一控制器和第二控制器便可並行處理來自主機的輸入輸出請求(I/O請求),實現雙控磁碟陣列系統的雙活模式。同時,本實施例中的雙控磁碟陣列系統的數據存取方法通過控制背板上的第一、第二埠選擇線路來實現第一控制器或第二控制器與磁碟陣列的連接,避免了對SATA或NVMe硬碟的埠的頻繁插拔,保證SATA或NVMe硬碟的埠不被磨損,從而確保SATA或NVMe硬碟的可靠性。並且,由於背板的使用,省去了為了避免SATA或NVMe硬碟的埠的磨損而使用的轉接板,省去了使用轉接板的成本,且無需為轉接板預留空間,雙控磁碟陣列系統結構更加緊湊集中化,且第一控制器和第二控制器使用背板上的第一、第二埠選擇線路與磁碟陣列連接時,使用的仍是SATA或NVMe硬碟的埠的標準,不會因為埠標準不同(轉接板使用的埠標準與SATA或NVMe硬碟的埠標準不同)而使雙控磁碟陣列系統的使用變得複雜化,有效地避免了使用轉接板對雙控磁碟陣列系統的性能的限制。
其中,需要說明的是,在對磁碟陣列進行數據存取控制時,參見圖2,是利用邏輯卷管理器(LVM,Logical Volume Manager)來對磁碟分區進行管理(即圖2中所示的RAID/LVM),將一個或多個硬碟的分區在邏輯上集合為一個大的硬碟,即卷組,然後在卷組上創建一個或多個邏輯卷,每個邏輯卷可由一個或多個物理卷組成,這樣可實現磁碟空間的動態管理,為計算機提供更高層次的磁碟存儲,可以更方便的為應用與用戶分配存儲空間。
在一個實施例中,上述實施例中的雙控磁碟陣列系統,如圖3所示,其中,第一控制器和第二控制器中均包括一個中央處理單元(CPU,Central ProcessingUnit),中央處理單元用於運行存儲軟體,控制背板。第一控制器和第二控制器還均包括一個SATA/NVMe控制單元,用來對磁碟進行存取操作。在一個實施例中,如圖4所示,背板包括第一、第二埠選擇線路以及控制第一埠選擇線路與第一控制器連接的第一電子開關器件,控制第二埠選擇線路與第二控制器連接的第二電子開關器件。在一個實施例中,第一控制器接收到主機發送的輸入輸出信號並判定自身為磁碟陣列的邏輯卷預設的主控制器時,第一控制器向背板上的第一電子開關器件發送一個閉合指令,控制第一電子開關器件閉合,實現第一控制器與背板上的第一埠選擇線路的連接,從而實現第一控制器與SATA或NVMe硬碟的連接。在另一個實施例中,第一控制器接收到主機發送的輸入輸出信號並判定自身不是主控制器時,確定第二控制器為磁碟陣列的邏輯卷預設的主控制器,第一控制器將接收到的輸入輸出信號傳遞給第二控制器,第二控制器接收到第一控制器傳遞的輸入輸出信號,向背板上的第二電子開關器件發送一個閉合指令,控制第二電子開關器件閉合,實現第二控制器與背板上的第二埠選擇線路的連接,從而實現第二控制器與SATA或NVMe硬碟的連接。其中,第一控制器在將輸入輸出信號傳遞給第二控制器時,將輸入輸出信號封裝為信號包,將信號包傳遞給第二控制器,第二控制器接收到信號包後對信號包進行解包,得到輸入輸出信號。將輸入輸出信號進行封裝傳遞能夠保證信號的安全性及有效性。值得說明的是,第一控制器在傳遞輸入輸出信號或數據給第二控制器時,採用NTB(Non-transparent bridging,非透明橋接)協議或IB(infiniband,無限帶寬)協議傳遞信號或數據。其中,第一控制器通過圖2所示的I/O傳遞模塊傳遞輸入輸出信號。
在一個實施例中,參見圖5,在步驟S400之後,還包括:
S500,從控制器定時向主控制器發送心跳檢測信號。
S600,從控制器根據心跳檢測信號判斷主控制器是否發生故障,並在主控制器發生故障時,主控制器斷開與其連接的埠選擇線路,從控制器從背板上選擇與其對應的埠選擇線路連接,從控制器根據輸入輸出信號對磁碟陣列的邏輯卷進行存取控制。
雙控磁碟陣列系統的雙活模式(Active-Active)指的是兩個控制器都處於激活狀態,可並行處理來自主機的輸入輸出請求,並在某一控制器主線故障或離線時,另一個控制器將及時接管發生故障的控制器進行工作,從而達到不影響系統已有的任務。本實施例中在確定主從控制器後,主控制器根據輸入輸出信號控制磁碟陣列的邏輯卷存取數據,同時,從控制器則在一旁監控主控制器的狀態,一旦發現主控制器發生故障,則接管主控制器的工作,保證系統的高可靠性。
需要說明的是,雙控磁碟陣列中包括HA(High Available,高可靠性)模塊,上述從控制器對主控制器的心跳偵測過程就是由HA模塊實現的。
具體地,步驟S600包括:
S610,從控制器判斷是否在預設時間內接收到主控制器反饋的心跳信號。
S620,若從控制器在預設時間內未接收到心跳信號,則判定主控制器發生故障,主控制器斷開與其連接的埠選擇線路,從控制器從背板上選擇與其對應的埠選擇線路連接,從控制器根據輸入輸出信號對磁碟陣列的邏輯卷進行存取控制。
S630,若從控制器在預設時間內接收到心跳信號,則判定主控制器未發生故障,主控制器根據輸入輸出信號對磁碟陣列的邏輯卷進行存取控制。
本實施例為從控制器監控主控制器是否發生故障的具體步驟,在該實施例中,從控制器向主控制器發送一個心跳檢測信號之後,主控制器會在預設時間(如:3s)內向從控制器反饋一個證明其存活的心跳信號,如果從控制器在預設時間內接收到主控制器反饋的心跳信號,則判定主控制器正常工作,返回步驟S500繼續定時向主控制器發送心跳檢測信號,在一個實施例中,從控制器每隔1s向主控制器發送一個心跳檢測信號,以實時監測主控制器的狀態。如果從控制器在預設時間內沒有接收到主控制器反饋的心跳信號,則確定主控制器發生故障,此時從控制器需接管主控制器工作,具體地,主控制器向與其連接的埠選擇線路的電子開關器件發送一個斷開指令,該電子開關器件斷開,從而斷開主控制器與SATA或NVMe硬碟的連接。同時,從控制器向與其對應的埠選擇線路的電子開關器件發送一個閉合指令,該電子開關器件閉合,從而使得從控制器和SATA或NVMe硬碟連通。其能在主控制器故障時從控制器接管主控制器的工作,保證系統的高可靠性。
具體地,在一個實施例中,步驟S620包括:
若從控制器在預設時間內未接收到心跳信號,則繼續等待一段時間,如1~3s,如果繼續等待一段時間後仍未接收到主控制器反饋的心跳信號,則判定主控制器發生故障。從而有效避免由於信號延遲導致的對主控制器狀態的誤判的情況,避免不是主控制器發生故障而切換控制器的情況發生。
在一個實施例中,步驟S400包括:
S410a,若確定第一控制器為主控制器,則將第二控制器的第二內存地址映射到第一控制器,並與第一控制器的第一內存地址合併構成第一合併內存地址。
S420a,若輸入輸出信號為輸出信號,主控制器控制磁碟陣列的邏輯卷將其內的數據緩存到第一合併內存地址內,並通過第一合併內存地址讀取數據。
S430a,若輸入輸出信號為輸入信號,主控制器將數據緩存到第一合併內存地址中,並通過第一合併內存地址將數據寫入磁碟陣列的邏輯卷中。
在另一個實施例中,步驟S400還包括:
S410b,若確定第二控制器為主控制器,第一控制器將輸入輸出信號傳遞給第二控制器,並將其第一內存地址映射到第二控制器,與第二控制器的第二內存地址合併構成第二合併內存地址。
S420b,若所述輸入輸出信號為輸出信號,主控制器將所述磁碟陣列的邏輯卷中的數據緩存到第二合併內存地址內,並通過第二合併內存地址讀出數據。
S430b,若輸入輸出信號為輸入信號,主控制器將數據緩存到第二合併內存地址中,並通過第二合併內存地址將所述數據寫入磁碟陣列的邏輯卷中。
上述兩個實施例為主控制器根據輸入輸出信號控制磁碟陣列的邏輯卷存取數據的具體實施方式,如果第一控制器為主控制器,就無需進行輸入輸出信號傳遞,直接由其控制相應的邏輯卷存取數據,實現數據的快速存取。在實現第二控制器的第二內存地址映射到第一控制器時,使用NTB的內存轉址功能達到隔絕雙控制器兩邊地址域,降低系統性能影響,提高數據傳送效率的效果。第二控制器為主控制器時除了需要第一控制器將輸入輸出信號傳遞給第二控制器外,其它數據存取的過程及達到的效果與第一控制器的主控制器的類似,此處不再贅述。
需要說明的是,NTB內存轉址功能指的是將對方控制器的內存地址映射到本地地址,達到存取對方控制器的數據,就如同存取本地內存的數據一樣,降低系統性能影響,提高數據傳送效率。雙控磁碟陣列中包括IPC(inter processor communication,處理器間的通信)模塊,用於實現雙控制器之間數據的高速傳輸,可以是PCI-e(pci Express,總線接口)或IB協議。
在一個實施例中,當主控制器存取數據完成後,會向主機發送一個確認信號,以告知主機已完成相應數據的存取,可以發送下一個輸入輸出信號。本領域普通技術人員可以理解實現上述實施例方法中的全部或部分流程,是可以通過電腦程式來指令相關的硬體來完成,所述的程序可存儲於一計算機可讀取存儲介質中,該程序在執行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質可為磁碟、光碟、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random Access Memory,RAM)等。
在一個實施例中,如圖6所示,還提供了一種用於數據存取的雙控磁碟陣列系統,該系統包括第一控制器,第二控制器,設置有第一、第二埠選擇線路的背板以及由SATA或NVMe硬碟形成的磁碟陣列,第一控制器和第二控制器均與背板連接,背板上的第一、第二埠選擇線路合併後與磁碟陣列連接。其中,第一控制器和第二控制器均包括接收判斷模塊,第一選擇控制模塊和第二選擇控制模塊。接收判斷模塊100,用於接收到主機發送的輸入輸出信號時,判斷第一控制器是否為輸入輸出信號對應的磁碟陣列的邏輯卷預設的主控制器。第一選擇控制模塊200,用於在判定第一控制器為主控制器時,從背板上選擇與第一控制器相對應的第一埠選擇線路,並將第一控制器與第一埠選擇線路連接,使得第一控制器通過第一埠選擇線路對磁碟陣列的邏輯卷進行存取控制,並根據輸入輸出信號控制磁碟陣列的邏輯卷存取數據。第二選擇控制模塊300,用於在判定第二控制器為主控制器時,從背板上選擇與第二控制器相對應的第二埠選擇線路,並將第二控制器與第二埠選擇線路連接,使得第二控制器通過第二埠選擇線路對磁碟陣列的邏輯卷進行存取控制,並根據輸入輸出信號控制磁碟陣列的邏輯卷存取數據。
本實施例中的雙控磁碟陣列系統,在接收到主機發送的輸入輸出信號後,由於只有主控制器才能存取磁碟陣列的邏輯卷,而從控制器是不能對磁碟陣列的邏輯卷進行存取的,因此需要從第一、第二控制器中判斷出主控制器,主控制器控制背板上與其相對應的埠選擇線路與其連接,從而實現主控制器與磁碟陣列的連接,此時主控制器可根據接收到的輸入輸出信號通過與其對應的埠選擇線路控制磁碟陣列的邏輯卷進行數據的存取,這樣第一控制器和第二控制器便可並行處理來自主機的輸入輸出請求,實現雙控磁碟陣列系統的雙活模式。同時,本實施例中的雙控磁碟陣列系統的數據存取方法通過控制背板上的第一、第二埠選擇線路來實現第一控制器或第二控制器與磁碟陣列的連接,避免了對SATA或NVMe硬碟的埠的頻繁插拔,保證SATA或NVMe硬碟的埠不被磨損,從而確保SATA或NVMe硬碟的可靠性。並且,由於背板的使用,省去了為了避免SATA或NVMe硬碟的埠的磨損而使用的轉接板,省去了使用轉接板的成本,且無需為轉接板預留空間,雙控磁碟陣列系統結構更加緊湊集中化,且第一控制器和第二控制器使用背板上的第一、第二埠選擇線路與磁碟陣列連接時,使用的仍是SATA或NVMe硬碟的埠的標準,不會因為埠標準不同而使雙控磁碟陣列系統的使用變得複雜化,有效地避免了使用轉接板對雙控磁碟陣列系統的性能的限制。
其中,圖2中的目標模塊相當於本實施例中的接收判斷模塊100,用於與主機對接,接收主機發送的輸入輸出信號。
在一個實施例中,所述第一控制器和所述第二控制器均還包括:心跳檢測模塊400,用於定時向主控制器發送心跳檢測信號。判斷控制模塊500,用於根據心跳檢測信號判斷主控制器是否發生故障,並在主控制器發生故障時,斷開主控制器與主控制器對應的埠選擇線路之間的連接,從背板上選擇與從控制器對應的埠選擇線路,並將從控制器與選擇的埠選擇線路連接,使得從控制器對磁碟陣列的邏輯卷進行存取控制。
需要說明的是,本實施例中的心跳檢測模塊和判斷控制模塊相當於圖2中的HA模塊(高可靠性模塊)。
在一個實施例中,判斷控制模塊500包括:判斷單元510,用於判斷從控制器是否在預設時間內接收到主控制器反饋的心跳信號;若是,則進入第一判定單元520,若否,則進入第二判定單元530。第一判定單元520,用於判定主控制器未發生故障,主控制器繼續根據輸入輸出信號對磁碟陣列的邏輯卷進行存取控制。第二判定單元530,用於判定主控制器發生故障,斷開主控制器與主控制器對應的埠選擇線路之間的連接,從背板上選擇與從控制器對應的埠選擇線路,將從控制器與選擇的埠選擇線路連接,並根據輸入輸出信號對磁碟陣列的邏輯卷進行存取控制。
在一個實施例中,第一選擇控制模塊200包括:第一映射單元210,用於在確定第一控制器為主控制器時,將第二控制器的第二內存地址映射到第一控制器,並與第一控制器的第一內存地址合併構成第一合併內存地址。第一讀取單元220,用於若輸入輸出信號為輸出信號,控制磁碟陣列的邏輯卷將其內的數據緩存到第一合併內存地址內,並通過第一合併內存地址讀取數據。第一寫入單元230,用於若輸入輸出信號為輸入信號,將數據緩存到所述第一合併內存地址中,並通過第一合併內存地址將所述數據寫入磁碟陣列的邏輯卷中。
在一個實施例中,第二選擇控制模塊300包括:第二映射單元310,用於在確定第二控制器為所述主控制器時,接收第一控制器傳遞的輸入輸出信號,並將其第一內存地址映射到所第二控制器,與第二控制器的第二內存地址合併構成第二合併內存地址。第二讀取單元320,用於若輸入輸出信號為輸出信號,將磁碟陣列的邏輯卷中的數據緩存到第二合併內存地址內,並通過第二合併內存地址讀取數據。第二寫入單元330,用於若輸入輸出信號為輸入信號,將數據緩存到第二合併內存地址中,並通過第二合併內存地址將數據寫入磁碟陣列的邏輯卷中。
由於此系統解決問題的原理與前述一種雙控磁碟陣列系統的數據存取方法方法相似,因此該系統的實施可以參見前述方法的實施,重複之處不再贅述。
在上述描述中,需要理解的是,術語「第一」、「第二」僅用於描述目的,而不能理解為指示或暗示相對重要性或者隱含指明所指示的技術特徵的數量。由此,限定有「第一」、「第二」的特徵可以明示或者隱含地包括至少一個該特徵。
以上所述實施例的各技術特徵可以進行任意的組合,為使描述簡潔,未對上述實施例中的各個技術特徵所有可能的組合都進行描述,然而,只要這些技術特徵的組合不存在矛盾,都應當認為是本說明書記載的範圍。
以上所述實施例僅表達了本發明的幾種實施方式,其描述較為具體和詳細,但並不能因此而理解為對發明專利範圍的限制。應當指出的是,對於本領域的普通技術人員來說,在不脫離本發明構思的前提下,還可以做出若干變形和改進,這些都屬於本發明的保護範圍。因此,本發明專利的保護範圍應以所附權利要求為準。