3par不支持嚴(yán)格意義的存儲(chǔ)雙活,但是它的PeerPersistence功能在存儲(chǔ)雙數(shù)據(jù)中心的配置中,非常有意思。在此我們以RAC應(yīng)用為例對(duì)其做一個(gè)分析兴枯。
先上一張架構(gòu)圖,看明白這個(gè)架構(gòu)是怎么回事矩欠。
這個(gè)架構(gòu)里面有兩個(gè)模塊:一個(gè)是上面的服務(wù)器+ORACLE RAC構(gòu)成的,由RAC向外提供服務(wù)悠夯,并管理服務(wù)器集群應(yīng)對(duì)可能的物理設(shè)備故障癌淮,還實(shí)現(xiàn)了負(fù)載均衡分配;另一個(gè)是由3par存儲(chǔ)和SAN網(wǎng)絡(luò)交換機(jī)以及運(yùn)行在虛擬機(jī)之上的仲裁服務(wù)器構(gòu)成沦补,存儲(chǔ)空間通過peer persistence展現(xiàn)給服務(wù)器和RAC軟件乳蓄。
如果看過我之前的文章,會(huì)有一個(gè)感覺:它和HP XP7的雙活方案很像耶夕膀!XP7的虛擬磁盤陣列是存儲(chǔ)到主機(jī)的中間層虚倒,3par Peer Persistence也是中間層美侦,而且都有仲裁機(jī)制。為什么它不是雙活呢魂奥?
這就要談到3par Peer Persistence與HP XP7對(duì)主機(jī)IO路由的分配了:
lXP7的虛擬磁盤陣列中的會(huì)把接收到的IO根據(jù)一定的(比如本地存儲(chǔ)優(yōu)先)把IO發(fā)送到兩個(gè)磁盤陣列中去菠剩。一個(gè)LUN在兩個(gè)磁盤陣列的鏡像可以同時(shí)處理主機(jī)發(fā)來的IO,沒有主從的區(qū)別耻煤。XP7實(shí)際是LUN在兩個(gè)陣列上的鏡像都可以處理主機(jī)IO具壮,但是它們的WWN是一樣的,那么主機(jī)是如何知道哪個(gè)LUN在本地的呢哈蝇?
l3par Peer Persistence設(shè)置的LUN存儲(chǔ)有主從區(qū)別棺妓,主機(jī)來的IO都會(huì)先到主存儲(chǔ),再由主存儲(chǔ)同步到從存儲(chǔ)炮赦。對(duì)于主機(jī)怜跑,存儲(chǔ)路徑的管理和切換,通過ALUA協(xié)議來實(shí)現(xiàn)吠勘。
下面這張圖顯示了兩者在IO路徑上的不同性芬,對(duì)于3par,兩條黃色I(xiàn)O路徑在正常狀態(tài)下是非激活狀態(tài)的看幼,沒有IO流過批旺;對(duì)于XP7則不然,兩條黃色路徑處于激活狀態(tài)诵姜,分擔(dān)部分綠色路徑上的IO汽煮。
3par的peer persistence沒有了黃色路徑,又是如何管理陣列的呢棚唆?它通過ALUA(AsymmetricLogical Unit Access異步邏輯單元訪問)協(xié)議暇赤,把主陣列設(shè)置為主動(dòng)/優(yōu)化(active/optimized)狀態(tài),把從陣列設(shè)置為主動(dòng)/非優(yōu)化(active/unoptimized)狀態(tài)宵凌。這樣主機(jī)自然把IO都發(fā)送到主陣列上去了鞋囊。當(dāng)主陣列出現(xiàn)故障時(shí),peerpersistence又會(huì)反過來把從陣列設(shè)置為主動(dòng)/優(yōu)化(active/optimized)狀態(tài)瞎惫,把主陣列設(shè)置為主動(dòng)/非優(yōu)化(active/unoptimized)狀態(tài)溜腐。圖示如下:
至此,是否可以說XP7的雙活是否一定優(yōu)于3par的peer persistence呢瓜喇?表面上看是的挺益,原因如下:
1.由于兩個(gè)陣列同時(shí)處于激活狀態(tài),切換會(huì)很快乘寒,理論上主機(jī)和RAC軟件無感知望众。
2.在XP7的雙活情況下,兩個(gè)陣列同時(shí)處理主機(jī)IO,均衡負(fù)載烂翰。
現(xiàn)在夯缺,我們對(duì)兩種情況分別作更深入的分析:
1.存儲(chǔ)切換速度問題,需要分兩種情況討論
l正常情況下的手工切換:兩者雙活切換速度都非掣使ⅲ快踊兜,業(yè)務(wù)應(yīng)用軟件不會(huì)有感知。
l非正常情況下的自動(dòng)切換:我們?cè)?par拷貝大文件的時(shí)候做過暴力測(cè)試棵里,在使用了遠(yuǎn)端仲裁服務(wù)器仲裁的情況下润文,拷貝操作暫停了2~5秒的時(shí)間,然后繼續(xù)進(jìn)行殿怜,操作沒有中斷典蝌。這個(gè)延時(shí)是由仲裁服務(wù)器需要對(duì)兩個(gè)存儲(chǔ)狀態(tài)進(jìn)行判定必須的代價(jià)。所有仲裁服務(wù)器為了防止誤判头谜,都會(huì)需要一段時(shí)間延時(shí)來判定存儲(chǔ)狀態(tài)骏掀。XP雙活也不例外。
2.兩個(gè)陣列同時(shí)處理主機(jī)IO柱告,均衡負(fù)載問題:
l雖然兩個(gè)陣列可以同時(shí)處理主機(jī)IO截驮,但是為了保持?jǐn)?shù)據(jù)一致,這些IO中的寫操作必須同步到另外一個(gè)陣列上际度。也就是說下圖中的第2和第3步驟無法節(jié)省葵袭。只有第1和第4步驟節(jié)省了傳輸時(shí)間。但是乖菱,雙活因?yàn)閺?fù)雜的鎖機(jī)制帶來了陣列內(nèi)部軟件處理時(shí)延坡锡。這個(gè)時(shí)延是否能夠抵消第1和第4步驟的傳輸時(shí)間節(jié)省,值得商榷窒所。還有一點(diǎn)需要特別注意的是:隨著系統(tǒng)負(fù)荷增長鹉勒,IO流量越大,處理時(shí)延越長吵取。
l一般而言禽额,一個(gè)陣列上往往存有多個(gè)應(yīng)用的數(shù)據(jù),把這些應(yīng)用數(shù)據(jù)分組皮官,分別設(shè)置不同主存儲(chǔ)可以達(dá)到手工負(fù)載均衡的效果脯倒。但是要注意:一個(gè)應(yīng)用的數(shù)據(jù)必須設(shè)置到一個(gè)組里面,不可以通過分組設(shè)置不同的主存儲(chǔ)捺氢。