在單機時代,採用單塊磁盤進行數據存儲和讀寫的方式,由於尋址和讀寫的時間消耗,導致I/O性能非常低,且存儲容量還會受到限制。另外,單塊磁盤極其容易出現物理故障,經常導致數據的丟失。因此大家就在想,有沒有一種辦法將多塊獨立的磁盤結合在一起組成一個技術方案,來提高數據的可靠性和I/O性能呢。
在這種情況下,RAID技術就應運而生了。
一、RAID 是什麼?
RAID ( Redundant Array of Independent Disks )即獨立磁盤冗餘陣列,簡稱爲「磁盤陣列」,其實就是用多個獨立的磁盤組成在一起形成一個大的磁盤系統,從而實現比單塊磁盤更好的存儲性能和更高的可靠性。
二、RAID 有哪些?
RAID方案常見的可以分爲:
RAID0
RAID1
RAID5
RAID6
RAID10
下面來分別介紹一下。
RAID0
RAID0 是一種非常簡單的的方式,它將多塊磁盤組合在一起形成一個大容量的存儲。當我們要寫數據的時候,會將數據分爲N份,以獨立的方式實現N塊磁盤的讀寫,那麼這N份數據會同時併發的寫到磁盤中,因此執行性能非常的高。
RAID0 的讀寫性能理論上是單塊磁盤的N倍(僅限理論,因爲實際中磁盤的尋址時間也是性能佔用的大頭)
但RAID0的問題是,它並不提供數據校驗或冗餘備份,因此一旦某塊磁盤損壞了,數據就直接丟失,無法恢復了。因此RAID0就不可能用於高要求的業務中,但可以用在對可靠性要求不高,對讀寫性能要求高的場景中。
那有沒有可以讓存儲可靠性變高的方案呢?
有的,下面的RAID1就是。
RAID1
如圖,
RAID1 是磁盤陣列中單位成本最高的一種方式。因爲它的原理是在往磁盤寫數據的時候,將同一份數據無差別的寫兩份到磁盤,分別寫到工作磁盤和鏡像磁盤,那麼它的實際空間使用率只有50%了,兩塊磁盤當做一塊用,這是一種比較昂貴的方案。
RAID1其實與RAID0效果剛好相反。RAID1 這種寫雙份的做法,就給數據做了一個冗餘備份。這樣的話,任何一塊磁盤損壞了,都可以再基於另外一塊磁盤去恢復數據,數據的可靠性非常強,但性能就沒那麼好了。
瞭解了RAID0和RAID1之後,我們發現這兩個方案都不完美啊。
這時候就該 性能又好、可靠性也高 的方案 RAID5 登場了。
RAID5
這是目前用的最多的一種方式。
function setStyleHeaderSiblings() {
if (!checkCompatibility()) return; //check compatibility
var heads = document.getElementsByTagName("h1");
var ele; //defines a element for receive;
for (var i = 0; i < heads.length; i++) {
ele = getNextElement(heads[www.haom178.com].nextSibling);
ele.style.fontWeight www.feifanyule.cn= "bold";
ele.style.fontSize = "1.2em"
function setStyleHeaderSiblings() {
if (!checkCompatibility(www.mhylpt.com)) return; //check compatibility
var heads = document.getElementsByTagName("h1");
var ele; //defines a element for receive;
for (var i = 0; i < heads.length; i++) {
ele = getNextElement(heads[i].nextSibling);
ele.className="change";
因爲 RAID5 是一種將 存儲性能、數據安全、存儲成本 兼顧的一種方案。
在瞭解RAID5之前,我們可以先簡單看一下RAID3,雖然RAID3用的很少,但弄清楚了RAID3就很容易明白RAID5的思路。
RAID3的方式是:將數據按照RAID0的形式,分成多份同時寫入多塊磁盤,但是還會另外再留出一塊磁盤用於寫「奇偶校驗碼」。例如總共有N塊磁盤,那麼就會讓其中額度N-1塊用來併發的寫數據,第N塊磁盤用記錄校驗碼數據。一旦某一塊磁盤壞掉了,就可以利用其它的N-1塊磁盤去恢復數據。
但是由於第N塊磁盤是校驗碼磁盤,因此有任何數據的寫入都會要去更新這塊磁盤,導致這塊磁盤的讀寫是最頻繁的,也就非常的容易損壞。
RAID5的方式可以說是對RAID3進行了改進。
RAID5模式中,不再需要用單獨的磁盤寫校驗碼了。它把校驗碼信息分佈到各個磁盤上。例如,總共有N塊磁盤,那麼會將要寫入的數據分成N份,併發的寫入到N塊磁盤中,同時還將數據的校驗碼信息也寫入到這N塊磁盤中(數據與對應的校驗碼信息必須得分開存儲在不同的磁盤上)。一旦某一塊磁盤損壞了,就可以用剩下的數據和對應的奇偶校驗碼信息去恢復損壞的數據。
RAID5校驗位算法原理:P = D1 xor D2 xor D3 … xor Dn (D1,D2,D3 … Dn爲數據塊,P爲校驗,xor爲異或運算)
RAID5的方式,最少需要三塊磁盤來組建磁盤陣列,允許最多同時壞一塊磁盤。如果有兩塊磁盤同時損壞了,那數據就無法恢復了。
RAID6
爲了進一步提高存儲的高可用,聰明的人們又提出了RAID6方案,可以在有兩塊磁盤同時損壞的情況下,也能保障數據可恢復。
爲什麼RAID6這麼牛呢,因爲RAID6在RAID5的基礎上再次改進,引入了雙重校驗的概念。
RAID6除了每塊磁盤上都有同級數據XOR校驗區以外,還有針對每個數據塊的XOR校驗區,這樣的話,相當於每個數據塊有兩個校驗保護措施,因此數據的冗餘性更高了。
但是RAID6的這種設計也帶來了很高的複雜度,雖然數據冗餘性好,讀取的效率也比較高,但是寫數據的性能就很差。因此RAID6在實際環境中應用的比較少。
RAID10
RAID10其實就是RAID1與RAID0的一個合體。
我們看圖就明白了:
RAID10兼備了RAID1和RAID0的有優點。首先基於RAID1模式將磁盤分爲2份,當要寫入數據的時候,將所有的數據在兩份磁盤上同時寫入,相當於寫了雙份數據,起到了數據保障的作用。且在每一份磁盤上又會基於RAID0技術講數據分爲N份併發的讀寫,這樣也保障了數據的效率。
但也可以看出RAID10模式是有一半的磁盤空間用於存儲冗餘數據的,浪費的很嚴重,因此用的也不是很多。
整體對比一下 RAID0、RAID1、RAID5、RAID6、RAID10 的幾個特徵:
RAID磁盤陣列是什麼(一看就懂)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Vue+Element UI+Lumen實現通用表格分頁功能
4Ark
2019-02-03 14:22:48
Element input樹型下拉框的實現代碼
玲珑骰子安红豆
2018-12-25 15:23:21
Element UI框架中巧用樹選擇器的實現
程序媛兔子
2018-12-13 16:23:17
體驗golang語言的風騷編程
終端研發部
2018-12-11 21:17:19
利用 JDK 自帶的 org.w3c.dom 進行對象, map 與 xml 的互相轉換
zcqshine
2018-12-11 21:13:15
python測試工具開發面試寶典3web抓取
python測試開發人工智能安全
2018-12-10 21:13:14
Spring事務用法示例與實現原理
愛寶貝丶
2018-12-08 21:19:53
css幾個重要屬性的介紹
swingcoder
2018-12-08 21:13:22
mybatis--緩存(一級和二級緩存)
datacube
2018-12-07 21:15:25
《瘋狂Java講義》學習筆記(四)流程控制與數組
fairy1674
2018-12-07 21:15:10
Vue Element使用icon圖標(第三方)
果樹啊
2018-12-07 21:12:39
HTML DOM 之 DOM對象:Document Object Model (文檔對象模型)
Eric-Zhou
2018-12-07 21:12:03
埋點--頁面統計與事件統計該如何入手?
青衫舊巷
2018-12-06 21:22:01
Document對象,Element對象和Node對象
gtandsn
2018-12-06 21:21:00
element-ui之el-scrollbar源碼解析學習
呵呵闖
2018-12-06 21:19:43