引言:RAID技術是現代大規模存儲的基礎,「基礎(技術)是拿來革命的」。我查raid相關資料時,查布爾運算,居然一路查到「香農原理」,這不是有個視頻中HW的任總提到的嗎,多基礎的東西,任總卻絕不含糊,他的認知真不是蓋的,咱們這等小輩又有什麼理由不去努力提升本身的認知呢。同時我忽然也意識到了,爲何國家和這些偉大的企業家重視基礎技術的研究,因此就冒出來了上面的語錄!思量了許久!!這也是爲何冬瓜頭在他的書裏面花了大量篇幅來寫RAID,甚至把編小說的功夫都用上了!嗯,進入正題。數據庫
背景:前面章節介紹過磁盤讀寫速度主要限制在於磁頭臂的切換即尋道,爲了不磁頭被不斷打斷的問題,人們發明了RAID技術,讓一個硬盤的磁頭在換道時,另外一個磁盤的磁頭在讀寫。若是不少磁盤聯合起來,同一時刻總有某塊硬盤的磁頭在讀寫狀態而不是都在換道狀態,這就至關於一個大虛擬磁盤的磁頭老是處於讀寫狀態,極大的提高傳輸速率。緩存
RAID,Redundant Array of Independent Disks,獨立硬盤冗餘陣列,簡稱磁盤陣列。從技術提出的背景能夠看出,RAID是大量磁盤緊密合做的方式,既能夠提高速率,同時又能夠作到冗餘,而對用戶和操做系統來講看起來像一個單獨的更大的硬盤或邏輯存儲單元。RAID功能的實現能夠用獨立的RAID卡來支持,也能夠有效地與主板進行集成。隨着技術的發展,目前RAID已經造成不少個規範,每一個規範又可稱做一種級別。安全
在介紹RAID級別以前,有必要先介紹下相關的基礎技術。最重要的就是條帶和IO:條帶是隨着RAID提出來的;IO這裏指數據的寫入和讀出,在存儲系統中能夠分紅不少類別。併發
首先,條帶是虛擬的概念。硬盤物理上劃分的最小單位是扇區(以往文章提到過)。而文件系統有時會將多個(2的n次方)扇區做爲塊或者簇來做爲數據操做的最小單位,即邏輯最小單位。異步
條帶和扇區、塊沒有必然的關係。可是任何磁盤讀寫都離不開文件系統和硬盤,因此後面會用到扇區、塊這兩個概念。分佈式
條帶是將多個並排的磁盤橫向切割,即在每一個磁盤相同偏移處橫向邏輯切割。工具
跨過的磁盤磁盤個數(或塊的個數或字節容量)稱爲條帶長度,Stripe Length;或者叫條帶寬度,Stripe Width。性能
而單個磁盤上佔有的區域爲段,Segment。優化
段包含的字節數(或塊的個數或扇區的個數)爲條帶深度,Stripe Depth。spa
條帶化是RAID技術抽象出來的一種設計方法,便於多個磁盤之間創建一種邏輯關係,便於提升IO併發能力。
從上面概念看,條帶長度通常不變,因此整個條帶大小和條帶深度有關,因此條帶深度也指的是條帶的大小,也叫條帶大小。
存儲IO,都是圍繞數據的Input和Output,這裏既有最終磁盤的讀寫,也有傳輸的IO,控制器緩存IO等等。這裏介紹常見的幾個概念:
(1)IOPS
磁盤的IOPS,即每秒能進行多少次IO。計算方式每一個系統每一個模塊的定義和要求不同。咱們這裏指通常狀況下,一條I或O命令對應磁盤寫或讀必定範圍內連續的數據的操做,除了開始執行讀寫命令前可能須要尋道外,其餘時間不須要換道。那麼完成一次IO所用的時間=尋道時間+旋轉延遲時間+數據傳輸時間。該值越少,IOPS越高。因爲尋道時間相對於傳輸時間要大幾個數量級。因此影響IOPS的關鍵因素是下降尋道時間。而在連續IO的狀況下,尋道時間很短,僅在換磁道時候須要尋道,因此此時傳輸時間越少,IOPS越高。
(2)連續IO/隨機IO
連續和隨機指本次IO給出的初始扇區地址和上一次IO結束扇區地址是否是徹底連續的或者相隔很少的,是則是連續IO,不然隨機IO。
(3)順序IO/併發IO
磁盤控制器若是能夠同時對一個RAID系統中的多塊磁盤同時發送IO指令(這裏的同時是宏觀的概念,即若是全部磁盤都在一個總線或者環路上,則這裏的同時是指向一塊一塊磁盤依次發送IO指令,只是沒必要等待每次的迴應),而且這些最底層的IO數據包含了文件系統下發的多個IO數據,則爲併發IO,即多個IO流同時傳輸和讀寫。
若是這些發向磁盤的IO只包含了文件系統的一個IO的數據,則爲順序IO,即一個時間點只有一個IO流傳輸和讀寫。因此我以爲改成「串行IO」更好理解。
RAID分爲8個級別,不一樣的級別知足不一樣的應用程序的需求。
按條帶化,將數據並行發送給全部磁盤。
最大的優點,讀寫性能很高。
致命缺點:數據沒有冗餘,若是一個磁盤損壞,整個存儲崩潰。
注意:前面提到,這種併發是」宏觀的同時「,RIAD0要提高性能,條帶越小越好。可是過小了,要等待下一輪IO的時間變成長次數變多。由於每次IO佔用較多物理盤,而隊列中的IO必須等待此次IO結束後才能使用物理盤。
IO SIZE/Stripe SIZE 較小,性能提高明顯。
RAID 1將數據在兩個以上的磁盤中造成鏡像,讀能夠併發,寫通常不能併發,除非事務性寫。
優點:數據有冗餘,讀性能提升。
缺點:有效空間只能佔一半,空間利用率低。寫性能有所降低,由於須要寫兩次,因此時間以最慢的磁盤爲準。
注:條帶無關緊要。
Hamming Code ECC漢明碼錯誤檢測與修正,一種早期的糾錯技術。在原有數據位中插入必定數量的校驗位來進行錯誤檢測和糾錯。
RAID 2中,每一個IO下發的數據被以位爲單位平均打散在全部數據盤上,同時計算出漢明碼並寫入校驗盤。數據盤和校驗盤都有多塊,即有各自的陣列。漢明碼只能糾正一個位的錯誤,因此只容許一個盤損壞。
缺點:校驗盤數量太多(四塊數據盤須要三塊校驗盤),開銷太大以及成本昂貴,目前基本已經被淘汰。
補:磁盤數據以位單位?磁盤的最小單位是扇區512字節,怎麼以位爲單位呢?假如四個數據盤,若是一次寫入4KB,第一塊存放的是第1.5.9.13等位的數據,第二塊存放的是2.6.10.14等位的數據,如此分割。
RAID 2不能實現併發IO,由於每次IO都佔用了全部物理盤。
對數據磁盤採用高效的XOR運算,將結果放在單獨的校驗盤。因此一樣容許一塊磁盤損壞。
RAID 3分割的單位是字節或者扇區(各個文獻上說法不同,總之是比較小),比RAID2增大了,但仍是很小。IO傳輸和磁盤讀寫操做和RAID 2相似。
優勢:校驗盤只需一塊,成本下降了;持續讀和寫性能幾乎是單盤的N倍。
注:RAID 3和RAID 2同樣不能併發IO,由於一個IO佔用全部磁盤。二者也一樣適合連續大塊IO的環境,而RAID3成本更低,更容易部署。
採用和RAID 3同樣的高效的XOR運算,不一樣的是將校驗數據打散在各個盤,即不是固定某個盤,因此也稱做分佈式校驗盤。
正是由於校驗數據位置不固定,因此每次IO能夠不須要全部的磁盤參與,從而能夠實現併發IO。
因此最低能夠併發IO的RAID5至少須要4塊盤。同理,若是數據盤足夠多,校驗盤打散的部分就會分佈的足夠普遍,多IO併發的概率就會顯著增大。
最大的優點是,隨機讀性能很高,全部RAID模式中數一數二。
可是,RAID 5的連續讀性能沒有RAID 3高。
缺點:寫性能較差,根本緣由在於每寫一扇區的數據就要產生其校驗扇區,一併寫入校驗區。龍其實更改數據(隨機寫)的時候,這種效應很是明顯,由於要有寫懲罰。
補:(1)寫懲罰(Write Penalty )
RAID 5一次寫的動做,其實要浪費3個其餘動做,也就是先讀出老數據,讀出老校驗數據,而後寫新數據和校驗數據。而目的只是寫新數據。
而RAID 2和RAID 3都比RAID 5寫性能強,由於它們在條帶深度很小,任何一次正常點的IO幾乎覆寫全部盤,均會將整個條帶上的位都改變,即不要顧忌是否有未被更新的數據,因此能夠直接寫入新數據和校驗數據,比RAID 5少了兩次讀操做。
(2)RAID 5E和RAID 5EE
RAID 5E在RAID 5的基礎上,每一個數據盤預留一塊固定的空間,深度爲條帶深度,因此也就是說預留一個條帶,做爲熱備。當出現磁盤壞塊時,能及時備份數據。
RAID 5EE在RAID 5E的基礎上有所改進:將固定的」熱備盤「打散到各個數據磁盤中。
實際上,如今的LSI工具能支持外圍設置熱備盤,並且能夠靈活使用,能夠每一個RAID組作熱備盤,也能夠所有磁盤(多個RAID組)作一個熱備,兩種還能夠同時出現。
注:在RAID策略中,隨機併發與寫性能兩者取其一。
這裏提到的是順序寫。通常的RAID對隨機IO,(特別是隨機寫)其性能與單盤都沒有大的優點,由於RAID所作的只是提升傳輸速率、併發IO和容錯。
可是RAID 5在隨機寫頻發的狀況下,因爲頻發的隨機IO提升了潛在的併發概率,若是碰巧併發的IO同處一個條帶,還能夠下降寫懲罰的記錄。這樣其IOPS降低的趨勢比其餘RAID級別要平緩一些。
因此,磁盤越多,可併發的概率越大;RAID 5最適合小塊IO。而若使用「回寫高速緩存」可讓性能改善很多。
應用:關係型數據、讀密集型數據庫表格、文件共享和Web應用程序。
與RAID 5相比,RAID 6增長了第二個獨立的奇偶校驗信息塊。仍然保留RAID 5的條帶化校驗,RAID 6加了另外一種奇偶校驗:條帶數據乘以逆矩陣再奇偶校驗(注【1】)。能夠同時壞兩個盤。
優勢,冗餘度更好,提升了可靠性。
缺點,比RAID 5的寫性能更差,由於有更大的寫懲罰,一次寫入須要6次操做。
RAID 7全稱叫「Optimized Asynchrony for High I/O Rates as well as high Data Transfer Rates(最優化的異步高I/O速率和高數據傳輸率)」,它與之前咱們見到RAID級別具備明顯的區別。RAID 7徹底能夠理解爲一個獨立存儲計算機,它自身帶有操做系統和管理工具,徹底能夠獨立運行。
RAID 01兼容RAID 0和RAID 1的優勢,提供RAID 1同樣的數據安全保證的同時,也提供了與RAID 0近似的存儲性能。
先作RAID 0磁盤組,再2組RAID 0作成RAID 1。假若有八塊盤和四塊數據A,B,C,D;那麼八塊盤依次存放的是A,B,C,D;A,B,C,D。
這種狀況下,若是第一個A出問題,那麼第一組A,B,C,D全都無效了。
可靠性較低。
RAID 10和RAID 01基本原理相近,只是組合方式不一樣。
先兩兩分組,再將各組作成RAID0。仍是上面的例子,假若有八塊盤和四塊數據A,B,C,D;那麼八塊盤依次存放的是A,A,B,B,C,C,D,D。
這種狀況下,若是第一個A出問題,除了第二個A沒有鏡像外,其餘都沒有影響。容許壞多個盤,只要不是一對磁盤壞就能夠。
可靠性高,因此RAID 10遠較RAID 01經常使用。
提高RAID 3的併發IO能力,兩組RAID 3再組建成RAID 0。兼容RAID 0併發IO和RAID 3安全的優勢。
由兩組RAID 5磁盤組成(每組最少3個),每一組都使用了分佈式奇偶位,而兩組硬盤再組建成RAID 0,實現跨磁盤抽取數據。
RAID 50最少須要6塊磁盤,它最適合須要高可靠性存儲、高讀取速度、高數據傳輸性能的應用。這些應用包括事務處理和有許多用戶存取小文件的辦公應用程序。
從前面的原理咱們能夠得出 :RAID 5 適合小塊存儲,RAID 3適合大塊存儲;因此從這裏看二者是有衝突的,而從百度百科查到RAID53的定義是:
RAID 53是一種組合RAID 等級,但不要拿RAID 10的觀點套用,認爲它是RAID 5和RAID 3的組合,事實上,RAID 53應該稱爲RAID 30或RAID 03(也能夠說是RAID 0+3),即RAID 3與RAID 0的組合。
也能夠理解成RAID53兼容了RAID 3較高的讀寫性能和RAID 5良好的併發能力。
MegaRAID、Nytro和Syncro都是LSI 針對RAID而推出的解決方案,而且一直在創造更新。LSI經過MegaRAID提供基本的可靠性保障;經過Nytro實現加速;經過Syncro突破容量瓶頸,讓價格低廉的存儲解決方案能夠大規模擴展,而且進一步提升可靠性。
注【1】:關於RAID 6第二種校驗查過不少資料, 大都含糊其辭,或者說法各不相同。不少的只是說整塊磁盤的奇偶校驗,這個明顯說不過去。有一些說的是多項式,有一些說的矩陣。待考究。
參考資料:《大話存儲II》和百度百科。