RAID在數(shù)據(jù)庫存儲上的應用

今日頭條
cpp軟件架構獅
隨著單塊磁盤在數(shù)據(jù)安全、性能、容量上呈現(xiàn)出的局限,磁盤陣列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出現(xiàn)了,RAID把多塊獨立的磁盤按不同的方式組合起來,形成一個磁盤組,以獲得比單塊磁盤...

隨著單塊磁盤在數(shù)據(jù)安全、性能、容量上呈現(xiàn)出的局限,磁盤陣列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出現(xiàn)了,RAID把多塊獨立的磁盤按不同的方式組合起來,形成一個磁盤組,以獲得比單塊磁盤更高的數(shù)據(jù)安全、性能、容量。

一.常見的RAID級別

RAID有RAID0~RAID7幾種級別,另外還有一些復合的RAID模式,比如:RAID10、RAID01、RAID50、RAID53。

常用的RAID模式有RAID0、RAID1、RAID5、RAID10。

1.RAID0

RAID0也就是常說的數(shù)據(jù)條帶化(Data Stripping),數(shù)據(jù)被分散存放在陣列中的各個物理磁盤上,需要2塊及以上的硬盤,成本低,性能和容量隨硬盤數(shù)遞增,在所有的RAID級別中,RAID 0的速度是最快的,但是RAID 0沒有提供冗余或錯誤修復能力,如果一個磁盤(物理)損壞,則所有的數(shù)據(jù)都無法使用。

對于有容災模式的RAID陣列,某塊磁盤損壞時,只要換上新的硬盤即可,陣列系統(tǒng)會自動同步數(shù)據(jù)到新的硬盤。(不支持熱插拔的話,需要先關機再開機)

2.RAID1

RAID1也就是常說的數(shù)據(jù)鏡像(Data Mirroring),2塊及以上的硬盤(偶數(shù)個),被分為2組,數(shù)據(jù)在每組磁盤中各有一份,若其中一組有磁盤損壞,另一組可以保證數(shù)據(jù)訪問不會中斷。RAID1同RAID0一樣,有很好的讀取速度,但是寫的速度,有所下降。

3.RAID5

RAID 5是一種數(shù)據(jù)安全、性能、容量、成本、可行性都相對兼顧的解決方案,正因此,類似的RAID2、RAID3、RAID4、RAID6很少得以實際應用。

RAID5需要3塊及以上的硬盤,它不是對存儲的數(shù)據(jù)直接進行備份,而是把數(shù)據(jù)和相對應的奇偶校驗信息存儲到組成陣列的各個磁盤上,簡單來說就是:任意壞掉一塊盤時,另外的N-1塊盤可以利用奇偶校驗信息,把這塊壞掉的磁盤上的數(shù)據(jù)恢復出來。

RAID 5可以理解為是RAID 0和RAID 1的折衷方案,有和RAID 0相近似的數(shù)據(jù)讀取速度,有比RAID1低的容災能力(RAID5只允許一塊磁盤損壞),因為多了奇偶校驗信息,寫入數(shù)據(jù)的速度比RAID1慢。

4.RAID10

RAID10,名稱上便可以看出是RAID0與RAID1的結合體,顯然需要至少4塊磁盤。不過,先RAID0后RAID1,還是先RAID1后RAID0,是不一樣的。

RAID01,是先做RAID0,然后對2組RAID0再做RAID1,假設此時某個RAID0壞掉一塊磁盤,這個RAID0隨即不可用,所有的IO全部指向剩下的那個RAID0;

RAID10,是先做RAID1,然后對2組RAID1再做RAID0,假設此時某個RAID1壞掉一塊磁盤,當前RAID1仍然能提供服務,并且另一個RAID1也同時可以壞掉一塊磁盤。

所以,我們通常選擇RAID10,而不是RAID01。

5.不同RAID級別的讀寫性能

假設都用4塊磁盤,RAID0,RAID1,RAID5,RAID10在多線程/多CPU情況下,都可以同時讀取多塊磁盤,讀的性能都很不錯;

寫的性能(IOPS)依次遞減,大致是:RAID0>RAID10>RAID1>RAID5。

二.RAID的空間計算

在做RAID時,通常選擇統(tǒng)一規(guī)格的磁盤,如果真的有不同空間大小、不同讀寫速度的磁盤,陣列系統(tǒng)會以空間小、速度低的為標準,空間大、速度高的磁盤向下兼容。比如:100G,50G的2塊磁盤做RAID0,得到的空間為50G*2=100G。

