對于磁盤陣列很多不知道它是干什么的,有時候會聽別人說把硬件組成一個Raid,這個Raid又是個啥?它和磁盤陣列是一回事嗎?部分似懂非懂朋友可能又會問磁盤陣列常用到的是哪里幾種呢?為了給大家講的清楚我就從磁盤陣列的工作原理來給大家詳細的了解這個磁盤陣列。
一、什么是JBOD
假設我們有多塊磁盤如果我不組建磁盤陣列的話磁盤與磁盤之間是沒有任何關系的,我們把文件放進磁盤A里那么跟磁盤B一點關系沒有,同樣的把文件放進磁盤B里它跟磁盤A也是沒有什么關系的,兩塊磁盤是完全獨立存在的,這種傳統的沒有任何聯系的磁盤關系用英文來講就是Just a bunch of disk,簡稱JBOD結構(意思是說只是一堆磁盤)。這種結構有很大的弊端,我們調取磁盤A里的數據時只是磁盤A在工作而磁盤B是空間的,調取磁盤B里的數據時只是磁盤B在工作而磁盤A是空閑的;除非我們同時獲取兩塊磁盤的數據,不然總有一塊磁盤是空閑的,這無形當中浪費了部分磁盤性能,所以為了讓多塊磁盤協調工作一塊運轉發揮它的全部性能就有了磁盤陣列這個東西。
二、磁盤陣列是什么
磁盤陣列在電腦當中我們通常稱之為Raid,給多塊磁盤組建Raid后我們電腦內就只會看到一個Raid的陣列盤,它的子磁盤我們是看不到的,我們就跟使用普通磁盤一樣去使用這個由多塊磁盤組合起來的Raid磁盤,Raid有很多的等級,目前行業公認的Raid等級為0-7,不同的Raid等級之間并沒有優劣之分,它們僅僅是不同功能的陣列,只是在我們實際使用的時候需要根據不同的情況和不同的需求去靈活的決定用哪個等級的Raid,下面給大家講解一個不同等級的Raid之間的區別、工作原理和優劣。
三、磁盤陣列有幾種
(一)Raid0:
它的工作原理類似于內存的雙通道,它至少要用兩塊磁盤,工作原理就是將一個完整的數據拆分后分別放到兩塊磁盤中,寫入時兩塊磁盤同時寫入,讀取時兩塊磁盤同時讀取,和內存雙通道一個道理,帶寬翻倍速度翻倍的效果,比之更強的地方在于我有多少塊磁盤就是可以翻多少倍的性能,不像內存那樣有IMC的限制,甚至可以把南橋芯片的帶寬跑到上限。但這里翻倍的速度只是連續讀寫的速度,Raid是無法提高隨機讀寫性能的,因為隨機讀寫主要考驗的是硬盤的尋道和尋址能力,所以我們組建了Raid仍然改變不了硬盤隨機讀寫性能低下的問題。硬盤還是要花大量的時間去尋道和尋址,所以組Raid隨機讀寫性能的提高相對于單塊磁盤來說提升的幅度是微弱的,也有可能是某一塊磁盤拖了后腿導致木桶短板效應,以至于組Raid0后反而隨機讀寫性能居然會弱于單塊磁盤的現象,Raid0是所有陣列里速度最快的同樣也是最不安全的,因為我們的數據被拆分到了多塊磁盤當中,比如我們組了6塊磁盤的Raid0,數據就會被拆分成6塊分散在6個磁盤中,萬一其中一塊磁盤出了故障我們只有其他5塊磁盤的數據是無法正常讀取的,這就導致了整個數據全部報廢,由此可見Raid0的優缺點都很極端,加的磁盤越多速度就是越快,同樣的磁盤越多數據就越危險。
(二)Raid1:
又被叫做鏡像,他也至少需要2塊磁盤才能實現,其工作原理是把一份完整的數據復制到其它的磁盤當中,假設我們把2塊磁盤組成Raid1,在往這個Raid1里存放數據時2塊磁盤內部都會存入完全一模一樣的數據,所以說Raid1就是我們平時說的自動備份。當然我們也可以手動的去復制手動備份,但手動操作是需要時間的,而我們組建好了Raid1后,就可以實現全自動實時備份了,而且組建完了Raid1以后我們在系統里只會看見1塊磁盤的,這種陣列和Raid0一樣也是一種極端,是所有陣列當中最安全的,但是相應的空間利用率和速度是最低的。因為,如有2塊磁盤組成了Raid1,我們在系統內只能看到1塊容量的磁盤,同樣速度也是1塊磁盤的速度。
(三)Raid2:
一種利用海明碼校驗的一種陣列,其主要目的是在Raid0的基礎上增加了數據糾錯能力,注意這里是糾錯而非容災。Raid2其數據的第2的n次方為校驗文件,如1、2、4、8、16、32位就是用來糾錯的校驗碼,其他的位置才是原始數據。假設我們有一個四位編碼的數據需要存儲,那就需要7塊磁盤,其1、2、4存放校驗碼,只有3、5、6、7是存放數據的。如果有一個八位編碼的數據,需要存儲那么1、2、4、8是校驗碼,而3、5、6、7、9、10、11、12是存儲數據的。所以我們發現Raid2當中編碼數據位數越少磁盤利用率就越低。由于一次寫入數據可以往多塊磁盤寫入所以他具有和Raid0比較相似的并發性能,但是由于寫入還需要計算校驗碼,讀取時也需要讀取校驗碼用于糾錯,所以實際上其性能開銷還是比較大的,因此使用Raid2的人還是很少的。
(四)Raid3:
它的實現至少需要3塊磁盤,既然Raid0不安全,只要壞其中一塊磁盤所有數據全部報廢,那我們就想辦法讓他有一定的容災能力。假設我用3塊磁盤組了Raid0,然后我們再增加一塊磁盤做為第4塊,這里面存放著前面3塊磁盤的恢復碼,當前面3塊磁盤任意一個磁盤出現故障的時候,靠著剩下2個磁盤的數據再加上恢復碼我們就可以恢復丟失磁盤的數據了,而恢復碼的磁盤要是損壞了也不是會影響到前面3個磁盤,所以說Raid3相對于Raid0來說容災能力從0塊增加到了1塊,由于前面3塊磁盤和Raid0一樣,只是多了1塊校驗碼磁盤,和Raid2海明碼那種一下一堆糾錯碼不同,恢復碼的性能還是消耗比較少的,所以Raid3的性能非常接近Raid0。
(五)Raid4:
和Raid3很像,也是在Raid0的基礎上增加一塊恢復碼磁盤,假設Raid3和Raid4都是3個數據盤+1個恢復盤,這時我有一個文件它被分成了3組,這3組數據需要分別存儲到磁盤內。Raid3就是第一組拆分加上第一組恢復碼,寫入;第二組拆分以后加上第二組恢復恢復碼,寫入;第三組拆分以后加上第三組恢復碼,寫入。而Raid4則是1、2、3組直接準備好,然后把1、2、3組的數據整體準備一個恢復碼,再把三組數據和整體的恢復碼寫入進去。他們的區別是Raid3是將一個數據塊拆分分別存儲,校驗碼也是針對拆分的這一部分去進行計算的;而Raid4是直接按區塊去進行存儲,校驗碼是針對幾個塊一塊進行計算,其容災能力也是一塊磁盤。
(六)Raid5:
因為Raid4也有自己的問題,3塊磁盤對應1塊恢復盤,如果我增加到了5塊磁盤他還只是一塊恢復盤,再增加到10塊他也是一塊恢復盤,無論多少塊磁盤他都只有一塊恢復盤。當我們有很多數據磁盤但只有一塊恢復盤的話這個恢復盤的性能可能會制約整個陣列的性能,恢復盤的恢復數據塊沒有寫完下次寫入是無法進行的,所以我們把原本要存入恢復盤恢復碼直接拆分開,每塊磁盤中都分別存儲一部分恢復碼,這樣恢復碼的寫入操作就會被拆分由4塊磁盤共同完成。假設磁盤3故障無法讀取,數據B是完整數據的,B1、B2、B3都在,不需要恢復,A1+A2+Ap可以恢復A3,C1+C3+Cp可以恢復C2,D1+D3+Dp可以恢復D2。所以Raid5一方面可以做到Raid0相似的性能,還增加了一塊磁盤的容災能力,更解決了Raid4恢復碼磁盤的瓶頸,就目前來講民用層面Raid5是使用最多的一種磁盤陣列,常見于各種私有NAS服務器里。
(七)Raid6:
Raid3、Radi4、Radi5都只能容災一塊磁盤的故障還是不安全,萬一運氣有點背同時壞掉了兩塊磁盤,為了解決這個問題于是有了Raid6。Raid6的恢復碼相對于Raid5從1組變成了2組,這個時候如果壞了兩塊磁盤我們的數據還是依舊能找回的,這就讓Raid6有了2塊磁盤的容災能力。
(八)Raid7:
是一種全新的Raid,它比其他幾種Raid更為先進,它自身帶有智能化的實時操作系統和存儲管理的軟件工具,可以獨立于主機運行而不占用系統資源。理論上講Raid7是性能最高也最安全的Raid架構,它的組建方式就跟Raid0-Raid6極大不同,Raid7對所有的磁盤讀取寫入均是同步進行的,可以分別控制每塊磁盤從而提高了系統的并行性,系統訪問數據的速度更快。因為每個磁盤都帶有一個高速緩沖存儲器,如果系統一旦斷電,這個緩沖存儲器里的數據會他問丟失,所以必須配備UPS一起工作,因為價格昂貴所以使用Raid7的并不多。
(九)Raid10:
基本上我們能接觸到的大部分基礎的Raid就這些,Raid除了基礎的單個存在之外還可以嵌套存在。比如我們先用兩個磁盤組成Raid1,用另外兩個磁盤再組一個Raid1,最后把這兩個Raid1組成一個Raid0,這個就是Raid10。
(十)Raid50:
我們還可以用9塊磁盤,每3塊磁盤組成一個Raid5,然后再把這三個Raid5組成一個Raid0,這個就是Raid50。
四、總結
單純從使用率來講Raid0、Raid1、Raid5、Raid6、Raid10、Raid50用的比較多,剩下幾種用的較少。但是并不是說用的少就是不好,無論用哪種Raid,如何去做嵌套組合,不同的Raid之間各有優劣,沒必要非要爭論出誰好誰壞,大家如果需要組建磁盤陣列的話,要靈活的根據自己的需求的實際情況下兼顧安全性與速度在實現性能提升的同時,不要因為容災能力的低下導致數據丟失就可以了。