1. RAID在數據庫存儲上的應用 -- 轉載

原文鏈接:http://www.cnblogs.com/seusoftware/p/3195594.html

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

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

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


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

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

 

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


3. RAID5
RAID 5 是一種數據安全、性能、容量、成本、可行性都相對兼顧的解決方案,正因此,類似的RAID2、RAID3、RAID4、RAID6很少得以實際應用。
RAID5需要3塊及以上的硬盤, 它不是對存儲的數據直接進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成陣列的各個磁盤上,簡單來說就是:任意壞掉一塊盤時,另外的N-1塊盤可以利用奇偶校驗信息,把這塊壞掉的磁盤上的數據恢復出來。
RAID 5可以理解爲是RAID 0和RAID 1的折衷方案,有和RAID 0相近似的數據讀取速度,有比RAID1低的容災能力(RAID5只允許一塊磁盤損壞),因爲多了奇偶校驗信息,寫入數據的速度比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時,通常選擇統一規格的磁盤,如果真的有不同空間大小、不同讀寫速度的磁盤,陣列系統會以空間小、速度低的爲標準,空間大、速度高的磁盤向下兼容。比如: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. 磁盤讀寫與數據庫的關係中有詳細的方法,但通常這個值是相對固定的,不需要重複計算,參考如下:

可以發現,同樣轉數,不同型號的單塊磁盤,IOPS都維持在一個類似的數量級。

2. RAID的IOPS計算
有了單塊磁盤的IOPS,那麼多塊磁盤的IOPS計算就很簡單了,比如,對於RAID0或者單純串聯磁盤(JBOD: just a bunch of disks)的存儲來說,10塊175 IOPS的磁盤的總IOPS就是10*175 = 1750 IOPS。
但是對於其他RAID級別並不是這樣,因爲RAID有多次寫IO的開銷存在,簡單來說就是:對RAID發起一次寫IO,RAID內部會有不止一次的寫IO發生,RAID內部的IO開銷如下:

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

假設用戶讀寫請求各一半(50%),同樣還是以10塊175 IOPS的磁盤爲例:
50% * 用戶總IO請求數 + N * (50% * 用戶總IO請求數) = 175 IOPS * 10

以RAID1爲例,那麼N = 2,上式變爲:1.5 *用戶總IO請求數 = 1750 IOPS
用戶總IO請求數 = 1167 IOPS 
這就是10塊175 IOPS的磁盤做了RAID1,所能提供的IOPS。

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

假設:選擇了175 IOPS的磁盤,做RAID1,系統讀寫比例爲60%:40%,系統需要達到2000 IOPS
問:要配置多少塊這樣規格的硬盤?

把上面的公式改爲通用公式:
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的磁盤)

可能有人會覺得,系統的讀寫請求比例,系統需要達到多少IOPS,並不知道,如果沒有前期測試的話,那麼只能根據經驗來估測了。

四. RAID在數據庫存儲上的應用
以SQL Server數據庫爲例,看下不同的RAID級別適用於什麼場景:
RAID0,由於沒有容災機制,很少被單獨使用。
有人提到過tempdb可以放在RAID0,因爲tempdb不用擔心丟數據,事實上tempdb故障了,SQL Server是不能正常運行的,所以這麼做是不推薦的,建議把tempdb當成用戶數據庫來對待;

RAID1,操作系統、SQL Server實例、日誌文件;
RAID5,數據文件,備份文件;
RAID10,所有類型都適用,不過考慮成本,通常不會全部使用RAID10。

 
 
分類: 磁盤存儲
標籤: SQL ServerIOPSRAID空間
綠色通道: 好文要頂 關注我 收藏該文與我聯繫 
12
0
 
(請您對文章做出評價)
 
