但是現在高端都引入了SATA磁盤,現在的西瓜,不對,是硬盤越來越大,因此,當一塊硬盤壞了,只有這幾塊硬盤參與重構,重構的時間1TB需要10小時,如果是4TB的SATA盤,更加不可想象。

除了重構時間外,RAID 1.0還有一個大問題,就是性能。一個LUN的讀寫只能在一個磁盤組進行,讓后面加入的SSD等新的介質發揮不了作用。但EMC/IBM/HDS在RAID 1.0已經積累了十幾二十年,RAID又是所有軟件的基礎,他們輕易不敢重寫代碼。怎么辦?

有了,可以把多個RAID組再組成一個池,再切一次(條帶化):

選幾個硬盤—》做成RAID 5—》選多個RAID 5組成一個池—》切分為相等的小塊Extend—》選擇Extend組成LUN,映射給主機(為了方便,我們稱這個為RAID 1.5吧)

RAID 1.5很好地解決了性能的問題,因為一個LUN的讀寫同時跨越了很多的硬盤,而且這個LUN里面可以包含多個RAID組,也就可以有多種磁盤介質,可以做到自動分層存儲。但是,由于RAID組還是基于硬盤的,這塊硬盤壞了,只有一個RAID組的幾個硬盤參與重構,因此重構速度依然和RAID 1.0一樣。

3PAR和華為,歷史包袱不大,因此采用塊的虛擬化技術RAID 2.0來解決這個問題(3PAR內部叫FAST RAID)。RAID 2.0的思路就是,在做RAID前先切幾刀,把西瓜(別打了,玩游戲玩多了不行嗎),哦,是硬盤切成很多的相等大塊(Chuck),然后以Chunk為單位來做RAID 5(形成CKG),然后再把CKG切成更小的小塊(Extent),隨機或者按照一定規則抽取很多的Extend組成LUN,映射給主機。

選所有個硬盤—》全部切成做大塊Chuck—》以Chuck為單位做成RAID 5(CKG)—》把CKG切分為相等的小塊Extend—》選擇Extend組成LUN,映射給主機(這個就是RAID 2.0)

RAID 2.0由于RIAD的單位是大塊Chunk,因此當一個硬盤故障,和這個硬盤相關的MINI RAID組(CKG)牽涉的硬盤都參與重組,同樣的數據量,干活的人多了,肯定就快了。

這就是RAID 2.0的本質。

一句話,如果基于硬盤來做RAID,就是RAID 1.0,如果基于硬盤的大塊Chunk來做RAID,就是RAID 2.0。

至于IBM XIV,他不做RAID,把所有硬盤全部切為1MB大小,利用偽隨機算法在不同的節點間保留2個拷貝(有點像RAID 10),因此硬盤故障恢復時間和性能和RAID 2.0是一樣的,只是容量利用率最多只有50%,因此我們就稱為"RAID 2.0-"把。至于華為為什么叫"RAID 2.0+",據說是基于RAID 2.0上有很多增值的功能,也不知道我的解釋是否正確。當然,華為的RAID 2.0比3PAR的切的硬盤大塊Chunk更小,因此靈活性和隨機分布性更好些。

不知道我這么一說,大家了解Raid 2.0沒有,了解了就轉發給其他需要了解的人吧。

化腐朽為神奇,千言萬語道不盡RAID 2.0

繼續分享RAID 2.0細節的東西

塊虛擬化和和LUN虛擬化:這兩個術語大家可能聽說過,一般來說,塊虛擬化就是指RAID 2.0這樣的技術,而LUN虛擬化就是指昨天我們說的傳統廠商的RAID 1.5改良技術;

和上層應用的相關性:RAID技術其實和目前流行的自動分層存儲和自動精簡配置關系最大。我們來看一下HW HVS的RAID 2.0實現:

這是華為HVS實現的RAID 2.0全景圖。大家發現沒有,比我們昨天說的RAID 2.0又多切了一刀Grain(谷粒),這個我們不妨叫為微刀Grain。經過我對比分析總結,我發現RAID 2.0是硬盤拿到后,先用大刀切成CHUNK,HW HVS是64M,而3PAR 10000是1G,這個CHUNK就是構成RAID的基礎;第二步就是用小刀切成小塊EXTEND,HW HVS最小可以做到256K,而3PAR 10000只能做到128M,這個EXTEND是分層存儲檢測和遷移的單位;最后要切一刀就是用匕首切成Grain(谷粒一樣細),HW HVS最小可以做到8K,而3PAR 10000是16K,這個是精簡配置分配的單位。當然,不是每個LUN都需要做自動精簡配置,因此如果是THICK LUN,也有叫FAT LUN,這一刀就不用挨了。從這個分析大家就可以看出,RAID 2.0確實是軟件功能基礎的基礎,有了這個基礎,上面的各種軟件功能才能更加高效和快速。類似EMC/IBM/HDS在傳統RAID基礎上改進的RAID 1.5,雖然能夠實現類似的功能,但在資源的利用率和效率、靈活性等等就差很多。有些功能就不能在THIN LUN上面做或者只能在THIN LUN上面做,THIN的時候必須預留空間,不能像RAID 2.0一樣按需實時分配。