RAID的空間計算公式:

RAID0的空間:Disk Size*N

RAID1的空間:(Disk Size*N)/2

RAID5的空間:((N-1)/N)*(Disk Size*N)=(N-1)*Disk Size

RAID10的空間:(Disk Size*N/2)/2+(Disk Size*N/2)/2=(Disk Size*N)/2

假設都用4塊磁盤,每塊磁盤都為100G

RAID0的空間:100G*4=400G

RAID1的空間:(100G*4)/2=200G

RAID5的空間:(4-1)*100G=300G

RAID10的空間:(100G*4)/2=200G

三.RAID的IOPS計算

1.單塊硬盤的IOPS是固定的

關于單塊磁盤IOPS的計算,在”0.磁盤讀寫與數(shù)據(jù)庫的關系”中有詳細的方法,但通常這個值是相對固定的,不需要重復計算,參考如下:

可以發(fā)現(xiàn),同樣轉(zhuǎn)數(shù),不同型號的單塊磁盤,IOPS都維持在一個類似的數(shù)量級。

2.RAID的IOPS計算

有了單塊磁盤的IOPS,那么多塊磁盤的IOPS計算就很簡單了,比如,對于RAID0或者單純串聯(lián)磁盤(JBOD:just a bunch of disks)的存儲來說,10塊175 IOPS的磁盤的總IOPS就是10*175=1750 IOPS。

但是對于其他RAID級別并不是這樣,因為RAID有多次寫IO的開銷存在,簡單來說就是:對RAID發(fā)起一次寫IO,RAID內(nèi)部會有不止一次的寫IO發(fā)生,RAID內(nèi)部的IO開銷如下:

從圖中得到公式:用戶讀IO+N*用戶寫IO=總IOPS(N就是RAID內(nèi)部的IO開銷次數(shù))

假設用戶讀寫請求各一半(50%),同樣還是以10塊175 IOPS的磁盤為例:

50%*用戶總IO請求數(shù)+N*(50%*用戶總IO請求數(shù))=175 IOPS*10

以RAID1為例,那么N=2,上式變?yōu)椋?.5*用戶總IO請求數(shù)=1750 IOPS

用戶總IO請求數(shù)=1167 IOPS

這就是10塊175 IOPS的磁盤做了RAID1,所能提供的IOPS。

3.RAID的IOPS計算在現(xiàn)實中的應用

在實際使用中,我們通常不是計算現(xiàn)有RAID的IOPS,而是反過來:選擇好磁盤規(guī)格,RAID模式,測試出系統(tǒng)的讀寫比例,系統(tǒng)需要達到的IOPS,然后看看,需要多少塊硬盤來完成陣列,才能達到這樣的IOPS需求?

假設:選擇了175 IOPS的磁盤,做RAID1,系統(tǒng)讀寫比例為60%:40%,系統(tǒng)需要達到2000 IOPS

問:要配置多少塊這樣規(guī)格的硬盤?

把上面的公式改為通用公式:

reads*Workload_IOPS+writes_impact*(writes*Workload_IOPS)=175*M

60%*2000+2*(40%*2000)=175*M

M=16(也就是說,要達到指定的2000 IOPS,RAID1需要配置16塊175 IOPS的磁盤)

可能有人會覺得,系統(tǒng)的讀寫請求比例,系統(tǒng)需要達到多少IOPS,并不知道,如果沒有前期測試的話,那么只能根據(jù)經(jīng)驗來估測了。

四.RAID在數(shù)據(jù)庫存儲上的應用

以SQL Server數(shù)據(jù)庫為例,看下不同的RAID級別適用于什么場景:

RAID0,由于沒有容災機制,很少被單獨使用。

有人提到過tempdb可以放在RAID0,因為tempdb不用擔心丟數(shù)據(jù),事實上tempdb故障了,SQL Server是不能正常運行的,所以這么做是不推薦的,建議把tempdb當成用戶數(shù)據(jù)庫來對待;

RAID1,操作系統(tǒng)、SQL Server實例、日志文件;

RAID5,數(shù)據(jù)文件,備份文件;

RAID10,所有類型都適用,不過考慮成本,通常不會全部使用RAID10。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論