« 上一篇:0. 磁盤讀寫與數據庫的關係
» 下一篇:0. 數據庫運維做些什麼
posted @ 2013-07-17 13:03 張騫 閱讀(718) 評論(16編輯 收藏
 
 
#1樓 2013-07-17 13:16 CareySon  
圖很不錯
#2樓[樓主2013-07-17 13:28 張騫  
@CareySon
排版沒做好
#3樓 2013-07-17 13:29 新手猿  
樓主是大牛啊~
#4樓 2013-07-17 13:37 _cc  
支持一下~~
#5樓 2013-07-17 17:48 害怕飛的鳥  
支持,關注,推薦。。。
#6樓 2013-07-17 21:15 Joe.TJ  
支持一下~
#7樓 2013-07-18 09:33 通用OA開發平臺  
對硬件底層技術有了解,才能做得更好!
#8樓 2013-07-18 22:43 全軒  
兄弟,你沒有實際測試過,不要誤導他人!
讀取和寫入的速度排序:
Raid0>Raid5>=raid10>raid1

基本條件,4塊硬盤. 10000轉SAS硬盤,單硬盤的讀200M/s,寫120M/s大致是這樣.
讀 寫
raid0的速度 = 4*200M/s 4*120M/s
raid10速度 = 2*200M/s 2*120M/s
raid5速度 =2.7*200M/s 2.7*120M/s(注意:理論上是3結果實測的結果一般是再2.7左右)
raid1速度 =1*200M/s 1*120M/s
#9樓[樓主2013-07-18 23:36 張騫  
@全軒
通常raid5 raid10用來放數據文件,隨機訪問,讀IOPS raid5略低於raid10,寫IOPS raid5比raid10要少一半
#10樓 2013-07-18 23:40 全軒  
@張騫
測試了再來說這個問題,我最近剛好在弄數據庫,都是實測的數據. 難道我測試的實際數字會騙人?
#11樓[樓主2013-07-19 08:54 張騫  
@全軒
把IOPS和吞吐量理解清楚了,在做測試,要不然太盲目了 :)
#12樓 2013-07-19 10:07 全軒  
@張騫
假設都用4塊磁盤,RAID0,RAID1,RAID5,RAID10在多線程/多CPU情況下,都可以同時讀取多塊磁盤,讀的性能都很不錯;
寫的性能依次遞減,大致是:RAID0 > RAID10 > RAID1 > RAID5。
這個是不是你說的,你說的是讀性能,寫性能.
切,又扯到iops.哎! 
你不管是說iops還是什麼,最終的目的不就是想說明,學些性能嘛?
iops的問題只是想說明,磁盤讀寫時的io開銷問題,進而還不是想證明讀寫能力嘛?
那麼讀寫能力以最終的吞吐量來決定又有多少不合理?在說了,現在的raid卡一般都自身帶512m或者1g或者更大的緩存,讀寫的命中率已經不是你給出的50%的可能性了. 公式啥的沒錯(也可以說是有錯的,因爲raid卡大量高速緩存已經使得磁盤讀寫的次數不是按照這個公式來計算iops的),關鍵還得看最終的結果.
#13樓[樓主2013-07-19 12:53 張騫  
@全軒
對於需要大塊讀寫的系統來講吞吐量是很重要的,比如日誌文件,數據倉庫,不過OLTP系統都是小塊的頻繁操作,IOPS是更好的衡量標準,還有就是吞吐量的大小也是要看chunk size的,再就是你說的緩存機制,raid5更依賴緩存,而raid10緩存很小也可以性能很好,這是因爲不同raid有不同內部寫開銷的存在。
#14樓 2013-07-19 13:33 全軒  
@張騫
這個我是理解的,是明白的,也是贊同的. 謝謝!
看到你這個文章了,剛好最近近了一批服務器,做了各方面的測試,僅僅只是一個探討,沒有其它意思,我們考慮的重點不太相同.
#15樓 2013-07-20 19:40 樺仔  
關於數據庫服務器raid10與raid5的選擇
http://wenku.baidu.com/view/60c8c066783e0912a2162ae6.html###
raid01:4個硬盤實際上相當於兩個硬盤一個硬盤壞了,所屬條帶的那個硬盤也不能用了
raid10:4個硬盤就是4個硬盤,互相鏡像


raid選擇:
raid5:大型文件存儲,數據倉庫,OLAP
raid10:小IO數據庫,OLTP

寫操作頻繁的數據庫使用RAID10陣列

讀操作頻繁的數據庫使用RAID5陣列

事務日誌是寫操作始終很頻繁的文件
tempdb數據庫也放在RAID10陣列 放在與事務日誌文件所在陣列不同的另一個RAID10陣列上

Windows2003以及以下版本沒有正確對齊分區,這會導致磁盤子系統的性能達不到最理想水平
使用diskpart創建分區來解決這個問題


你在數據庫裏面應當始終至少有兩個文件組。第一個文件組包括表,第二個組包括索引
#16樓 2013-07-20 19:43 樺仔  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章