華為HVS對3PAR 10000的改進:這兩天很多人問這個問題,我也說一下我的理解。華為居然敢叫RAID 2.0+,這個”+“可不是白加上去的。

首先是更細的粒度。上面的分析大家也看到了,華為的3刀切的粒度都比3PAR的小。CHUNK粒度小的好處是重構的數據量比較少,因為分配數據的時候可以知道那個CHUNK沒有數據,不用重構,粒度小總數據量就少,比如只有64M數據的時候,華為只需要重構一個64M的CHUNK,但3PAR需要重構一個1G的CHUNK,數據差別還是比較大的。EXTEND粒度小在做熱點數據監測和遷移的時候更加準確和高效,EXTEND過大可能把冷數據也遷移到SSD了,浪費容量。GRAIN粒度過大和過小都不合適,要和應用匹配效率最高。但大家知道ORACLE常用8K作為I/O單位,因此HW針對ORACLE這種場景應該比3PAR有更好的THIN效率和性能;

第二是華為的塊標簽技術,這個好像3PAR沒有。華為RAID 2.0能夠把盤切為片后,再把每個片打上一個標簽(TAG),標簽標明此片的容量、性能、成本等QoS屬性,據此也就自然而然地使得HVS具備了面向不同業務、不同主機、不同應用提供不同SLA響應等級的能力。這才是RAID 2.0+中”+“的含義,這也是昨天HW的一位高人微信回復我才知道的。

從我的分享大家可能發現,RIAD 2.0還是很神奇的,特別是RAID 2.0+,學起來真是一個頭八個大。希望我這兩個的分享讓你成為RAID 2.0高手。但我昨天總結的一句話還是對的:針對物理磁盤做RAID就是傳統的RAID 1.0,針對硬盤切片CHUNK做RAID就是RAID 2.0。

覺得我寫到不錯就分享給其他人吧,讓大家一塊成為RAID 2.0高手。

總的來說,大家都認可區分RAID 2.0和RAID 1.0的區別,也就是說,基于硬盤切片CHUNK來創建RAID,這個就是RAID 2.0;基于物理硬盤來創建RAID組,這個就是傳統的RAID。這個區別可能不是根本的,但可以幫助大家理解和辨別。

還有很多人混淆CHUNK,Extent,Grain的關系,不知道后面再切幾刀有啥用。我分析3PAR和HW的實現,這里再給大家解釋一下。

CHUNK是創建RAID的單位,它的主要作用就是用來創建RAID組(CKG)。CKG是有屬性的,可以是RAID 5,RAID 1,RAID 6啦。我查閱各種文檔,3PAR高端的CHUNK(它叫CHUNKLET)粒度是1GB,而中端的粒度是256MB(今天微信公眾號“高端存儲知識”的訂閱量也是這個數,哈)。而HW HVS是64MB。3PAR沒有看到說可以用戶可以調整這個數值,HW的我不清楚。按照我的理解,這個CHUNK和應用關系不大,一般都無需調整(估計廠商要調整也是底層命令行來做,用戶應該輕易不會去調整這個值的),就像切瓜器,每臺陣列選好了一個切瓜器,規格就定下來了,所有的西瓜,哦不對是硬盤都切成一樣的大小。當然,CHUNK也是硬盤失效重構的最小單位。

至于Extent,這個一個可變的值。也就是用戶要在上面創建LUN,映射給某個主機。主機不同的應用可能有不同的要求,如ORACLE,這個塊可以小些,如對視頻數據,這個塊可以大些。我們以后說的分層存儲都是基于這個粒度,系統會檢查每個Extent的I/O情況,然后把熱數據遷移到SSD上,提升性能。

而Grain,這就不是必須的。如果這個LUN是Thin LUN,這一刀一般就是要挨的。挨著一刀就是和應用每次I/O平均分配的數據量有關,如果匹配,那么分配的效率是最高的。我詳細分析了3PAR的文檔,它系統后端設計的每個I/O是16K,因此,它理論上最小只能到16K了。

