陳鐵山
摘要:在計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)技術(shù)發(fā)展過程中,數(shù)據(jù)中心雙活架構(gòu)采用兩個(gè)數(shù)據(jù)中心雙活的解決方案。由于兩個(gè)中心同時(shí)承擔(dān)生產(chǎn)業(yè)務(wù),從而能夠提高數(shù)據(jù)中心整體服務(wù)能力和系統(tǒng)資源利用率。本文將探討數(shù)據(jù)中心關(guān)系到存儲(chǔ)層高可靠性和高性能各種因素,進(jìn)而給出優(yōu)化的數(shù)據(jù)算法優(yōu)化設(shè)計(jì)[1]。
關(guān)鍵詞:數(shù)據(jù)中心;存儲(chǔ)層;雙活架構(gòu)
中圖分類號(hào):TP308;TP333 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-9129(2020)08-0088-02
引言:雙活數(shù)據(jù)中心的定義是指兩個(gè)數(shù)據(jù)中心共享存儲(chǔ)、網(wǎng)絡(luò)以及服務(wù)器資源,且同時(shí)對(duì)外提供服務(wù),整個(gè)系統(tǒng)具有業(yè)務(wù)負(fù)載均衡和自動(dòng)故障切換功能。存儲(chǔ)雙活作為整個(gè)系統(tǒng)的核心基礎(chǔ)架構(gòu)平臺(tái),主要解決以下兩個(gè)核心問題。一是數(shù)據(jù)實(shí)時(shí)同步,零數(shù)據(jù)丟失(Recovery Point Object,RPO=0)。二是存儲(chǔ)資源的虛擬化,應(yīng)用的自動(dòng)切換(Recovery Time Objective,RTO≈0)[2]。
1 存儲(chǔ)雙活架構(gòu)分析
1.1業(yè)界存儲(chǔ)雙活技術(shù)方案。當(dāng)前,存儲(chǔ)業(yè)務(wù)有多種實(shí)現(xiàn)存儲(chǔ)雙活方案的架構(gòu)。
按照物理形態(tài)分類:一種是基于存儲(chǔ)網(wǎng)關(guān)來實(shí)現(xiàn),一種是基于磁盤陣列來實(shí)現(xiàn)。照業(yè)務(wù)能力分類:一種是A/A模式雙活,雙活的兩端都能提供服務(wù);一種是A/P模式雙活,只有一端提供服務(wù),并且提供服務(wù)的一端故障時(shí)另一端才提供服務(wù)[3]。
上述分類可以兩兩組合成不同的雙活方案,在方案可靠性、業(yè)務(wù)連續(xù)性以及可擴(kuò)展性方面都存在一定差異。
1.2方案可靠性。
按照物理形態(tài)分類:基于存儲(chǔ)網(wǎng)關(guān)的雙活方案除了需要在每個(gè)站點(diǎn)部署磁盤陣列外,還需在每個(gè)站點(diǎn)新增一臺(tái)或多臺(tái)存儲(chǔ)網(wǎng)關(guān)設(shè)備,由存儲(chǔ)網(wǎng)關(guān)組成一個(gè)跨站點(diǎn)的集群,存儲(chǔ)網(wǎng)關(guān)導(dǎo)致組網(wǎng)復(fù)雜,增加故障節(jié)點(diǎn);基于磁盤陣列的雙活方案,只需要將每個(gè)站點(diǎn)的一臺(tái)或多臺(tái)全冗余架構(gòu)的磁盤陣列組成一個(gè)跨站點(diǎn)的集群,實(shí)現(xiàn)自動(dòng)故障切換,不需要網(wǎng)關(guān),降低組網(wǎng)復(fù)雜度,提高方案可靠性。
此外還要集群的架構(gòu),有些集群實(shí)際上采用的是Stretched架構(gòu),即將一臺(tái)陣列的兩個(gè)控制器部署在兩個(gè)站點(diǎn),每站點(diǎn)內(nèi)部只有一個(gè)控制器,存在單點(diǎn)故障風(fēng)險(xiǎn),可靠性低。
1.3雙活架構(gòu)分析。
按照物理形態(tài)分類:基于存儲(chǔ)網(wǎng)關(guān)的雙活方案除了需要在每個(gè)站點(diǎn)部署磁盤陣列外,還需在每個(gè)站點(diǎn)新增一臺(tái)或多臺(tái)存儲(chǔ)網(wǎng)關(guān)設(shè)備,IO路徑為主機(jī)——網(wǎng)關(guān)——磁盤陣列,相比磁盤陣列方案,因?yàn)镮O路徑需要經(jīng)過額外網(wǎng)關(guān),比磁盤陣列方案至少多0.5ms的IO處理時(shí)間。
按照業(yè)務(wù)能力分類:A/A模式雙活采用卷鏡像技術(shù)實(shí)現(xiàn)兩站點(diǎn)間的數(shù)據(jù)實(shí)時(shí)同步。兩臺(tái)存儲(chǔ)設(shè)備上的LUN被虛擬化為一個(gè)虛擬的卷,主機(jī)寫操作通過卷虛擬化鏡像技術(shù)同時(shí)寫入這兩個(gè)存儲(chǔ)設(shè)備,保持?jǐn)?shù)據(jù)實(shí)時(shí)一致[4]。其中任何一個(gè)存儲(chǔ)設(shè)備故障,虛擬卷仍能提供正常的IO讀寫能力,主機(jī)業(yè)務(wù)不受影響。待存儲(chǔ)設(shè)備恢復(fù)正常后,存儲(chǔ)虛擬化設(shè)備將增量數(shù)據(jù)后臺(tái)同步到修復(fù)的存儲(chǔ)設(shè)備,整個(gè)過程對(duì)主機(jī)“透明”,不會(huì)影響主機(jī)業(yè)務(wù)。
無論哪種類型方案,為了保證兩個(gè)數(shù)據(jù)中心存儲(chǔ)的數(shù)據(jù)實(shí)時(shí)一致,同步復(fù)制與虛擬化卷鏡像的寫操作都需要等待兩端存儲(chǔ)同時(shí)寫成功之后再返回給主機(jī)“寫成功”。因此,兩種架構(gòu)都將對(duì)IO寫操作帶來一定的時(shí)延增加,必須提供低時(shí)延的網(wǎng)絡(luò),以減小對(duì)寫時(shí)延的影響。
A/A模式雙活:提供可供兩數(shù)據(jù)中心主機(jī)同時(shí)進(jìn)行讀寫訪問的共享存儲(chǔ)卷。主機(jī)訪問請(qǐng)求由本數(shù)據(jù)中心所在的存儲(chǔ)網(wǎng)關(guān)或磁盤陣列響應(yīng),無需跨越同城網(wǎng)絡(luò)訪問另一數(shù)據(jù)中心的存儲(chǔ)網(wǎng)關(guān)或磁盤陣列。
A/P模式雙活:將一臺(tái)存儲(chǔ)網(wǎng)關(guān)或磁盤陣列的控制器部署在兩個(gè)數(shù)據(jù)中心,且控制器處于主備模式,備控制器無法被主機(jī)訪問,只能提供一條備用的存儲(chǔ)路徑,不是真正的雙活。兩個(gè)數(shù)據(jù)中心的主機(jī)都只能通過訪問其中一個(gè)控制器來進(jìn)行IO讀寫,不僅增長(zhǎng)了主機(jī)IO的路徑,而且增加了主控制器的業(yè)務(wù)壓力,影響系統(tǒng)性能。
2 存儲(chǔ)層的高可靠性和高性能設(shè)計(jì)
根據(jù)上面的技術(shù)對(duì)比,經(jīng)過可靠性,性能等因數(shù)評(píng)估,本方案選用磁盤陣列實(shí)現(xiàn)A/A模式雙活。
2.1存儲(chǔ)層高可靠性設(shè)計(jì)。存儲(chǔ)層雙活方案采用OceanStor系列產(chǎn)品,實(shí)現(xiàn)存儲(chǔ)雙活架構(gòu),為兩個(gè)數(shù)據(jù)中心存儲(chǔ)同時(shí)提供讀寫服務(wù),且整個(gè)存儲(chǔ)系統(tǒng)架構(gòu)全冗余,任意數(shù)據(jù)中心故障時(shí),另外一個(gè)數(shù)據(jù)中心有一份存儲(chǔ)設(shè)備和相同數(shù)據(jù)可用,最大程度提高了業(yè)務(wù)連續(xù)性[5]。
(1)跨站點(diǎn)存儲(chǔ)集群設(shè)計(jì)。本方案利用跨站點(diǎn)雙活集群技術(shù)提供雙活的存儲(chǔ)架構(gòu),最大支持32個(gè)存儲(chǔ)控制器,向應(yīng)用服務(wù)器提供無差異的并行訪問,同時(shí)處理應(yīng)用服務(wù)器的I/O請(qǐng)求;各控制器間互為備份,均衡負(fù)載,控制器故障后,其承接的業(yè)務(wù)自動(dòng)切換到正??刂破?,保證系統(tǒng)的可靠性、業(yè)務(wù)的連續(xù)性。
集群間的通信支持FC或10GE鏈路,通信包括集群心跳和數(shù)據(jù)鏡像。
此外本方案無需存儲(chǔ)網(wǎng)關(guān)實(shí)現(xiàn),降低組網(wǎng)復(fù)雜度,提高系統(tǒng)可靠性。
(2)跨站點(diǎn)數(shù)據(jù)鏡像設(shè)計(jì)。通過HyperMetroLUN功能,保證兩個(gè)站點(diǎn)磁盤陣列之間數(shù)據(jù)的實(shí)時(shí)同步。兩臺(tái)存儲(chǔ)設(shè)備上的LUN被虛擬化為一個(gè)虛擬的卷,主機(jī)寫操作通過卷虛擬化鏡像技術(shù)同時(shí)寫入兩個(gè)數(shù)據(jù)中心的存儲(chǔ)設(shè)備,保持?jǐn)?shù)據(jù)實(shí)時(shí)一致。
假如數(shù)據(jù)中心A陣列收到寫I/O,處理流程如下:
申請(qǐng)寫權(quán)限和記錄寫日志:數(shù)據(jù)中心A陣列收到主機(jī)寫請(qǐng)求,先申請(qǐng)HyperMetro LUN的寫權(quán)限;獲得寫權(quán)限后,HyperMetro將該請(qǐng)求記錄寫日志[6];
執(zhí)行雙寫:將該請(qǐng)求拷貝2份分別寫入本地LUN和遠(yuǎn)端LUN;
雙寫結(jié)果處理:等待兩端LUN的寫處理結(jié)果都返回;
響應(yīng)主機(jī):鏡像卷返回寫I/O操作完成。
如果任何一個(gè)存儲(chǔ)設(shè)備故障,采用日志記錄故障期間數(shù)據(jù)的變化情況,待存儲(chǔ)設(shè)備恢復(fù)正常后,將增量數(shù)據(jù)后臺(tái)同步到修復(fù)的存儲(chǔ)設(shè)備,整個(gè)過程對(duì)主機(jī)“透明”,不會(huì)影響主機(jī)業(yè)務(wù)。
(3)跨站點(diǎn)數(shù)據(jù)修復(fù)設(shè)計(jì)。單塊磁盤可能會(huì)因?yàn)榈綦姷犬惓G闆r出現(xiàn)壞塊。如果是可修復(fù)錯(cuò)誤而且本端無法修復(fù),因?yàn)檫h(yuǎn)端站點(diǎn)有鏡像數(shù)據(jù),則會(huì)自動(dòng)從遠(yuǎn)端站點(diǎn)獲取數(shù)據(jù)來修復(fù)本地?cái)?shù)據(jù)盤的壞塊,進(jìn)一步提高系統(tǒng)可靠性。
假如數(shù)據(jù)中心A陣列收到寫I/O,鏡像處理流程如下:
申請(qǐng)讀權(quán)限:陣列收到主機(jī)讀請(qǐng)求,先確認(rèn)HyperMetro的本地讀權(quán)限;
讀本地LUN;
讀本地LUN結(jié)果返回,如果可修復(fù)錯(cuò)誤,執(zhí)行錯(cuò)誤修復(fù);
重定向遠(yuǎn)端讀;
遠(yuǎn)端讀返回;
讀結(jié)果返回;
本地寫入修復(fù)。
(4)邏輯錯(cuò)誤保護(hù)設(shè)計(jì)。當(dāng)遭遇病毒攻擊或人為誤操作等異常時(shí),數(shù)據(jù)中心的數(shù)據(jù)可能被破壞。采用虛擬快照技術(shù),在操作前對(duì)現(xiàn)有數(shù)據(jù)卷激活快照,實(shí)現(xiàn)本地?cái)?shù)據(jù)保護(hù)。
虛擬快照采用寫前拷貝(COW)技術(shù),僅將變化的數(shù)據(jù)拷貝至快照卷,系統(tǒng)資源占用少。結(jié)合容災(zāi)管理軟件,激活快照前觸發(fā)數(shù)據(jù)庫完全檢查點(diǎn),待數(shù)據(jù)下盤完成后,激活快照,保證快照數(shù)據(jù)完全滿足數(shù)據(jù)庫的一致性要求,快速拉起數(shù)據(jù)庫。
(5)高可靠仲裁防腦裂設(shè)計(jì)。為保證各種異常情況下,存儲(chǔ)雙活集群能夠進(jìn)行仲裁,設(shè)計(jì)第三方仲裁站點(diǎn),以保證極端場(chǎng)景下的業(yè)務(wù)連續(xù)性。極端場(chǎng)景包括:出現(xiàn)數(shù)據(jù)中心整體故障或中間鏈路故障等場(chǎng)景,存儲(chǔ)集群仍然可以訪問仲裁服務(wù)器進(jìn)行仲裁,保證業(yè)務(wù)可靠性和數(shù)據(jù)一致性[7]。
A.有仲裁站點(diǎn)
為保證任一數(shù)據(jù)中心整體故障或中間鏈路故障等極端場(chǎng)景下,主機(jī)業(yè)務(wù)的連續(xù)性,方案采用仲裁服務(wù)器。
第三方仲裁站點(diǎn)位于XX點(diǎn),XX點(diǎn)與兩個(gè)數(shù)據(jù)中心之間通過XX線互聯(lián)。仲裁服務(wù)器可以運(yùn)行在虛擬機(jī)上。
當(dāng)出現(xiàn)任一數(shù)據(jù)中心整體故障或中間鏈路故障等極端場(chǎng)景,整個(gè)集群的仲裁過程如下:
XX數(shù)據(jù)中心與XX數(shù)據(jù)中心之間的中間鏈路斷開,導(dǎo)致兩個(gè)數(shù)據(jù)中心集群發(fā)生分裂,進(jìn)而兩個(gè)中心之間的存儲(chǔ)虛擬化平臺(tái)發(fā)生“腦裂”,存儲(chǔ)虛擬化平臺(tái)從一個(gè)大集群分裂為兩個(gè)小集群;
根據(jù)集群“腦裂”的通用原理,當(dāng)大集群分裂為兩個(gè)小集群時(shí),每個(gè)小集群分別搶占第三方仲裁服務(wù)器,搶占成功的小集群“獲勝”,將繼續(xù)對(duì)外提供服務(wù),為應(yīng)用提供存儲(chǔ)訪問空間;
未搶占到仲裁信息的小集群則自動(dòng)退出集群,不再對(duì)外提供服務(wù);
當(dāng)中間鏈路恢復(fù)時(shí),“自動(dòng)退出的小集群”檢測(cè)到中間鏈路由故障變?yōu)檎?,嘗試與“繼續(xù)服務(wù)的小集群”握手通信,經(jīng)過握手通信兩個(gè)小集群再次組成一個(gè)大集群,以Active-Active模式提供服務(wù),互相之間實(shí)現(xiàn)冗余。
B.無仲裁站點(diǎn)
若無第三方仲裁站點(diǎn),用戶在某個(gè)數(shù)據(jù)中心部署仲裁服務(wù)器,業(yè)務(wù)表現(xiàn)和上述的描述大致一致,但如果仲裁服務(wù)器所在的數(shù)據(jù)中心整體故障,雙活業(yè)務(wù)停止。
若無仲裁服務(wù)器,用戶可以設(shè)置其中一端陣列為優(yōu)先站點(diǎn)。另一端為非優(yōu)先站點(diǎn)。
當(dāng)發(fā)生腦裂場(chǎng)景,或者非優(yōu)先站點(diǎn)故障時(shí),優(yōu)先站點(diǎn)上的LUN續(xù)提供服務(wù),非優(yōu)先站點(diǎn)的LUN停止提供服務(wù)。
不足之處在于當(dāng)兩陣列之間失去聯(lián)系,可能是站點(diǎn)間鏈路丟失或其中一個(gè)陣列故障。系統(tǒng)不能區(qū)分這兩種情況,當(dāng)優(yōu)先站點(diǎn)陣列故障時(shí),非優(yōu)先站點(diǎn)不能接管雙活業(yè)務(wù),雙活業(yè)務(wù)停止。
(6)異構(gòu)磁盤陣列高可靠性設(shè)計(jì)
OceanStor系列還具備虛擬化功能,實(shí)現(xiàn)對(duì)各種磁盤陣列的統(tǒng)一接管,將數(shù)據(jù)中心內(nèi)不同類型的磁盤陣列資源池化,實(shí)現(xiàn)存儲(chǔ)資源的整合和優(yōu)化,提高資源利用率[8]。
異構(gòu)虛擬化就是把異構(gòu)陣列映射到本端陣列的LUN,作為可為本端陣列提供存儲(chǔ)空間的邏輯盤LD,再在該邏輯盤LD上創(chuàng)建為可對(duì)主機(jī)映射的異構(gòu)設(shè)備LUN eDevLun,邏輯盤LD為eDevLun的數(shù)據(jù)卷Data Volume提供了全部的數(shù)據(jù)存儲(chǔ)空間,eDevLun的元數(shù)據(jù)卷Meta Volume的存儲(chǔ)空間由本地存儲(chǔ)提供。
(7)異地應(yīng)用容災(zāi)設(shè)計(jì)。雙活數(shù)據(jù)中心實(shí)現(xiàn)同城容災(zāi),同一關(guān)鍵業(yè)務(wù)負(fù)載均衡到雙數(shù)據(jù)中心,單數(shù)據(jù)中心發(fā)生故障,業(yè)務(wù)零中斷,數(shù)據(jù)零丟失。為了抵御地域性重大災(zāi)難,為關(guān)鍵業(yè)務(wù)提供更高的業(yè)務(wù)連續(xù)性保障。雙活數(shù)據(jù)中心支持平滑擴(kuò)展為兩地三中心,同城實(shí)現(xiàn)雙活,異地采用異步復(fù)制方式。
2.2存儲(chǔ)層高性能設(shè)計(jì)。為了保證兩個(gè)數(shù)據(jù)中心存儲(chǔ)的數(shù)據(jù)實(shí)時(shí)一致,寫操作都需要等待兩端存儲(chǔ)同時(shí)寫成功之后再返回給主機(jī)“寫成功”。因此,將對(duì)IO寫操作帶來一定的時(shí)延增加,必須提供多種措施,以減小對(duì)寫時(shí)延的影響。
(1)傳輸協(xié)議優(yōu)化設(shè)計(jì)。支持存儲(chǔ)協(xié)議優(yōu)化,正常的SCSI流程中,寫IO有“寫分配”和“寫數(shù)據(jù)”這兩次交互,經(jīng)過優(yōu)化變?yōu)橹灰?次交互,該特性將時(shí)延縮短一半。該特性對(duì)于跨站點(diǎn)寫IO交互次數(shù)減少一半,提升整體雙活性能。
A.讀寫緩存設(shè)計(jì)
支持同時(shí)的讀寫緩存,數(shù)據(jù)分別寫入本地LUN和遠(yuǎn)端LUN。通常情況下LUN是回寫狀態(tài),數(shù)據(jù)會(huì)寫入該LUN的Cache就會(huì)返回,響應(yīng)更快。不像業(yè)界有些網(wǎng)關(guān)是采用透寫的方式,沒有寫緩存。
B.地域優(yōu)化訪問設(shè)計(jì)
針對(duì)雙活數(shù)據(jù)中心場(chǎng)景,兩站點(diǎn)的距離較遠(yuǎn),網(wǎng)絡(luò)傳輸時(shí)間成為影響系統(tǒng)性能的主要瓶頸,減少跨數(shù)據(jù)中心訪問次數(shù)是優(yōu)化性能的重點(diǎn)。
雙活數(shù)據(jù)中心的跨站點(diǎn)訪問的代價(jià)相當(dāng)高,假如兩個(gè)數(shù)據(jù)中心的鏈路距離為100km,一次往返傳輸理論需要消耗1ms時(shí)間。本方案提供地域優(yōu)化的訪問技術(shù),可以大幅減少跨站點(diǎn)訪問,從而減少時(shí)延提供性能。
(2)優(yōu)化讀設(shè)計(jì)。針對(duì)雙活數(shù)據(jù)中心場(chǎng)景,主機(jī)能夠從本地或異地存儲(chǔ)讀取數(shù)據(jù),本方案需要設(shè)計(jì)“Site Read”模式,以避免主機(jī)跨數(shù)據(jù)中心讀取數(shù)據(jù),提升方案整體性能。其讀I/O流程如下:
申請(qǐng)讀權(quán)限:陣列收到主機(jī)讀請(qǐng)求,先確認(rèn)HyperMetro的本地讀權(quán)限[9];