為什麼需要磁盤陣列?
如何增加磁盤的存取(access)速度
如何防止數據因磁盤的故障而失落及如何有效的利用磁盤空間
一直是電腦專業人員和用戶的困擾;而大容量磁盤的價格非常昂貴
對用戶形成很大的負擔
磁盤陣列技術的產生一舉解決了這些問題
過去十年來
CPU的處理速度增加了五十倍有多
內存(memory)的存取速度亦大幅增加
而數據儲存裝置
主要是磁盤(hard disk)
的存取速度只增加了三
四倍
形成電腦系統的瓶頸
拉低了電腦系統的整體性能(throughput)
若不能有效的提升磁盤的存取速度
CPU
內存及磁盤間的不平衡將使CPU及內存的改進形成浪費
目前改進磁盤存取速度的的方式主要有兩種
一是磁盤快取控制(disk cache controller)
它將從磁盤讀取的數據存在快取內存(cache memory)中以減少磁盤存取的次數
數據的讀寫都在快取內存中進行
大幅增加存取的速度
如要讀取的數據不在快取內存中
或要寫數據到磁盤時
才做磁盤的存取動作
這種方式在單工環境(single
tasking envioronment)如DOS之下
對大量數據的存取有很好的性能(量小且頻繁的存取則不然)
但在多工(multi
tasking)環境之下(因為要不停的作數據交換(swapping)的動作)或數據庫(database)的存取(因為每一記錄都很小)就不能顯示其性能
這種方式沒有任何安全保障
其二是使用磁盤陣列的技術
磁盤陣列是把多個磁盤組成一個陣列
當作單一磁盤使用
它將數據以分段(striping)的方式儲存在不同的磁盤中
存取數據時
陣列中的相關磁盤一起動作
大幅減低數據的存取時間
同時有更佳的空間利用率
磁盤陣列所利用的不同的技術
稱為RAID level
不同的level針對不同的系統及應用
以解決數據安全的問題
一般高性能的磁盤陣列都是以硬件的形式來達成
進一步的把磁盤快取控制及磁盤陣列結合在一個控制器(RAID controler)或控制卡上
針對不同的用戶解決人們對磁盤輸出入系統的四大要求:
(
)增加存取速度
(
)容錯(fault tolerance)
即安全性
(
)有效的利用磁盤空間;
(
)盡量的平衡CPU
內存及磁盤的性能差異
提高電腦的整體工作性能
磁盤陣列原理
磁盤陣列中針對不同的應用使用的不同技術
稱為RAID level
RAID是Redundent Array of Inexpensive Disks的縮寫
而每一level代表一種技術
目前業界公認的標准是RAID
~RAID
這個level並不代表技術的高低
level
並不高於level
level
也不低過level
至於要選擇那一種RAID level的產品
純視用戶的操作環境(operating environment)及應用(application)而定
與level的高低沒有必然的關系
RAID
及RAID
適用於PC及PC相關的系統如小型的網絡服務器(network server)及需要高磁盤容量與快速磁盤存取的工作站等
因為比較便宜
但因一般人對磁盤陣列不了解
沒有看到磁盤陣列對他們價值
市場尚未打開;RAID
及RAID
適用於大型電腦及影像
CAD/CAM等處理;RAID
多用於OLTP
因有金融機構及大型數據處理中心的迫切需要
故使用較多而較有名氣
但也因此形成很多人對磁盤陣列的誤解
以為磁盤陣列非要RAID
不可;RAID
較少使用
因為兩者有其共同之處
而RAID
有其先天的限制
其他如RAID
RAID
乃至RAID
等
都是廠商各做各的
並無一致的標准
在此不作說明
介紹各個RAID level之前
先看看形成磁盤陣列的兩個基本技術:
磁盤延伸(Disk Spanning):
譯為磁盤延伸
能確切的表示disk spanning這種技術的含義
如下圖所示
OAraid 磁盤陣列控制器
聯接了四個磁盤:
磁盤
磁盤
磁盤
磁盤
這四個磁盤形成一個陣列(array)
而磁盤陣列的控制器(RAID controller)是將此四個磁盤視為單一的磁盤
如DOS環境下的C:盤
這是disk spanning的意義
因為把小容量的磁盤延伸為大容量的單一磁盤
用戶不必規劃數據在各磁盤的分布
而且提高了磁盤空間的使用率
OAraid的SCSI磁盤陣列更可連接幾十個磁盤
形成數十GB到數百GB的陣列
使磁盤容量幾乎可作無限的延伸;而各個磁盤一起作取存的動作
比單一磁盤更為快捷
很明顯的
有此陣列的形成而產生RAID的各種技術
我們也可從上圖看出inexpensive(便宜)的意義
因為四個
MBbytes的磁盤比一個
GBytes的磁盤要便宜
尤其以前大磁盤的價格非常昴貴
但在磁盤越來越便宜的今天
inexpensive已非磁盤陣列的重點
雖然對於需要大磁盤容量的系統
仍是考慮的要點
磁盤或數據分段(Disk Striping or Data Striping):
磁盤
A
A
B
B
C
C
D
D
磁盤
A
A
B
B
C
C
D
C
磁盤
A
A
B
B
C
C
D
D
磁盤
A
A
B
B
C
C
D
D
因為磁盤陣列是將同一陣列的多個磁盤視為單一的虛擬磁盤(virtual disk)
所以其數據是以分段(block or segment)的方式順序存放在磁盤陣列中
如下圖:
數據按需要分段
從第一個磁盤開始放
放到最後一個磁盤再回到第一個磁盤放起
直到數據分布完畢
至於分段的大小視系統而定
有的系統或以
KB最有效率
或以
KB
或以
KB
甚至是
MB或
MB的
但除非數據小於一個扇區(sector
即
bytes)
否則其分段應是
byte的倍數
因為磁盤的讀寫是以一個扇區為單位
若數據小於
bytes
系統讀取該扇區後
還要做組合或分組(視讀或寫而定)的動作
浪費時間
從上圖我們可以看出
數據以分段於在不同的磁盤
整個陣列的各個磁盤可同時作讀寫
故數據分段使數據的存取有最好的效率
理論上本來讀一個包含四個分段的數據所需要的時間約=(磁盤的access time+數據的tranfer time)X
次
現在只要一次就可以完成
若以N表示磁盤的數目
R表示讀取
W表示寫入
S表示可使用空間
則數據分段的性能為:
R:N(可同時讀取所有磁盤)
W:N(可同時寫入所有磁盤)
S:N(可利用所有的磁盤
並有最佳的使用率)
Disk striping也稱為RAID
很多人以為RAID
沒有甚麼
其實這是非常錯誤的觀念
因為RAID
使磁盤的輸出入有最高的效率
而磁盤陣列有更好效率的原因除數據分段外
它可以同時執行多個輸出入的要求
因為陣列中的每一個磁盤都能獨立動作
分段放在不同的磁盤
不同的磁盤可同時作讀寫
而且能在快取內存及磁盤作並行存取(parallel access)的動作
但只有硬件的磁盤陣列才有此性能表現
從上面兩點我們可以看出
disk spanning定義了RAID的基本形式
提供了一個便宜
靈活
高性能的系統結構
而disk striping解決了數據的存取效率和磁盤的利用率問題
RAID
至RAID
是在此基礎上提供磁盤安全的方案
RAID
RAID
是使用磁盤鏡像(disk mirroring)的技術
磁盤鏡像應用在RAID
之前就在很多系統中使用
它的方式是在工作磁盤(working disk)之外再加一額外的備份磁盤(backup disk)
兩個磁盤所儲存的數據完全一樣
數據寫入工作磁盤的同時亦寫入備份磁盤
磁盤鏡像不見得就是RAID
如Novell Netware亦有提供磁盤鏡像的功能
但並不表示Netware有了RAID
的功能
一般磁盤鏡像和RAID
有二點最大的不同:
RAID
無工作磁盤和備份磁盤之分
多個磁盤可同時動作而有重疊(overlaping)讀取的功能
甚至不同的鏡像磁盤可同時作寫入的動作
這是一種最佳化的方式
稱為負載平衡(load
balance)
例如有多個用戶在同一時間要讀取數據
系統能同時驅動互相鏡像的磁盤
同時讀取數據
以減輕系統的負載
黾覫/O的性能
RAID
的磁盤是以磁盤延伸的方式形成陣列
而數據是以數據分段的方式作儲存
因而在讀取時
它幾乎和RAID
有同樣的性能
從RAID的結構就可以很清楚的看出RAID
和一般磁盤鏡像的不同
磁盤
A
A
A
B
磁盤
A
A
B
B
磁盤
A
A
A
B
磁盤
A
A
B
B
下圖為RAID
每一筆數據都儲存兩份:
從上圖可以看出:
R:N(可同時讀取所有磁盤)
W:N/
(同時寫入磁盤數)
S:N/
(利用率)
讀取數據時可用到所有的磁盤
充分發揮數據分段的優點;寫入數據時
因為有備份
所以要寫入兩個磁盤
其效率是N/
磁盤空間的使用率也只有全部磁盤的一半
很多人以為RAID
要加一個額外的磁盤
形成浪費而不看好RAID
事實上磁盤越來越便宜
並不見得造成負擔
況且RAID
有最好的容錯(fault tolerence)能力
其效率也是除RAID
之外最好的
我們可視應用的不同
在同一磁盤陣列中使用不同的RAID level
如華藝科技公司的OAraid系列都可同一磁盤陣列中定義八個邏輯磁盤(logic disk)
分別使用不同的RAID level
分為C:
D:及E:三個邏輯磁盤(或LUN
LUN
LUN
)
RAID
完全做到了容錯包括不停機(non
stop)
當某一磁盤發生故障
可將此磁盤拆下來而不影向其他磁盤的操作;待新的磁盤換上去之後
系統即時做鏡像
將數據重新復上去
RAID
在容錯及存取的性能上是所有RAID level之冠
在磁盤陣列的技術上
從RAID
到RAID
不停機的意思表示在工作時如發生磁盤故障
系統能持續工作而不停頓
仍然可作磁盤的存取
正常的讀寫數據;而容錯則表示即使磁盤故障
數據仍能保持完整
可讓系統存取到正確的數據
而SCSI的磁盤陣列更可在工作中抽換磁盤
並可自動重建故障磁盤的數據
磁盤陣列之所以能做到容錯及不停機
是因為它有冗余的磁盤空間可資利用
這也就是Redundant的意義
RAID
From:http://tw.wingwit.com/Article/program/Oracle/201311/16968.html