總結一下切西瓜刀法:切瓜器是隨高端陣列贈送的,因此規格就固定了。但用戶自己要想吃西瓜,估計還得拿把西瓜刀再切分成Extent,男同胞嘴大,喜歡切大塊吃,向我這樣的櫻桃小口(喂,又別扔臭雞蛋,再扔,我一口一個臭雞蛋….),我喜歡切小一些。如果家有BB,比較瘦?。╰hin),那么還需要用匕首再切成顆粒狀Grain,用牙簽去喂他。當然,不同的BB要求而已不同。

哎,不說了,口水都流了一地了。我們再來回答大家的幾個問題:

CHUNKExtentGrain的粒度越小越好嗎?這個有技術門檻嗎?

答:不是的。前面的分析也可以看到,后面兩刀的粒度和應用密切相關,也是用戶創建LUN的時候可以選擇調整的,而CHUNK主要和RAID的管理和重構有關聯,小的好處我昨天也提了。但我想事務總是有兩面性的,太小,管理的開銷必然大,我個人設想3PAR把高端的CHUNK定義得比中端大,就是由于高端要支持的硬盤更多,但3PAR目前高端的CPU還是老一代的CPU,中端的CPU已經更新了。還有就是3PAR的內存比HW HVS要少。這是我的猜想。這些粒度都沒有太多的技術門檻,應該是每個廠商根據自己的硬件資源和軟件的算法選擇的一個最優值而已;

華為HVS真的比3PAR好?3PAR真的不支持每個塊打標簽嗎?

答:這個昨天我收到最多雞蛋的地方,大家都說我有傾向。老實說,我也不知道3PAR是否支持塊打標簽,但3PAR有元數據,也會記錄這些塊的屬性,這是必須的,因為后面你要做RAID,要做分層,你必須知道這些塊是SSD,還是SATA,在那個框里等等。只是HW做網絡出身的,而且是后做的,是否把MPLS那套思路拿來,標簽的屬性更加豐富,說不定還可以嵌套,哈哈??偟膩碚f,光從RAID 2.0的對比看,HW HVS畢竟是后來者,因此在粒度方面做得更靈活(至于實際的用處有多大,就是仁者見仁智者見智的事情了),而3PAR的優勢應該在ASIC上,它的RAID用ASIC做的,理論上速度會更快(因此也叫Fast RAID),3PAR曾經和ORACLE以前做過一個測試,它的FAST RAID 5的性能可以做到基本和RAID 10持平(91%),3PAR經常用來告訴用戶,用RAID 5就可以了,性能差不多,還省空間。但HW HVS雖然沒有ASIC做RAID加速,但畢竟是后發布的產品,可以利用更新的平臺和更快的CPU,因此整體上性能如何我暫時沒有拿到對比結果。至于應用層的功能差別,以后我們再談。

HVS到底是啥縮寫?

有知情人士告訴我,HVS縮寫是hyper virtual storage,不再是榮耀。很抱歉,百度上搜索hyper virtual storage,看不到和HVS相關的結果。再次說明華為的宣傳是不夠的。還有RAID 2.0+這個名字,感覺有點俗氣,主要是搜索不好搜,這個小數點和+號一般都被搜索引擎過濾掉了,反正相關的文章也不多,如果叫UltraRAID,這種專業名稱就比較容易宣傳了。

RAID 2.0提升了性能和效率,可靠性如何?重構速度真的比傳統RAID快20倍?

這個問題比較復雜,包括重構時間,我搜集了很多的數據和資料,明天打算作為一個專題和大家分享。也是,我一個LUN的數據你給我打散到100塊盤上去了,萬一壞了兩塊盤,我的數據不是完了嗎?要知道RAID 2.0(包括fast RAID)如何解決這個問題,請看下一頁分解。

通過上述大家應該基本掌握了RAID 2.0的原理。今天我們就來聊聊RAID 2.0的可靠性問題。

可靠性是一個非常復雜的問題,我不是這方面的專家,我只是從我收集的資料整理一下分享給大家。

可靠性和性能也經常是矛盾的,作為用戶,有時需要平衡,這個是一個藝術問題,哈,你別不信,看完我今天的分析,估計你也有同感。

我們先從理論上分析一下RAID 2.0的可靠性。

大家知道,系統的可靠性=MTBF / ( MTBF + MTTR ) * 100%

