存儲(chǔ)雙活的基本架構(gòu)及原理
企業(yè)容災(zāi)架構(gòu)中,通過存儲(chǔ)實(shí)現(xiàn)雙活復(fù)制的架構(gòu)相對(duì)比較常見。一般從應(yīng)用訪問到底層存儲(chǔ)的縱向維度會(huì)分為網(wǎng)絡(luò)層、應(yīng)用層、數(shù)據(jù)庫(kù)層、存儲(chǔ)網(wǎng)關(guān)層以及存儲(chǔ)陣列等四層關(guān)鍵層。談及存儲(chǔ)雙活架構(gòu)的容災(zāi)切換場(chǎng)景,重點(diǎn)關(guān)注存儲(chǔ)網(wǎng)關(guān)層以及存儲(chǔ)陣列層的分析。以存儲(chǔ)網(wǎng)關(guān)模式的雙活架構(gòu)為例,如圖1所示,通常存儲(chǔ)雙活架構(gòu)由兩個(gè)相距較近的數(shù)據(jù)中心(百公里以內(nèi))的存儲(chǔ)網(wǎng)關(guān)層、存儲(chǔ)層、仲裁中心以及相互之間的以太網(wǎng)絡(luò)和存儲(chǔ)網(wǎng)絡(luò)組成。
?
??
?
圖1 存儲(chǔ)雙活典型架構(gòu)圖
如圖1所示,H1&H2表示主機(jī)節(jié)點(diǎn),從主機(jī)節(jié)點(diǎn)到存儲(chǔ)網(wǎng)關(guān)的訪問路徑,我們不做詳細(xì)分析。
SG1&SG2表示存儲(chǔ)網(wǎng)關(guān),雙中心的存儲(chǔ)網(wǎng)關(guān)通過存儲(chǔ)網(wǎng)絡(luò)組成一組存儲(chǔ)網(wǎng)關(guān)集群,提供AA服務(wù)。
SA1&SA2表示底層存儲(chǔ)磁盤陣列,通過存儲(chǔ)網(wǎng)絡(luò)分別與SG1和SG2相連接。
Q表示SG1和SG2組成集群的仲裁中心,分別以以太網(wǎng)絡(luò)與兩個(gè)存儲(chǔ)網(wǎng)關(guān)相連接。
存儲(chǔ)雙活架構(gòu)正常讀寫原理分析如下:
首先,兩個(gè)數(shù)據(jù)中心的主機(jī)節(jié)點(diǎn)將讀寫請(qǐng)求通過存儲(chǔ)網(wǎng)絡(luò)發(fā)送到存儲(chǔ)網(wǎng)關(guān)層,兩邊的主機(jī)H1&H2看到的存儲(chǔ)空間是一個(gè)經(jīng)過了鏡像組合的邏輯磁盤D,具體執(zhí)行物理讀寫的時(shí)候可以通過SG1執(zhí)行,也可以通過SG2執(zhí)行(具體要看存儲(chǔ)雙活A(yù)A策略的粒度,以存儲(chǔ)卷為單位還是以每次IO的BLOCK為單位)。
然后,存儲(chǔ)網(wǎng)關(guān)SG1或者SG2在接收到上層應(yīng)用發(fā)來的寫請(qǐng)求之后,直接在其本地將IO鏡像為兩個(gè)同時(shí)進(jìn)行的事務(wù)分配到SA1&SA2上,這樣主機(jī)層發(fā)送到邏輯磁盤D上的單次IO在存儲(chǔ)網(wǎng)關(guān)層就被復(fù)制為兩個(gè)完全相同的IO,從而實(shí)現(xiàn)了數(shù)據(jù)的副本保護(hù)機(jī)制。
最后,待SA1&SA2兩個(gè)存儲(chǔ)陣列的緩存寫完成之后,將ACK結(jié)果反饋給SG1或者SG2,當(dāng)兩邊的ACK結(jié)果都順利完成之后,最終宣告應(yīng)用層的數(shù)據(jù)寫完成。
存儲(chǔ)雙活架構(gòu)下的容災(zāi)切換場(chǎng)景
表 1 存儲(chǔ)雙活容災(zāi)故障切換場(chǎng)景分析
?
??
?
故障仲裁機(jī)制
基于第一部分的架構(gòu)圖,如果C1、C2、L2-1-2、L2-2-2出現(xiàn)同時(shí)的故障疊加,那會(huì)出現(xiàn)什么樣的情況?在這種情況下,存儲(chǔ)雙活架構(gòu)的健壯性安全性如何考慮?事實(shí)上,故障的疊加問題一般屬于二次故障,在容災(zāi)架構(gòu)設(shè)計(jì)當(dāng)中是不需要做考慮的。一般情況下我們只考慮一次故障,因?yàn)槎位蛘叨啻喂收系膱?chǎng)景已經(jīng)超過了容災(zāi)的正常RTO&RPO技術(shù)標(biāo)準(zhǔn)約束。但是在以上問題當(dāng)中所考慮的故障點(diǎn)比較特殊,根據(jù)常規(guī)判斷來講,如果我們雙中心之間的連接完全走的是唯一路由的場(chǎng)景下,這幾個(gè)點(diǎn)出現(xiàn)同時(shí)故障的可能性非常高。因此它也是我們?cè)诳紤]雙活過程當(dāng)中非常重要的故障切換場(chǎng)景。
當(dāng)C1出現(xiàn)故障的時(shí)候,如果是數(shù)據(jù)庫(kù)雙活集群(例如Oracle RAC),那么兩個(gè)節(jié)點(diǎn)在網(wǎng)絡(luò)上失去的仲裁資源是同等的,接下來需要判斷的是雙活所持存儲(chǔ)仲裁資源的狀況。但是問題來了,這個(gè)時(shí)候C2、L2-1-2、L2-2-2同時(shí)發(fā)生故障,存儲(chǔ)層也處于需要仲裁的狀態(tài),而存儲(chǔ)的仲裁需要根據(jù)Q的判斷來完成。也就是說當(dāng)仲裁中心仲裁之后,存儲(chǔ)的狀態(tài)才會(huì)到達(dá)正常穩(wěn)定的狀態(tài),磁盤資源情況才會(huì)明確。當(dāng)磁盤資源情況明確之后,上層數(shù)據(jù)庫(kù)集群的磁盤仲裁資源才可以作為判斷依據(jù),然后數(shù)據(jù)庫(kù)集群才會(huì)有仲裁的可能性,最終整個(gè)容災(zāi)系統(tǒng)才有可能到正常穩(wěn)定狀態(tài)。
因此,在這種架構(gòu)模式下,數(shù)據(jù)庫(kù)集群和存儲(chǔ)集群的疊加必然會(huì)帶來以上所描述的仲裁復(fù)雜性的問題。理論上存儲(chǔ)雙活的仲裁和數(shù)據(jù)庫(kù)的仲裁都是有時(shí)間參數(shù)可以控制他們的觸發(fā)時(shí)間和仲裁時(shí)間,只要保證時(shí)間順序按照上述邏輯有序可循就可以了,但是實(shí)際容災(zāi)場(chǎng)景下的仲裁是否可以如理論所描述的順利?是否會(huì)有更復(fù)雜的場(chǎng)景導(dǎo)致理論上的偏差?這些都是未知的。
簡(jiǎn)言之,如果希望存儲(chǔ)雙活架構(gòu)的健壯性和安全性更有保障,就不建議在上層應(yīng)用方面做更復(fù)雜的架構(gòu)進(jìn)行疊加使用。
社區(qū)專家主張
趙海主編:基于前面的共識(shí),某金融機(jī)構(gòu)架構(gòu)師李威、江西農(nóng)信運(yùn)維技術(shù)經(jīng)理鄧毓、某股份制銀行系統(tǒng)架構(gòu)師老谷分別主張本議題下的相關(guān)關(guān)鍵點(diǎn),幾位專家的主張?jiān)趯幭你y行技術(shù)經(jīng)理陳明福及我的復(fù)議下,各位專家的主張最終形成一定的共識(shí)供同行參考。
李威 某金融機(jī)構(gòu)架構(gòu)師:
不談業(yè)務(wù)的雙活很大程度上就是耍流氓!雙活數(shù)據(jù)中心架構(gòu)的另一重點(diǎn)設(shè)計(jì)是在更高維度的雙活數(shù)據(jù)中心存儲(chǔ)(數(shù)據(jù)核心層)與雙活應(yīng)用(業(yè)務(wù)核心層)的聯(lián)動(dòng),只有縱向完成閉環(huán)切換才能保障業(yè)務(wù)的連續(xù)性。
說到基于存儲(chǔ)的雙活數(shù)據(jù)中心架構(gòu)時(shí),人們很可能在下意識(shí)里第一個(gè)想到便是“存儲(chǔ)”,是某一款存儲(chǔ)產(chǎn)品,亦或是某款存儲(chǔ)雙活架構(gòu)的方案。在如今信息化浪潮下,筆者認(rèn)為對(duì)此處“存儲(chǔ)”的理解應(yīng)該更加精準(zhǔn)一些,可以總結(jié)為一個(gè)基本點(diǎn)和兩個(gè)方向:一個(gè)基本點(diǎn),指的是基于通用型存儲(chǔ)產(chǎn)品實(shí)現(xiàn);兩個(gè)方向,分別是同步復(fù)制和異步復(fù)制兩種雙活方式。
?
??
?
圖2 Active-Active雙活模式數(shù)據(jù)寫入
集中式存儲(chǔ)產(chǎn)品構(gòu)建的雙活數(shù)據(jù)中心,會(huì)根據(jù)企業(yè)對(duì)雙活數(shù)據(jù)中心的建設(shè)目標(biāo)及雙活要求制定方案。若以高性能高可靠為目標(biāo),存儲(chǔ)多以Active-Active(如圖2)同步復(fù)制模式配置雙活,通過見證仲裁服務(wù),對(duì)IO進(jìn)行拆分,同步寫入多端存儲(chǔ),高權(quán)重單向讀取,確保底層存儲(chǔ)數(shù)據(jù)強(qiáng)一致的同時(shí)業(yè)務(wù)效率也能達(dá)到高性能水準(zhǔn)。在Active-Active模式下,既要保證IO效率又要保障多端數(shù)據(jù)的一致性,因此必須有一種處理機(jī)制來保駕護(hù)航——IO鎖機(jī)制,這是同步復(fù)制的核心也是雙活安全的前提。縱觀主流存儲(chǔ)產(chǎn)品同步復(fù)制IO鎖核心機(jī)制實(shí)現(xiàn),我們根據(jù)何時(shí)返回IO ACK信標(biāo)大致可以劃分為兩個(gè)方向:1. 將源端IO數(shù)據(jù)完全同步到遠(yuǎn)端后向上層應(yīng)用返回IO結(jié)果。2. 源端存儲(chǔ)加鎖后便向上層應(yīng)用返回IO結(jié)果。兩種鎖機(jī)制各有利弊,前者需要更高質(zhì)量的通信鏈路去保證IO效率,后者需要控制器及仲裁服務(wù)更加精準(zhǔn)穩(wěn)定,稍后我們會(huì)有詳細(xì)的分析和介紹。
?
??
?
圖3 Active-Passive雙活模式數(shù)據(jù)寫入
另一種構(gòu)建雙活數(shù)據(jù)中心的方式,則是通過存儲(chǔ)異步復(fù)制實(shí)現(xiàn)。本地業(yè)務(wù)讀寫請(qǐng)求由本端存儲(chǔ)響應(yīng),通過特定時(shí)間間隔從源端存儲(chǔ)到遠(yuǎn)端存儲(chǔ)復(fù)制,一定程度上保障多端存儲(chǔ)的一致性和高可靠性。相對(duì)于上文的Active-Active存儲(chǔ)雙活,異步復(fù)制多以Active-Passive(如圖3)模式進(jìn)行,在實(shí)際雙活數(shù)據(jù)中心實(shí)踐中,生產(chǎn)服務(wù)端存儲(chǔ)承擔(dān)Active角色,絕大多數(shù)業(yè)務(wù)請(qǐng)求讀寫均在生產(chǎn)端,遠(yuǎn)端存儲(chǔ)承擔(dān)Passive角色,僅實(shí)現(xiàn)少量業(yè)務(wù)查詢或統(tǒng)計(jì)類業(yè)務(wù),只有在生產(chǎn)端存儲(chǔ)宕機(jī)、切換到遠(yuǎn)端存儲(chǔ)的情況下才進(jìn)行在線業(yè)務(wù)的生產(chǎn)支撐。同時(shí),異步復(fù)制的實(shí)現(xiàn)基礎(chǔ)相對(duì)較低,僅需滿足完全復(fù)制增量數(shù)據(jù)的鏈路帶寬即可,建設(shè)成本低廉。
基于存儲(chǔ)產(chǎn)品構(gòu)建的雙活數(shù)據(jù)中心,始終會(huì)面臨鏈路質(zhì)量、數(shù)據(jù)一致性與可靠性兩大類問題的考驗(yàn)。企業(yè)通常采用光纖鏈路進(jìn)行數(shù)據(jù)同步,由于兩個(gè)數(shù)據(jù)中心之間天然存在物理距離,隨著距離的增長(zhǎng)鏈路的延遲也會(huì)增大,理論上每增加100KM,會(huì)增加1ms的RTT(往返延遲時(shí)間),鏈路的建設(shè)成本也呈指數(shù)級(jí)增長(zhǎng)。而在主流高端存儲(chǔ)雙活實(shí)踐中,兩地距離鏈路延遲必須小于3ms,極大地限制雙活數(shù)據(jù)中心的物理選址。同時(shí)對(duì)于TB級(jí)別的業(yè)務(wù),鏈路帶寬要求通常在8GB及以上,保障業(yè)務(wù)波峰期雙端存儲(chǔ)雙活的高可靠性。如何平衡鏈路質(zhì)量與持續(xù)建設(shè)成本是雙活數(shù)據(jù)中心建設(shè)中一個(gè)持久話題。
其次,存儲(chǔ)數(shù)據(jù)一致性與可靠性保障也是一大難關(guān)。對(duì)于同步復(fù)制而言,鎖機(jī)制是一大關(guān)鍵,因?yàn)橛墟i機(jī)制的存在,多端存儲(chǔ)才能保持?jǐn)?shù)據(jù)的一致性,若鎖機(jī)制被破壞,雙活的意義也蕩然無(wú)存。在鎖機(jī)制的實(shí)現(xiàn)上,“如何保障數(shù)據(jù)的時(shí)序一致性”的難題首當(dāng)其沖。在AB雙活數(shù)據(jù)中心, A端應(yīng)用向A端存儲(chǔ)卷寫入數(shù)據(jù),當(dāng)這份更新數(shù)據(jù)還未完全同步到B端存儲(chǔ)卷之前,B端某應(yīng)用如果發(fā)起針對(duì)同一個(gè)目標(biāo)地址的讀寫操作,這時(shí)B端存儲(chǔ)卷就不能響應(yīng)此次IO,B端存儲(chǔ)卷該目標(biāo)地址的數(shù)據(jù)仍是舊數(shù)據(jù),與A端該目標(biāo)地址存在數(shù)據(jù)差異。在存儲(chǔ)鎖機(jī)制的驅(qū)動(dòng)下,A端應(yīng)用向A端存儲(chǔ)卷寫入數(shù)據(jù)前應(yīng)鎖住B端對(duì)應(yīng)的目標(biāo)地址空間后再執(zhí)行數(shù)據(jù)寫入,若B端加鎖不成功,A端IO則懸掛直至B端加鎖成功。B端存儲(chǔ)被鎖期間均不能響應(yīng)該目標(biāo)地址的讀寫IO,必須等待A端的IO數(shù)據(jù)同步到B端且更新完成才能響應(yīng)IO請(qǐng)求。
鎖機(jī)制不僅復(fù)雜,在保障時(shí)序一致性的前提下還要克服第二個(gè)現(xiàn)實(shí)難題,即“如何克服鏈路延遲導(dǎo)致的IO性能降低”。在上面的示例中,AB雙活數(shù)據(jù)中心因?yàn)榫嚯x存在鏈路延遲,那A端存儲(chǔ)應(yīng)該何時(shí)返回IO結(jié)果給A端應(yīng)用呢?是B端加鎖成功后還是B端成功更新A端該目標(biāo)地址的全部新數(shù)據(jù)后?如果是前者,B端加鎖成功A端應(yīng)用即可獲得IO結(jié)果,B端存儲(chǔ)后續(xù)還存在同步更新的操作,應(yīng)用層IO效率雖然得以提升,但加大了丟失數(shù)據(jù)的風(fēng)險(xiǎn),一旦B端還未完全同步更新數(shù)據(jù)時(shí)出現(xiàn)鏈路中斷或者A端存儲(chǔ)宕機(jī),B端承接業(yè)務(wù)時(shí)整體數(shù)據(jù)呈不一致的狀態(tài),對(duì)業(yè)務(wù)的傷害不言而喻。如果是后者,即傳統(tǒng)的同步復(fù)制方式,因?yàn)樾枰鹊紹端存儲(chǔ)完全同步更新數(shù)據(jù),所以整體IO效率受鏈路傳輸質(zhì)量影響而降低,但鮮少出現(xiàn)AB端數(shù)據(jù)不一致的情況。存儲(chǔ)的高效性能和數(shù)據(jù)的強(qiáng)一致性保障,魚和熊掌不可兼得。
克服時(shí)序一致性問題,對(duì)于異步復(fù)制而言則輕松許多。主流存儲(chǔ)廠商通常采取周期性復(fù)制、連續(xù)性復(fù)制兩種手段實(shí)現(xiàn)。周期性復(fù)制相對(duì)主流,也是較為便捷的一種方式,在雙端存儲(chǔ)完成初始化同步后,每間隔一段時(shí)間源端存儲(chǔ)進(jìn)行一次快照,對(duì)比并記錄相近的兩份快照間的差異數(shù)據(jù),并將差異數(shù)據(jù)拆分成多個(gè)IO流片段,同步至遠(yuǎn)端存儲(chǔ)應(yīng)用更新。若IO流傳輸過程中或遠(yuǎn)端存儲(chǔ)更新數(shù)據(jù)時(shí)出現(xiàn)失敗,則回滾至上一次快照狀態(tài),等待下一次同步周期再進(jìn)行數(shù)據(jù)更新。若鏈路質(zhì)量不佳持續(xù)出現(xiàn)多次失敗,源端存儲(chǔ)和遠(yuǎn)端存儲(chǔ)的數(shù)據(jù)差異將越來越大,雙活RPO顯著降低。而連續(xù)復(fù)制則是不斷地向遠(yuǎn)端進(jìn)行數(shù)據(jù)復(fù)制,主流存儲(chǔ)廠商大部分采用基于日志序列的連續(xù)復(fù)制。源端存儲(chǔ)會(huì)開辟一塊獨(dú)立的日志空間,在進(jìn)行IO時(shí)寫入一份記錄到日志空間中,按照順序?qū)⑺蠭O操作記錄下來形成日志流,然后不斷同步日志流至遠(yuǎn)端應(yīng)用更新。連續(xù)復(fù)制的弊端也顯而易見,倘若存儲(chǔ)同步鏈路中斷或者負(fù)載壓力持續(xù)走高,日志空間可能會(huì)被迅速填滿,必須借助其他手段緩解壓力,若故障長(zhǎng)時(shí)間持續(xù)下去,連續(xù)復(fù)制的效果會(huì)大打折扣甚至中斷。
至此,我們可以對(duì)基于存儲(chǔ)的雙活數(shù)據(jù)中心架構(gòu)進(jìn)行一個(gè)總結(jié):在雙活數(shù)據(jù)中心架構(gòu)里,存儲(chǔ)同步鏈路質(zhì)量很大程度上影響雙活的穩(wěn)定性與可靠性。對(duì)于高性能高可靠的雙活要求,存儲(chǔ)同步復(fù)制實(shí)現(xiàn)是不錯(cuò)的選擇,若項(xiàng)目預(yù)算有限或者雙活要求不高,則可以選擇存儲(chǔ)異步復(fù)制的方式。
我們討論了基于存儲(chǔ)的雙活數(shù)據(jù)中心架構(gòu)的存儲(chǔ)架構(gòu)形態(tài)、雙活機(jī)制、問題與挑戰(zhàn),但討論依舊淺薄,僅局限于存儲(chǔ)產(chǎn)品層面。存儲(chǔ)數(shù)據(jù)的RPO與RTO,和業(yè)務(wù)系統(tǒng)的RPO與RTO是一個(gè)概念嗎?NO!不談業(yè)務(wù)的雙活很大程度上就是耍流氓。在企業(yè)雙活數(shù)據(jù)中心架構(gòu)中,存儲(chǔ)端同步復(fù)制的RPO一定等于0嗎?現(xiàn)實(shí)往往與理想相悖,在同步復(fù)制的場(chǎng)景下通常會(huì)出現(xiàn)兩種可能性:業(yè)務(wù)系統(tǒng)能夠啟動(dòng)起來,RPO≈0;業(yè)務(wù)系統(tǒng)啟不起來,RPO=RTO=∞,可能永遠(yuǎn)都啟不起來。這就引申出了一個(gè)更有意思的話題,雙活數(shù)據(jù)中心架構(gòu)下應(yīng)用層雙活容災(zāi)如何聯(lián)動(dòng)數(shù)據(jù)中心存儲(chǔ),利用存儲(chǔ)的生態(tài)、發(fā)揮存儲(chǔ)雙活的優(yōu)勢(shì)去提升雙活的RPO、RTO等級(jí)呢?不妨讓我們等到應(yīng)用雙活架構(gòu)再來一探究竟。
鄧毓 江西農(nóng)信運(yùn)維技術(shù)經(jīng)理:
構(gòu)建既健壯又安全的存儲(chǔ)雙活解決方案,需同時(shí)具有靜態(tài)優(yōu)先級(jí)模式和仲裁服務(wù)器模式兩種故障仲裁機(jī)制,這樣才能覆蓋所有災(zāi)難場(chǎng)景,才是完整的雙活仲裁解決方案。
存儲(chǔ)雙活解決方案必須要具備足夠充分的高可用特性和合理的容災(zāi)保護(hù)與仲裁機(jī)制,以應(yīng)對(duì)各種各樣復(fù)雜的的災(zāi)難故障場(chǎng)景,以極短的故障恢復(fù)時(shí)間和幾乎為零的故障恢復(fù)目標(biāo),解決可能遇到的故障災(zāi)難。存儲(chǔ)雙活模式下,通常而言具有以下兩種故障仲裁機(jī)制:
1. 靜態(tài)優(yōu)先級(jí)模式:主要應(yīng)用在無(wú)第三方仲裁服務(wù)器的場(chǎng)景,在發(fā)生鏈路中斷腦裂現(xiàn)象時(shí),強(qiáng)制使優(yōu)先的存儲(chǔ)節(jié)點(diǎn)繼續(xù)提供服務(wù)。
2. 仲裁服務(wù)器模式:應(yīng)用在有第三方仲裁服務(wù)器的場(chǎng)景,將仲裁服務(wù)器部署于第三方站點(diǎn),在這種模式下,可同時(shí)設(shè)置靜態(tài)優(yōu)先模式,實(shí)現(xiàn)雙仲裁保護(hù)能力。
靜態(tài)優(yōu)先級(jí)模式:
如圖4所示為靜態(tài)優(yōu)先模式仲裁示意圖,列舉了三個(gè)故障場(chǎng)景和對(duì)應(yīng)的仲裁處理結(jié)果:
?
??
?
圖4 靜態(tài)優(yōu)先模式仲裁示意圖
1)當(dāng)兩個(gè)站點(diǎn)間鏈路出現(xiàn)故障時(shí),靜態(tài)優(yōu)先模式設(shè)置H1站點(diǎn)為靜態(tài)優(yōu)先站點(diǎn),此時(shí)H1站點(diǎn)將繼續(xù)對(duì)外提供讀寫服務(wù),H2站點(diǎn)將停止讀寫服務(wù),在主機(jī)端I/O訪問策略設(shè)置為優(yōu)選陣列模式時(shí),H1站點(diǎn)的主機(jī)將繼續(xù)本地讀寫H1站點(diǎn)存儲(chǔ),H2站點(diǎn)主機(jī)既無(wú)法讀寫H2站點(diǎn)存儲(chǔ)也無(wú)法通過切換跨站點(diǎn)鏈路訪問H1站點(diǎn)存儲(chǔ);
2)當(dāng)非靜態(tài)優(yōu)先的站點(diǎn)H2存儲(chǔ)出現(xiàn)故障時(shí),H1站點(diǎn)存儲(chǔ)同樣繼續(xù)提供讀寫服務(wù),但H2站點(diǎn)主機(jī)可通過配置的多路徑I/O策略,通過跨站點(diǎn)鏈路繼續(xù)讀寫H1站點(diǎn)存儲(chǔ);
3)當(dāng)靜態(tài)優(yōu)先的站點(diǎn)H1存儲(chǔ)出現(xiàn)故障時(shí),H1和H2站點(diǎn)均不再對(duì)外提供讀寫服務(wù),兩個(gè)站點(diǎn)主機(jī)的讀寫將完全中斷,此時(shí),只能通過人工的方式,將H2站點(diǎn)的存儲(chǔ)激活,繼續(xù)提供讀寫服務(wù)。
仲裁服務(wù)器模式(單故障場(chǎng)景):
如圖5所示,QS為仲裁服務(wù)器,S1為靜態(tài)優(yōu)先仲裁方。有以下幾種故障場(chǎng)景:
?
??
?
圖5 單故障場(chǎng)景處理示意圖
1)當(dāng)仲裁服務(wù)器本身出現(xiàn)故障時(shí),S1和S2存儲(chǔ)能夠持續(xù)對(duì)外提供讀寫服務(wù),主機(jī)業(yè)務(wù)無(wú)任何影響,此時(shí)由于缺少了仲裁服務(wù)器,將自動(dòng)進(jìn)入靜態(tài)優(yōu)先模式;
2)當(dāng)S1或S2存儲(chǔ)出現(xiàn)故障時(shí),仲裁服務(wù)器能夠及時(shí)探測(cè)到故障存儲(chǔ),停止故障存儲(chǔ)的讀寫,全部讀寫均由存活存儲(chǔ)提供,在主機(jī)端I/O訪問策略設(shè)置為優(yōu)選陣列模式時(shí),存活存儲(chǔ)所在站點(diǎn)的主機(jī)可以繼續(xù)本地讀寫存活存儲(chǔ),而遠(yuǎn)端主機(jī)則將自動(dòng)切換至跨站點(diǎn)I/O路徑繼續(xù)讀寫存活存儲(chǔ);
3)當(dāng)S1和S2存儲(chǔ)間的鏈路出現(xiàn)故障時(shí),等同于單站點(diǎn)存儲(chǔ)故障場(chǎng)景,均需要仲裁服務(wù)器進(jìn)行仲裁,判定某個(gè)站點(diǎn)存儲(chǔ)失效,全部讀寫服務(wù)由一個(gè)存儲(chǔ)提供,只有存活的存儲(chǔ)所在站點(diǎn)的主機(jī)能夠讀寫存活存儲(chǔ),而遠(yuǎn)端站點(diǎn)主機(jī)由于鏈路故障,無(wú)法通過跨站點(diǎn)I/O路徑繼續(xù)讀寫存活存儲(chǔ)。在該場(chǎng)景下,存活的存儲(chǔ)將通過劃分的額外空間來記錄鏈路故障期間,存儲(chǔ)間的數(shù)據(jù)差異,待鏈路恢復(fù)后,通過差異數(shù)據(jù)增量同步配置和數(shù)據(jù);
4)當(dāng)S1或S2存儲(chǔ)與仲裁服務(wù)器間的鏈路中斷時(shí),雙活存儲(chǔ)間鏈路正常,不做任何仲裁判斷,兩端主機(jī)正常讀寫雙活存儲(chǔ)。
仲裁服務(wù)器模式(雙故障場(chǎng)景):
如圖6所示,QS為仲裁服務(wù)器,S1為靜態(tài)優(yōu)先仲裁方。有以下幾種故障場(chǎng)景:
?
??
?
圖6 雙故障場(chǎng)景處理示意圖
1)當(dāng)S1存儲(chǔ)與仲裁服務(wù)器,S2存儲(chǔ)與仲裁服務(wù)器間的鏈路同時(shí)或者先后中斷時(shí),由于S1和S2間的鏈路完全正常,主機(jī)正常讀寫雙活存儲(chǔ),并且由于缺失了仲裁服務(wù)器響應(yīng),雙活存儲(chǔ)將自動(dòng)進(jìn)入靜態(tài)優(yōu)先模式;
2)當(dāng)S1和S2存儲(chǔ),其中單個(gè)存儲(chǔ)與仲裁服務(wù)器間的鏈路同時(shí)或者先后中斷時(shí),此時(shí)仲裁服務(wù)器將介入仲裁,判定與仲裁服務(wù)器通信正常的存儲(chǔ)存活,并對(duì)外提供讀寫服務(wù),且只有存活存儲(chǔ)所在站點(diǎn)的主機(jī)才能繼續(xù)訪問存活存儲(chǔ);
3)當(dāng)單個(gè)存儲(chǔ)出現(xiàn)故障,另一個(gè)存儲(chǔ)仲裁勝利后,存活存儲(chǔ)與仲裁服務(wù)器間的鏈路再出現(xiàn)故障時(shí),由于已經(jīng)仲裁完成,選舉了獲勝存儲(chǔ),只要不是該存活存儲(chǔ)故障,其他仲裁服務(wù)器故障和鏈路故障都不再影響獲勝站點(diǎn)主機(jī)的讀寫訪問;
4)當(dāng)仲裁服務(wù)器出現(xiàn)故障后,單個(gè)存儲(chǔ)也隨后出現(xiàn)故障。該場(chǎng)景下,仲裁服務(wù)器故障將使得仲裁模式進(jìn)入靜態(tài)優(yōu)先模式,由S1存儲(chǔ)繼續(xù)提供服務(wù),當(dāng)故障的存儲(chǔ)為非靜態(tài)優(yōu)先存儲(chǔ)時(shí),即S2存儲(chǔ)故障,此時(shí)S1存儲(chǔ)可繼續(xù)對(duì)外讀寫,S1和S2站點(diǎn)的主機(jī)均可通過多路徑訪問S1存儲(chǔ)。當(dāng)故障的存儲(chǔ)為靜態(tài)優(yōu)先存儲(chǔ)時(shí),即S1存儲(chǔ)故障,此時(shí)無(wú)法繼續(xù)仲裁,所有存儲(chǔ)讀寫訪問中斷;
5)當(dāng)仲裁服務(wù)器出現(xiàn)故障,存儲(chǔ)間的鏈路也也隨后中斷,此時(shí)由于仲裁服務(wù)器故障將進(jìn)入靜態(tài)優(yōu)先模式,存儲(chǔ)間鏈路中斷不會(huì)影響優(yōu)先站點(diǎn)存儲(chǔ)繼續(xù)提供讀寫服務(wù),但只有優(yōu)先站點(diǎn)的主機(jī)才能讀寫該存活存儲(chǔ)。
老谷 某股份制銀行系統(tǒng)架構(gòu)師:
構(gòu)建基于存儲(chǔ)的AA雙活架構(gòu),本人主張免網(wǎng)關(guān)的解決方案,提倡縱向上越精簡(jiǎn)越有效,切換減少一秒,雙活成功一倍!
存儲(chǔ)層雙活技術(shù)路線的對(duì)比選擇:
基于遠(yuǎn)程卷管理雙活技術(shù)架構(gòu)
典型的技術(shù)為AIX LVM、IBM GPFS、OracleASM。
?
?
??
?
以IBM GPFS為例(如圖7、圖8),原理如下:
GPFS SAN網(wǎng)絡(luò)模式架構(gòu)的跨站點(diǎn)雙活方案通過應(yīng)用負(fù)載均衡地把服務(wù)請(qǐng)求分發(fā)至SiteA和SiteB兩個(gè)站點(diǎn),兩個(gè)站點(diǎn)的所有節(jié)點(diǎn)均提供應(yīng)用服務(wù),SiteA節(jié)點(diǎn)的應(yīng)用在本地對(duì)GPFS文件系統(tǒng)讀寫,SiteB節(jié)點(diǎn)的應(yīng)用跨站點(diǎn)對(duì)GPFS文件系統(tǒng)讀寫。另外,SiteA節(jié)點(diǎn)既作為GPFS Servers,同時(shí)又擔(dān)任Application Node,而SiteB節(jié)點(diǎn)既可按照容災(zāi)方案的第一種方式作為GPFS客戶端,又可按照容災(zāi)方案的第二種方式作為GPFS的服務(wù)端。簡(jiǎn)單總結(jié)這種方式來說,兩個(gè)站點(diǎn)的節(jié)點(diǎn)GPFS I/O讀寫路徑和性能存在些許差異。
將SiteA的NSD Server與Application Node分置于不同節(jié)點(diǎn),SiteA和SiteB節(jié)點(diǎn)全部作為GPFS客戶端,兩個(gè)站點(diǎn)的節(jié)點(diǎn)GPFS I/O讀寫路徑和性能一致。
上述兩種雙活方案均是建立在容災(zāi)方案的基礎(chǔ)之上,SiteA和SiteB的所有節(jié)點(diǎn)均加入一個(gè)GPFS集群中,利用存儲(chǔ)到存儲(chǔ)的同步復(fù)制功能,SiteA的TiebreakerDisk仲裁,需要自動(dòng)探測(cè)與自動(dòng)切換腳本。
通過操作系統(tǒng)內(nèi)的 GPFS 文件系統(tǒng)實(shí)現(xiàn),最大程度不改變傳統(tǒng)的物理拓?fù)洌黾诱w方案的安全性、可用性;
在操作系統(tǒng)層次,通過 GPFS 文件系統(tǒng)的failure group 功能模塊將生產(chǎn)、災(zāi)備兩個(gè)中心的兩臺(tái)存儲(chǔ)虛擬為一臺(tái)存儲(chǔ)使用。
通過軟件雙活方案,雙活實(shí)現(xiàn)需要依靠主機(jī)實(shí)現(xiàn),會(huì)造成服務(wù)器額外性能開銷,對(duì)于操作系統(tǒng),應(yīng)用程序版本敏感,版本升級(jí)操作復(fù)雜,性能調(diào)優(yōu)復(fù)雜,需對(duì)集群中所有計(jì)算和存儲(chǔ)節(jié)點(diǎn)性能調(diào)優(yōu)。
基于存儲(chǔ)網(wǎng)關(guān)
以EMC VPLEX為例(如圖9),原理如下:
?
??
?
圖9 EMC VPLEX 雙活架構(gòu)
EMC Vplex存儲(chǔ)雙活方案是基于Vplex網(wǎng)關(guān)產(chǎn)品實(shí)現(xiàn),能夠?qū)MC和其他廠商存儲(chǔ)異構(gòu)整合,虛擬化為統(tǒng)一的存儲(chǔ)資源池,實(shí)現(xiàn)異構(gòu)存儲(chǔ)雙活。Vplex雙活方案由兩個(gè)站點(diǎn)的兩套Vplex集群系統(tǒng)組成,每個(gè)站點(diǎn)的Vplex集群都有自己專屬的本地存儲(chǔ)陣列,通過創(chuàng)建分布式鏡像卷為跨集群的鏡像卷,提供Vplex Access Anywhere功能,兩個(gè)站點(diǎn)的Vplex集群各有一個(gè)卷,兩個(gè)卷的ID一樣。
主機(jī)與Vplex集群間訪問、Vplex集群與后端存儲(chǔ)數(shù)據(jù)傳輸、Vplex集群間通信網(wǎng)絡(luò)全部隔離,為保證最高級(jí)別的高可用性,每個(gè)Vplex Director前端I/O模塊、主機(jī)和SAN光纖交換機(jī)之間多通過冗余的物理連接,實(shí)現(xiàn)多條路徑交叉訪問。當(dāng)主機(jī)與本地Vplex集群連接中斷時(shí),為保證主機(jī)能夠跨站點(diǎn)訪問另一端Vplex集群,主機(jī)需要和其他站點(diǎn)的Vplex集群建立連接,可通過PowerPath多路軟件來配置ACTIVE/PASSIVE路徑來保證主機(jī)優(yōu)先訪問本地的Vplex集群。后端存儲(chǔ)陣列通過SAN交換機(jī)或者直接連接Vplex引擎的后端IO模塊,不需要配置到其他Vplex集群的跨站點(diǎn)連接路徑;根據(jù)需要選用Witness作仲裁,Witness需部署于兩個(gè)Vplex集群不同的故障域中(第三方站點(diǎn))。
增加網(wǎng)關(guān)設(shè)備,成本提高,主機(jī)與存儲(chǔ)的交互通過網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)。增加了IO鏈路長(zhǎng)度和復(fù)雜度,引入了額外的延時(shí)。
Vplex作為網(wǎng)關(guān)設(shè)備,帶讀緩存,可以把經(jīng)常訪問的數(shù)據(jù)從存儲(chǔ)的cache里讀到vplex的cache里,這樣能降低讀響應(yīng)時(shí)間,提升讀的性能。
網(wǎng)關(guān)設(shè)備的能力約束存儲(chǔ)設(shè)備自身性能潛力發(fā)揮,同時(shí)增加硬件故障風(fēng)險(xiǎn)。
通過網(wǎng)關(guān)方案橫向擴(kuò)展能力強(qiáng),可實(shí)現(xiàn)異構(gòu)存儲(chǔ)的統(tǒng)一管理。
基于存儲(chǔ)卷鏡像
以華為存儲(chǔ)為例(如圖10),原理如下:
?
??
?
圖10 華為雙活存儲(chǔ)架構(gòu)
采用存儲(chǔ)磁盤設(shè)備的卷鏡像技術(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í)一致。其中任何一個(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ù)。
HyperMetro雙活架構(gòu)無(wú)需額外部署虛擬化網(wǎng)關(guān)設(shè)備,直接使用兩套存儲(chǔ)陣列組成集群系統(tǒng)。通過UltraPath主機(jī)多路徑軟件,將兩臺(tái)存儲(chǔ)陣列上的雙活成員LUN聚合為一個(gè)雙活LUN,以多路徑vdisk方式對(duì)應(yīng)用程序提供I/O讀寫能力。應(yīng)用程序訪問vdisk時(shí),Ultrapath根據(jù)選路模式,選擇最佳的訪問路徑,將I/O請(qǐng)求下發(fā)到存儲(chǔ)陣列。
不同存儲(chǔ)雙活路線的優(yōu)劣勢(shì)對(duì)比如表2。
表2 存儲(chǔ)層雙活技術(shù)路線對(duì)比分析
?
??
?
結(jié)論:AA存儲(chǔ)雙活,免網(wǎng)關(guān)設(shè)計(jì),省掉網(wǎng)關(guān)引入的延時(shí);可通過雙寫優(yōu)化,站點(diǎn)間交互次數(shù)只有傳統(tǒng)的一半,傳輸時(shí)延時(shí)縮短一倍;通過數(shù)據(jù)零拷貝,減少數(shù)據(jù)初始同步時(shí)間,降低同步鏈路帶寬占用,最終保障雙活流量的順暢,提高業(yè)務(wù)連續(xù)性目標(biāo)。
評(píng)論
查看更多