本發(fā)明涉及計算機數(shù)據(jù)存儲,具體地涉及一種基于nvme協(xié)議和雙控陣列的硬盤共享方法。
背景技術(shù):
1、在需要高可靠性、高性能和易管理性的數(shù)據(jù)中心、云計算平臺、大型企業(yè)it系統(tǒng)等存儲場景,具備多個控制器的存儲陣列被廣泛應(yīng)用?,F(xiàn)有技術(shù)中,多個控制器的存儲陣列搭建有多種方式,例如使用多個通用雙控存儲陣列搭建。由于實際數(shù)據(jù)的使用需求,多個通用雙控存儲陣列之間需要在控制器層面互聯(lián)共享,以實現(xiàn)數(shù)據(jù)互通。
2、但是,現(xiàn)有技術(shù)中,多個通用雙控存儲陣列在特定的數(shù)據(jù)中心應(yīng)用場景下往往需要定制的pcie交換機或者定制的高速以太網(wǎng)交換機來實現(xiàn)互聯(lián),在此基礎(chǔ)上又需要依托專用的轉(zhuǎn)換板、交換板和背板等部件,成本較高且設(shè)計復(fù)雜,缺少一種軟件層面上的通用控制器互聯(lián)共享方法。
技術(shù)實現(xiàn)思路
1、針對現(xiàn)有技術(shù)中存在的上述問題,本發(fā)明提供了一種基于nvme協(xié)議和雙控陣列的硬盤共享方法,該方法可以利用linux內(nèi)核的nvme機制實現(xiàn)多個通用雙控存儲陣列之間的存儲資源共享;使得在整個多控制器存儲陣列網(wǎng)絡(luò)中,每一個控制器都可以訪問其他任意雙控存儲陣列擁有的硬盤;本方法不需要專門設(shè)計非通用的硬件模塊,縮短了系統(tǒng)搭建周期,節(jié)省了人力物力資源。
2、為了實現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案具體如下:
3、基于nvme協(xié)議和雙控陣列的硬盤共享方法,其特征在于,包括步驟:
4、s1、構(gòu)建基本存儲單元,每個所述基本存儲單元包含兩個通用雙控存儲陣列;每個通用雙控存儲陣列包含兩個控制器和一個與所有控制器連接的后端硬盤組;
5、s2、用作共享端的通用雙控存儲陣列中的兩個共享端控制器加載linux內(nèi)核的預(yù)配置模塊,在nvme?subsystems中創(chuàng)建target子系統(tǒng);在所述target子系統(tǒng)的命名空間中添加所述后端硬盤組的全部硬盤;同一塊硬盤,在兩個共享端控制器的nvme?target的命名空間中配置相同的uuid號;
6、s3、所述共享端控制器根據(jù)鏈路類型配置nvme?target映射端口,并將所述target子系統(tǒng)與所述nvme?target映射端口建立關(guān)聯(lián);
7、s4、用作訪問端的通用雙控存儲陣列中的兩個訪問端控制器加載預(yù)配置模塊;在nvme?subsystems中創(chuàng)建initiator子系統(tǒng);根據(jù)指定相應(yīng)端口和鏈路類型識別與連接對應(yīng)nvmetarget;
8、s5、所述訪問端控制器執(zhí)行多路徑設(shè)備管理命令,識別雙路徑合成對應(yīng)的唯一硬盤并建立連接與訪問。
9、由此,基本存儲單元中包含兩個相互可以進行存儲資源共享的通用雙控存儲陣列,每個通用雙控存儲陣列中均包含兩個執(zhí)行l(wèi)inux的控制器,根據(jù)在一次數(shù)據(jù)共享過程中數(shù)據(jù)流向的不同,將兩個通用雙控存儲陣列按照執(zhí)行的動作分別分為共享端的通用雙控存儲陣列和訪問端的通用雙控存儲陣列,二者根據(jù)實際需求可以互換,只需按對應(yīng)方法加載不同模塊即可。
10、用作共享端的通用雙控存儲陣列中的兩個控制器定義為共享端控制器,兩者的主要作用是利用linux內(nèi)核nvme機制,將與二者連接的后端硬盤組中的全部硬盤通過對應(yīng)的兩條鏈路映射給用作訪問端的通用雙控存儲陣列中的兩個訪問端控制器。linux內(nèi)核nvme機制是內(nèi)核提供的支持nvme?target和nvme?initiator的內(nèi)核模塊,實現(xiàn)基于nvme協(xié)議的塊設(shè)備如硬盤的映射,并且支持fc、普通tcp網(wǎng)絡(luò)、rdma三種形式的鏈路形式。
11、首先,用作共享端的通用雙控存儲陣列中的兩個共享端控制器加載linux內(nèi)核的預(yù)配置模塊,對于共享端控制器來說,此預(yù)配置模塊為nvmet模塊,nvmet模塊是linux內(nèi)核的軟件模塊,在加載nvmet模塊后,整個nvme軟件機制才能正常初始化和工作,是所有配置的第一步,接下來根據(jù)鏈路的不同加載不同鏈路內(nèi)核模塊,普通tcp網(wǎng)絡(luò)鏈路加載nvmet-tcp模塊;fc鏈路環(huán)境則加載nvmet-fc模塊;rdma網(wǎng)絡(luò)鏈路則加載nvmet-rdma模塊。接著在nvme?subsystems中創(chuàng)建target子系統(tǒng);在target子系統(tǒng)的命名空間中添加后端硬盤組的全部硬盤,例如添加/dev/sdb、/dev/sdc、/dev/sdd等。同一塊硬盤,在兩個共享端控制器的nvmetarget的命名空間中配置相同的uuid號,此處目的是利用linux?multipath多路徑機制,因為同一塊硬盤配置了相同的uuid號,多路徑機制會將兩條路徑合并成一條路徑形成一個塊設(shè)備,其中一條鏈路故障或者一臺通用雙控存儲陣列中的其中任意一個控制器異常不影響正常功能。uuid號是一個32位的十六進制數(shù)字標識符,用于唯一標識硬盤或分區(qū)。
12、接著共享端控制器根據(jù)鏈路類型配置nvme?target映射端口,并將所述target子系統(tǒng)與所述nvme?target映射端口建立關(guān)聯(lián)。此處的鏈路類型根據(jù)實際情況不同有多種,由于nvme?target支持nvme-tcp、nvme-fc、nvme-rdma三種方式,所以用于映射的鏈路類型可以分別對應(yīng)普通tcp網(wǎng)絡(luò)、fc或者rdma。此時用作共享端的通用雙控存儲陣列中的兩個共享端控制器準備完畢,等待用作訪問端的通用雙控存儲陣列中的兩個訪問端控制器通過對應(yīng)的鏈路與其建立識別鏈接,以實現(xiàn)后續(xù)的共享訪問。
13、用作訪問端的通用雙控存儲陣列中的兩個訪問端控制器加載預(yù)配置模塊,此預(yù)配置模塊具體為nvme?core、nvme?fabrics等模塊。接著在nvme?subsystems中創(chuàng)建initiator子系統(tǒng);接著在initiator子系統(tǒng)下根據(jù)鏈路的不同加載不同鏈路內(nèi)核模塊,普通tcp網(wǎng)絡(luò)鏈路加載nvme-tcp模塊;fc鏈路環(huán)境則加載nvme-fc模塊;rdma網(wǎng)絡(luò)鏈路則加載nvme-rdma模塊。此處選擇的要與上述共享端控制器配置nvme?target映射端口時匹配的鏈路類型相同。
14、然后,訪問端控制器根據(jù)指定的nvme?target映射端口和鏈路類型執(zhí)行nvmediscover命令發(fā)現(xiàn)對應(yīng)的nvme?target、執(zhí)行nvme?connect命令于上述發(fā)現(xiàn)的nvmetarget,建立連接完成硬盤識別。
15、最后,訪問端控制器執(zhí)行多路徑設(shè)備管理命令multipath-ll,此時訪問端控制器會“看到”兩條鏈路路徑合成的nvme設(shè)備。通過訪問該nvme設(shè)備,即可完成對用作共享端的通用雙控存儲陣列中對應(yīng)的硬盤的訪問。
16、此外,用作共享端的通用雙控存儲陣列的兩個共享端控制器也可以創(chuàng)建initiator子系統(tǒng);用作訪問端的通用雙控存儲陣列中的兩個訪問端控制器也可以創(chuàng)建target子系統(tǒng);通過反向執(zhí)行本方法步驟,實現(xiàn)一個基本存儲單元中的兩個通用雙控存儲陣列可以相互識別訪問對方掛載的全部硬盤,即實現(xiàn)雙向共享的功能;或者說,同一控制器既支持nvme?target共享自己硬盤,也支持nvme?initiatot訪問其它硬盤,只需要調(diào)換兩者的角色,重新配置即可。
17、此外,由于同一塊硬盤,在兩個共享端控制器的nvme?target的命名空間中配置相同的uuid號,所以形成了鏈路路徑合并的效果,使得訪問端控制器通過執(zhí)行多路徑設(shè)備管理命令即可識別雙路徑合成對應(yīng)的唯一硬盤并建立連接與訪問,此時,其中一條鏈路故障或者一個通用雙控存儲陣列的一個控制器異常不影響正常功能。大大提高了互聯(lián)共享的安全性和穩(wěn)定性。
18、并且,linux內(nèi)核的nvme?target和nvme?initiator軟件機制支持fc、tcp網(wǎng)絡(luò)和rdma,鏈路形式更廣泛,更具有通用性。通過將多個基本存儲單元使用通用交換機連接,即可實現(xiàn)多個通用雙控存儲陣列之間的存儲資源共享。本方法利用linux內(nèi)核的nvme機制實現(xiàn)多個通用雙控存儲陣列之間的存儲資源共享;使得在整個多控制器存儲陣列網(wǎng)絡(luò)中,每一個控制器都可以訪問其他任意雙控存儲陣列擁有的硬盤。本方法不依賴過多的硬件限制,不需要pcie?switch、智能網(wǎng)卡等專用硬件,可以以更低的成本搭建多控制器存儲陣列,更具有通用性。?作為本發(fā)明的優(yōu)選,所述共享端控制器根據(jù)nvme-tcp鏈路配置nvmetarget映射端口,并配置ip和端口號。
19、由此,nvme-tcp允許nvme命令通過標準的tcp網(wǎng)絡(luò)進行傳輸。這種方式的好處是它可以利用現(xiàn)有的廣泛部署的tcp網(wǎng)絡(luò)基礎(chǔ)設(shè)施,適合于對成本敏感、且已擁有成熟tcp網(wǎng)絡(luò)基礎(chǔ)設(shè)施的環(huán)境。具體地,共享端控制器需要加載nvmet-tcp模塊并設(shè)置addr_trtype為tcp。
20、作為本發(fā)明的優(yōu)選,所述共享端控制器根據(jù)nvme-fc鏈路配置nvme?target映射端口,并配置wwn號。
21、由此,nvme-fc是將nvme命令封裝在fibre?channel協(xié)議中,利用fibre?channel網(wǎng)絡(luò)進行傳輸。fibre?channel是一種高性能的、基于連接的串行數(shù)據(jù)通信協(xié)議,廣泛用于企業(yè)級存儲網(wǎng)絡(luò)。具體地,共享端控制器需要加載nvmet-fc模塊并設(shè)置addr_trtype為fc。
22、作為本發(fā)明的優(yōu)選,所述共享端控制器根據(jù)nvme-rdma鏈路鏈路配置nvme?target映射端口。
23、nvme-rdma則是一種更高效的傳輸方式,它利用了rdma技術(shù)直接在目標端(target)和發(fā)起端(initiator)的內(nèi)存之間傳輸數(shù)據(jù),繞過了操作系統(tǒng)的網(wǎng)絡(luò)堆棧,從而減少了cpu的消耗和延遲。這種方式在性能上通常優(yōu)于nvme-tcp和nvme-fc。具體地,共享端控制器需要加載nvmet-rdma模塊,并設(shè)置addr_trtype為rdma。
24、作為本發(fā)明的優(yōu)選,步驟s2中,用作共享端的通用雙控存儲陣列中的兩個共享端控制器在nvme?subsystems中創(chuàng)建target子系統(tǒng)時,還包括設(shè)置cntlid號范圍步驟,且兩個所述共享端控制器設(shè)置的cntlid號范圍不同。
25、nvme?target中的cntlid號,即控制器標識符,是nvme協(xié)議中用于標識一個控制器的編號,用于區(qū)分和管理不同的控制器。每一次訪問端控制器對應(yīng)的nvme?initiator端在發(fā)現(xiàn)共享端控制器對應(yīng)的nvme?target端并建立一條會話連接后,都會對應(yīng)分配一個cntlid號,用于區(qū)分兩個不同的共享端控制器各自形成的兩條鏈路。并且,兩個共享端控制器設(shè)置的cntlid號范圍不同,可以保證任何時候,兩個共享端控制器兩條鏈路不會出現(xiàn)重合錯誤,保證多路徑機制能夠正常工作。
26、作為本發(fā)明的優(yōu)選,步驟s4中,根據(jù)指定相應(yīng)端口和鏈路類型識別與連接對應(yīng)nvme?target時,識別與連接的具體操作步驟為:用作訪問端的通用雙控存儲陣列中的兩個訪問端控制器執(zhí)行nvmediscover命令發(fā)現(xiàn)對應(yīng)nvme?target,執(zhí)行nvme?connect命令與已發(fā)現(xiàn)的nvme?target建立連接。
27、作為本發(fā)明的優(yōu)選,所述通用雙控存儲陣列為飛騰4u?24盤位的雙控存儲陣列。
28、一種多控存儲陣列,其特征在于,包含一個通用交換機和多個基于上述硬盤共享方法獲取的基本存儲單元。
29、作為本發(fā)明的優(yōu)選,所述通用交換機具備以太網(wǎng)交換功能。
30、作為本發(fā)明的優(yōu)選,所述通用交換機具備fc協(xié)議交換功能。
31、綜上所述,本發(fā)明具有如下的有益效果:
32、1.?該方法可以利用linux內(nèi)核的nvme機制實現(xiàn)多個通用雙控存儲陣列之間的存儲資源共享;使得在整個多控制器存儲陣列網(wǎng)絡(luò)中,每一個控制器都可以訪問其他任意雙控存儲陣列直接連接控制的硬盤;本方法不需要專門設(shè)計非通用的硬件模塊,縮短了系統(tǒng)搭建周期,節(jié)省了人力物力資源。
33、2.?本方法不依賴過多的硬件限制,不需要pcie?switch、智能網(wǎng)卡等專用硬件,可以以更低的成本搭建多控制器存儲陣列,更具有通用性。