RAID 2.0(3PAR叫FAST RAID),通過把數據分散到更多的磁盤,重構時間縮短,MTTR應該大大縮小了。但有一個問題,就是針對某一個LUN來說,由于數據分散到更多的盤,因此數據丟失的風險大大提高,即MTBF變大了。比如我采用傳統的RAID 5(3+1),4個盤同時壞兩個的概率是很小的,但如果用RAID 2.0, 假設這些數據分散到100個盤上,100個盤同時壞2個盤的概率大多了。雖然重構速度很快,但雙盤失效的概率也提高了。那么到底重構減低的風險是否能夠平衡掉雙盤失效帶來的風險呢?(什么,你一直想問這個問題,說明你入道了,很多童鞋是問不出這個問題來的。對RAID不了解的可以找度娘補習一下。老實說,我剛學習RAID 2.0的時候第一個問題就是這個,問了很多人,今天還未能完全解決)。

Markov模型是經典的可靠性預計模型,采用Markov模型可以根據系統當前狀態及轉移條件,來預計系統的可靠性指標。

馬爾科夫是俄羅斯著名的數學家,計算公式復雜(我很佩服數學家,這么復雜的計算怎么算出來的),我想大家和我一樣都是俗人,不會自己去算了,對吧。好,我從非官方渠道拿到一份可靠性技術的白皮書,在這里第一時間分享給大家計算結果:

我來解讀一下這個結果。這個結果說明,從理論上來說,RAID 2.0系統比RAID 1.0系統丟失數據的風險要小很多。但是別急,這個是對整個系統來說的。也就是說,針對這個高端陣列的管理員,他覺得不錯,整個系統的可靠性提高了。但針對這個高端陣列的某個最終用戶(比如ERP系統這個應用的IT人員帥鍋小L)來說,好像不是這么回事。小L只關心ERP的數據,原來采用RAID 1.0,數據存放在5塊盤上,同時壞兩塊盤的概率比地震都小,現在你把小L的數據均衡分布到100塊盤上了,小L他晚上能睡著嗎?

我也在尋求這個答案,谷歌和度娘都找不到答案。有可靠性專家和我說,其實,這種情況下RAID 2.0的可靠性并不比RAID 1.0有優勢,對于傳統RAID和RAID2.0,發生數據丟失的概率和丟失的數據量均近似有“隨著系統盤數和硬盤容量的增加而成比例增大”(因此,性能夠用就好,西瓜池也不要搞太大了)。雖然出現故障丟失的數據量要比RAID 1.0少,這對文件系統和歸檔來說問題不大,但對于數據庫來說,丟一點都不行。因此,重構速度雖然快了,半小時搞定,但萬一半小時內再壞第二塊盤怎么辦?用RAID 10或者RAID 6,或者做容災。對頭,可靠性要匹配你的需求,這個世界上沒有完全可靠的東西,包括愛情,哈。

注意:上面的分析沒有考慮RAID 1.0重構負載重可能導致的加快硬盤過勞死的風險,因為這個沒法算。

RAID 10和RAID 6哪個更可靠?

大家知道,RAID 6最多可以壞任意兩塊盤數據不丟失,RAID 10可能壞一半的盤數據也可能不會丟失。那個的可靠性高?我估計80%以上的人認為是RAID 10可靠,如果你也是這么認為的,請馬上回復微信告訴我,我看看我的判斷對不對。其實我也和你們一樣,我一直認為RAID 10更可靠,直到某天一個可靠性專家給我一份材料,IBM的紅皮書,圣經啊。在IBM的一本DS5000的紅皮書里,IBM經過計算,結論就是RAID 6的可靠性最高,其次才是RAID 10,最差是RAID 5。

但你知道為什么現在無數的數據庫都推薦用RAID 10了嗎?因為性能。RAID 10的讀寫性能好很多。我說性能和可靠性的平衡是一個藝術,這回你相信了吧?

網上一直有傳說說IBM XIV容易丟數據,我一直不信,現在想想,信了。為什么呢?它全部用SATA盤(現在它也叫SAS盤,其實是假的,是NL-SAS,也就是SAS接口,SATA的盤體),采用偽隨機算法把數據以1M大小的CHUNK平均分布到所有的磁盤上。SATA盤的可靠性本來就比較差,你分布到180塊盤,就算你重構速度塊,同時壞2塊盤必然會造成數據丟失(因為肯定有某1個CHUNK就在這兩塊盤上)。

對于RAID 2.0來說,已經好多了,RAID可以選擇RAID 6。對于傳統的高端陣列廠商IBM DS8000/EMC/HDS,他們由于歷史原因,底層代碼不能變,還是用傳統的RAID,但為了實現自動分層和性能不變,必須要直接切第二刀Extend,對不對? 但在這種RAID 1.5的改良對可靠性更加是個噩夢,我們來欣賞一下IBM DS8000的紅皮書里面的描述:

