從兩地三中心到雙活數(shù)據(jù)中心
兩地三中心
兩地三中心的有幾種實(shí)現(xiàn)形式迎卤,下圖是一種典型案例约急。
在這一案例中,正常情況下叙凡,業(yè)務(wù)運(yùn)行在主機(jī)房的設(shè)備之上。主存儲(chǔ)與輔存儲(chǔ)存在單向同步關(guān)系密末,即主儲(chǔ)存的所有數(shù)據(jù)變更都會(huì)實(shí)時(shí)同步復(fù)制①到次存儲(chǔ)上握爷,從而保證兩個(gè)存儲(chǔ)數(shù)據(jù)完全一致。同時(shí)严里,為防止極端災(zāi)害發(fā)生新啼,主存儲(chǔ)的數(shù)據(jù)變更也會(huì)通過異步復(fù)制②的方式同步到遠(yuǎn)程容災(zāi)機(jī)房的存儲(chǔ)設(shè)備上。
當(dāng)主中心因?yàn)楦鞣N原因中斷服務(wù)時(shí)刹碾,可以通過手工命令或者軟件自動(dòng)切換的方式讓業(yè)務(wù)切換到輔機(jī)房燥撞。同時(shí)建立次存儲(chǔ)到榮災(zāi)機(jī)房存儲(chǔ)的異步復(fù)制關(guān)系,保護(hù)數(shù)據(jù)迷帜。
如果極端情況發(fā)生物舒,輔機(jī)房也不能運(yùn)行業(yè)務(wù),那么遠(yuǎn)程容災(zāi)機(jī)房還有一份數(shù)據(jù)保存戏锹,可以用它恢復(fù)業(yè)務(wù)冠胯。
注意:上圖只是一種兩地三中心的實(shí)現(xiàn)方式,還有好幾種其它方式景用,比如:
⑴遠(yuǎn)程容災(zāi)中心也配置服務(wù)器涵叮,當(dāng)災(zāi)害發(fā)生時(shí)容災(zāi)中心可以運(yùn)行業(yè)務(wù)惭蹂;
⑵3個(gè)存儲(chǔ)的拓?fù)浞绞讲煌5腔驹聿顒e不大割粮,在此就不做贅述盾碗。
兩地三中心的優(yōu)點(diǎn)是防范了各種危害磁盤陣列硬件數(shù)據(jù)的風(fēng)險(xiǎn)(不包括軟件或者人工誤刪除數(shù)據(jù)操作),缺點(diǎn)是成本巨高舀瓢,且設(shè)備使用效率低廷雅,特別是輔機(jī)房設(shè)備不能在業(yè)務(wù)正常運(yùn)行時(shí)使用,浪費(fèi)很大京髓。為此航缀,存儲(chǔ)設(shè)備廠商改進(jìn)了設(shè)計(jì),讓次存儲(chǔ)和冗災(zāi)存儲(chǔ)變成可讀不可寫狀態(tài)堰怨,從而讓部分業(yè)務(wù)如BI等運(yùn)行在輔機(jī)房和冗災(zāi)機(jī)房芥玉,分擔(dān)了主機(jī)房設(shè)備的負(fù)載。
但是這種做法不夠純粹备图,實(shí)施需要主機(jī)應(yīng)用軟件配合灿巧。而且主輻機(jī)房切換需要業(yè)務(wù)中斷數(shù)分鐘到數(shù)小時(shí)的時(shí)間,前端業(yè)務(wù)感知不好揽涮。
于是存儲(chǔ)設(shè)備廠商又發(fā)展了雙活數(shù)據(jù)中心技術(shù)來改進(jìn)這個(gè)缺點(diǎn)抠藕。
①同步復(fù)制可以保證數(shù)據(jù)完全一致,但是對數(shù)據(jù)傳輸帶寬和時(shí)延要求都很高蒋困,成本昂貴盾似,適用用于近程。
②異步復(fù)制不保證數(shù)據(jù)完全一致雪标,存在數(shù)據(jù)丟失的情況零院,但是對數(shù)據(jù)傳輸帶寬和時(shí)延要求較低,適用于遠(yuǎn)程汰聋。
雙活數(shù)據(jù)中心
下面我們以HP XP7磁盤陣列與ORACLE RAC配合為例门粪,展示這個(gè)技術(shù)方案。
這個(gè)方案里烹困,主輔機(jī)房里面的主機(jī)可以同時(shí)訪問主輔機(jī)房的存儲(chǔ),這樣兩個(gè)機(jī)房的主機(jī)和存儲(chǔ)與ORACLE RAC技術(shù)配合乾吻,共同為業(yè)務(wù)提供服務(wù)髓梅。
那么兩個(gè)存儲(chǔ)的數(shù)據(jù)一致性又如何保證呢?XP7技術(shù)方案的核心在于:兩個(gè)存儲(chǔ)配合绎签,虛擬出一個(gè)磁盤陣列(類似于主機(jī)集群軟件的浮動(dòng)軟件包技術(shù))枯饿,主機(jī)向虛擬磁盤陣列發(fā)出IO請求,主存儲(chǔ)和輔存儲(chǔ)合作诡必,共同完成主機(jī)對虛擬磁盤陣列的IO請求奢方。主輔存儲(chǔ)數(shù)據(jù)雙向同步搔扁,通過陣列內(nèi)部機(jī)制保證數(shù)據(jù)一致性。
當(dāng)主輔存儲(chǔ)任一出現(xiàn)問題時(shí)蟋字,幸存的陣列會(huì)繼續(xù)支持虛擬陣列服務(wù)稿蹲,主機(jī)感受不到虛擬陣列的后臺(tái)狀態(tài)變化。再配合oracle RAC提供的數(shù)據(jù)庫集群功能鹊奖,可以實(shí)現(xiàn)應(yīng)用無中斷運(yùn)行苛聘,前端基本無故障感知。
這個(gè)方案的優(yōu)點(diǎn)在于兩個(gè)機(jī)房的主機(jī)都只看到一個(gè)虛擬磁盤陣列忠聚,兩臺(tái)存儲(chǔ)的內(nèi)部同步機(jī)制完全對主機(jī)透明设哗,主機(jī)應(yīng)用配置簡單。
由于主輔存儲(chǔ)有一定的物理距離两蟀,如果數(shù)據(jù)同步鏈路故障网梢,比方說國內(nèi)常見的修路挖斷光纖的狀況,就會(huì)出現(xiàn)“腦裂”的情況赂毯,這時(shí)候澎粟,仲裁磁盤起作用的時(shí)候到了。
仲裁盤是獨(dú)立于主輔存儲(chǔ)的第三個(gè)磁盤設(shè)備(不建議用容災(zāi)機(jī)房的存儲(chǔ))欢瞪,通過FC鏈路與主輔存儲(chǔ)連接活烙。當(dāng)主輔存儲(chǔ)的數(shù)據(jù)鏈路出現(xiàn)異常時(shí),主輔存儲(chǔ)會(huì)通過仲裁盤決定哪一個(gè)存儲(chǔ)繼續(xù)提供服務(wù)遣鼓,不提供服務(wù)額存儲(chǔ)會(huì)進(jìn)入鎖定狀態(tài)啸盏,一直等到數(shù)據(jù)鏈路恢復(fù),兩個(gè)陣列數(shù)據(jù)同步完成之后再恢復(fù)正常骑祟。
那么回懦,如果仲裁盤失效時(shí),會(huì)出現(xiàn)什么情況呢次企?很簡單怯晕,兩個(gè)存儲(chǔ)都鎖定,不提供服務(wù)缸棵。畢竟數(shù)據(jù)的完整性是最重要的舟茶。
圖中的仲裁服務(wù)器又是做什么的呢?顧名思義堵第,它是一臺(tái)服務(wù)器或者虛擬機(jī)吧凉,上面運(yùn)行專用程序?yàn)橹鬏o存儲(chǔ)提供基于IP協(xié)議的仲裁服務(wù)。
對于HP XP7或者HDS G系列陣列而言踏志,是不需要圖2中的仲裁服務(wù)器的阀捅。但是,有些設(shè)備廠商基于各方面考慮针余,不使用磁盤仲裁饲鄙,而是仲裁服務(wù)器凄诞,比如EMC Vplex或者netapp。
此外忍级,有些廠商的方案沒有使用虛擬存儲(chǔ)的技術(shù)帆谍,而是把兩臺(tái)物理存儲(chǔ)暴露給主機(jī),然后在陣列上通過其它辦法實(shí)現(xiàn)兩個(gè)陣列的數(shù)據(jù)同步颤练。這種辦法我有一些疑問既忆,希望以后能得到高人指點(diǎn)
還有,市場上不僅有基于存儲(chǔ)實(shí)現(xiàn)的雙活嗦玖,還有基于主機(jī)軟件實(shí)現(xiàn)的雙活患雇,如果做得好,都是可以滿足需求的宇挫。但是有一點(diǎn)需要特別注意:就是“腦裂”狀況的處理苛吱,我認(rèn)為:沒有第三方仲裁設(shè)備的雙活方案都是不夠強(qiáng)壯的,可能難以應(yīng)付現(xiàn)實(shí)環(huán)境下的復(fù)雜狀況器瘪。
除了“腦裂”翠储,方案設(shè)計(jì)者還要考慮“鎖競爭”問題:當(dāng)主輔機(jī)房鏈路中斷后,存儲(chǔ)有仲裁機(jī)制橡疼,oracle RAC也有自己的仲裁機(jī)制援所,如果出現(xiàn)RAC鎖機(jī)制判定主機(jī)房設(shè)備繼續(xù)提供服務(wù),存儲(chǔ)卻判定輔機(jī)房存儲(chǔ)繼續(xù)提供服務(wù)情況欣除,就會(huì)導(dǎo)致“雙活”變成“雙死”住拭。
這種情況對于某些應(yīng)用軟件或者非磁盤仲裁的存儲(chǔ)設(shè)備可能是一個(gè)需要費(fèi)一番周折才能解決的問題,但是對于本例中的XP7+RAC历帚,我們是可以通過如下配置來避免這種情況的發(fā)生:
因?yàn)镽AC的仲裁機(jī)制使用的是磁盤滔岳,我們只需把仲裁盤配置在虛擬的磁盤陣列上就可以避免“鎖競爭“的情況發(fā)生。因?yàn)镽AC仲裁盤在虛擬陣列上挽牢,主或輔存儲(chǔ)任意一個(gè)被鎖定谱煤,它對應(yīng)機(jī)房的主機(jī)也就不可能訪問得了虛擬陣列上的鎖盤,自然不可能得到仲裁盤的認(rèn)可禽拔,也就不能繼續(xù)運(yùn)行了刘离。
注:本文最早由我與2016.05.02發(fā)表于51cto博客