隨着手頭的錢愈來愈多,不少人開始蠢蠢欲動想要構建我的或者家庭級別的磁盤陣列用來擴展PC存儲,或者說想要在家裏安裝一個私人的本地NAS,或者有不可名狀的文件須要落地家庭IDC環境,又或者單純是個土豪,須要在大得不得了的地下室作一個隨時能夠點播的家庭影院。這個時候,海量的存儲需求就來了,可是每每我的或者家庭對於如何設置合理的、高可用的存儲架構沒有概念,致使每每用的是裸盤陣列。結果就是一旦掛了就全掛了,哪怕運氣好不掛,隨着時間的流逝,最終總有一點會出現磁盤問題,那個時候集體更換遷移又是一個讓人想要撞牆的事情。算法
因此筆者在這篇短文裏,會用最短的篇幅給讀者介紹,來自於企業環境而且已經應用許久的RAID卡磁盤陣列技術!緩存
首先要明確一點,那就是多數的PC主板是不支持RAID陣列的,可是不少高端的主板會有原生支持RAID技術,具體的狀況須要查詢主板提供商。而不少服務器級別主板,相似於X399這種,每每是支持的,甚至有些不須要額外購置raid卡也能進行raid陣列管理。安全
可是從現實的角度來講,不管磁盤支持不支持raid卡設置,咱們都應該買一塊PCI接口的真正的RAID卡來進行磁盤陣列管理。由於主板即使支持RAID,基本上也都是軟件層面的軟raid,對於磁盤的壽命和性能有不小的折扣損失。何況隨着多顯卡併火漸漸退出主流市場,再也不被黃老闆等支持,目前主流主板的PCI接口必定是有多的,同時raid卡便宜且自帶斷電保護電池,可謂是性價比極高的硬件了。服務器
歷史上RAID陣列的種類很是多,總計以下:架構
可是因爲成本和性能的優劣緣由,目前單種類RAID陣列主要就剩下RAID0,RAID1,RAID5,以及比較有意思的RAID6。筆者也會着重講解一下這幾種陣列的原理和優劣。分佈式
在RAID5裏面用來校驗的磁盤機制,主要使用了異或計算,從而可以容忍任意一塊磁盤的損毀狀況,而且在換盤後經過rebuild來對新盤進行重構。可是在RAID6中,由於須要容忍兩塊磁盤損毀,第二塊奇偶校驗磁盤的算法就有所不一樣,比較複雜了。工具
若是出現一塊磁盤損壞的狀況,就能夠和RAID5同樣處理,Rebuild完事。 那麼關鍵來了,若是兩塊磁盤掛了的話,就須要用到全新的技術了。 咱們首先引入一個的伽羅瓦域(有限域),對於一個k次不可約不等式
,
。同時一塊數據能夠記錄成
,其中
是0或者1,對應伽羅瓦域裏面的元素
,令
對應的磁盤條帶裏面的數據,用這個方法編碼成域裏面的元素。若是
是域的某一個生成元,而且
表示域的加法(能夠當作異或運算),並列表示域的乘法,那麼
和
能夠表示成:
因此,若是兩塊磁盤失效的時候,就須要經過P和Q來從新把數據算出來,這個過程使用了域論,相對比較複雜。咱們經過例子來講明,假如在一個
塊磁盤組成的磁盤陣列
裏面,若是
和
(其中
),經過域算法咱們能夠求出兩個域A和B,其中
且
。 展開兩式可得:
等式
的兩端同時乘上
,加到上一個等式可得:
,從而能夠求出
,而後再求出
。 這個過程裏面對Q的計算很是耗費CPU,因此必定要上硬件RAID,由於RAID帶有專用處理器專門幹這個。oop
好了,如今咱們都知道各類磁盤RAID陣列的優劣和構建方式了。對於家庭和我的來講我以爲仍是RAID5最性價比高,可是若是你的磁盤陣列裏磁盤數量大於8了,其實就能夠考慮RAID6了。其餘的RAID構成的話考慮到性價比,其實對我的用戶不太合適。可是安全性和可用性需求極高的企業,除了hadoop用的分佈式裸盤之外,其餘最好仍是RAID10或者RAID1,甚至RAID60。性能
下面來講說遇到故障:大數據
最後,公式部分來自維基,很通俗易懂,思路也很清晰,有空去看一下域論也挺好(不會去看的