看到沒有,由于DS8000的第二到必須在存儲池里面切,而這個存儲池底層是由多個傳統的RAID組(RANK)組成,因此,如果一個RAID組失效,一個池的數據都丟失了。因此,你害怕丟失,請容災。為了控制這個,我記得DS8000一個pool下最多放4個RAID組,而HDS直接建議用RAID 6。你看看,RAID 1.5限制是否很多,RAID 2.0真正從底層解決這些問題就好多了。再一次說明,可靠性和性能功能的平衡,真是一個藝術活。

最后,我們再談一下重構時間。

先說一下我收集到的各個廠商宣傳的數據:

HW:1TB重構時間30分鐘,比傳統RAID需要10個小時快20倍;

IBM XIV:1TB重構時間30分鐘;

3PAR:在老的膠片上寫的是重構速度快2倍;

我喜歡刨根問底,我們來分析一下:大家知道,7200RPM的SATA盤寫的帶寬大約115MB/s,因此,如果采用RAID 1.0,理論上需要2.5小時寫1TB的數據。因為重構的時候只能寫一個熱備盤,這是瓶頸。但一般的系統都是有負載的,重構的優先級一般都是最低的,因為用戶要保證業務的運行,因此,一般的重構時間基本都是理論時間的2-5倍。因此,如果RAID 2.0參與的盤很多,那個30分鐘是可以達到的。而如果傳統的RAID 1.0有較高的負載,重構需要10個小時也是正常的。因此,HW的宣傳雖然稍微有點夸大,但基本屬實。最關鍵就是RAID 2.0重構的時候對業務基本沒有影響,因為沒有熱點盤。而RAID 1.0重構,對業務的影響是巨大的,反過來也影響到重構的速度。

為了驗證我的想法,我再從互聯網上找一下3PAR的用戶發布的重構數據。
http://storagemojo.com/2010/02/27/does-raid-6-stops-working-in-2019/

這個用戶分享了采用3PAR的fast RAID,SATA盤重構時間只化了4分鐘(這個發揮了RAID 2.0的最大好處,只重構用過的CHUNK,而不用整盤重構,估計數據量比較?。?,而原來采用老的陣列,重構時間是24小時(SATA盤)和4-6小時(FC盤)。我也看到另外一個用戶說說他采用3PAR的陣列,重構750GB的數據用了3個小時(業務負載特別重),不過對業務性能沒有任何影響(怪不到3PAR宣稱它是唯一一個可以在業務期間換盤的高端存儲廠商,不過現在HW HVS把它的唯一去掉了,呵呵)。這說明重構時間也是一個藝術活,和數據量和業務負載,硬件特性等等都有關系。

最后分享一個我想了很長時間才想明白的事情,為什么RAID 2.0的重構的總數據量少?RAID 1.0也不是全盤重構的???(我估計你們肯定也想不明白)。后來在我上周苦練切西瓜刀法后恍然大悟,RAID 1.0能夠感知的是LUN,也就是說,從一個RAID組里劃分出LUN后,雖然主機還沒有寫任何東西,但是系統不知道,因此重構的時候都重構了,一般陣列初始化的時候,肯定把LUN都劃了,因此相當于整盤重構了。但RAID 2.0劃分為CHUNK,每個CHUNK上都有標簽,沒有分配的CHUNK,或者分配了沒有被寫過的CHUNK系統都清楚,當然只會重構有數據的CHUNK了,而不是整個LUN。

最后問大家一個問題,采用哪種RAID級別,RAID 2.0相比RAID 1.0重構時間提升最大?哈哈,RAID 10。假設不考慮做奇偶校驗的時間,所有的RAID 1.0的重構時間是一樣的,因為只能同時寫1塊熱備盤,瓶頸在熱備盤上。但采用RAID 2.0后,瓶頸不在寫盤上了,RAID 5和RAID 6多了很多讀數據的動作,而RAID 10就不用了,因此重構的速度提升是最明顯的。
通過這些分析,大家估計得出的結論和我一樣,RAID 2.0確實是一個顛覆性的技術,優點很多,而且有出色的性能和不遜于傳統RAID的可靠性(帶來業務的靈活性我們后面還會談到),并且業界采用了十幾年(3PAR 1999年就用了),應該是一個經過市場檢驗的RAID方法,應該也是高端存儲以后的發展方向。

希望大家積極反饋你的意見和建議,微信掃描如下二維碼,關注微信公眾號“高端存儲知識”,與作者微信互動。

未經允許不得轉載:存儲在線-存儲專業媒體 » 存儲專欄:千言萬語道不盡RAID 2.0
分享到

xigua

相關推薦

精品国产午夜肉伦伦影院,双性老师灌满浓jing上课h,天天做天天爱夜夜爽,攵女乱h边做边走