MySQL數據庫Raid存儲方案


作為一名DBA,選擇自己的數據存儲在什么上面,應該是最基本的事情了。但是很多DBA卻容易忽略了這一點,我就是其中一個。之前對raid了解的並不多,本文就記錄下學習的raid相關知識。

一、RAID的基礎知識

【定義】RAID(Redundant Array of Independent Disk)是一種獨立冗余磁盤陣列。

1、為什么要使用RAID?

我們知道,單塊磁盤無論是從性能上、容量上、還是安全上都存在單點問題,如果把多塊硬盤組成一個group,當成一個邏輯驅動器,從而實現同時從多塊硬盤存取數據,那樣可以提高了存儲的吞吐量,同時也提高了存取速度和擴大存儲容量。

RAID(Redundant Array of Independent Disk 獨立冗余磁盤陣列)技術就是專門干這事的。RAID就是一種由多塊廉價磁盤構成的冗余陣列,在操作系統下是作為一個獨立的大型存儲設備出現。RAID可以充分發揮出多塊硬盤的優勢,可以提升硬盤速度,增大容量,提供容錯功能夠確保數據安全性,易於管理的優點,在任何一塊硬盤出現問題的情況下都可以繼續工作,不會受到損壞硬盤的影響,這對於數據庫存儲領域是非常必要的。

2、RAID的幾種工作級別

我們比較常用的RAID級別有RAID-0、RAID-1、RAID-10/RAID-01、RAID-5,其他的如RAID-3、RAID-4、RAID-6就不在此介紹了。

  • RAID-0

         RAID-0采用數據分條技術(Striped)把多塊磁盤串聯成一個更為龐大的磁盤組,可以提高磁盤的性能和吞吐量。它讀寫數據的速度是最快的,要求比較低,要求兩個磁盤即可做RAID-0,相對成本是最低的,但是RAID-0不提供冗余或奇偶校驗數據的功能,如果驅動器出現故障,數據將無法恢復,安全性最弱。一般只是在那些對性能要求高、數據安全性要求不高的情況下才被使用,不適合數據庫的存儲。

  • RAID-1

        RAID-1采用鏡像(Mirroring)的方式冗余數據。RAID-1要求至少兩個或2xN個磁盤,每次寫數據時會同時寫入鏡像盤。這種陣列可靠性很高,但其有效容量減小到總容量的一半,同時這些磁盤的大小應該相等,否則總容量只具有最小磁盤的大小。RAID-1的數據安全性在所有的RAID級別上來說是最好的。但是其磁盤的利用率卻只有50%,是所有RAID級別中最低的。

  • RAID-10

        由於RAID-0和RAID-1都存在明顯的優點和缺點,為了結合兩者的優點、避免兩者的缺點,從而產生了RAID-10,RAID-10適合用在速度需求高,又要完全容錯,當然成本也很多的應用。不過在做RAID-10時需要注意的是先做RAID-1,再做RAID-0還是先做RAID-0,再做RAID-1,二者還是有區別的。舉個栗子,假如現在有四塊磁盤:

        先做RAID-0,再做RAID-1:每兩塊磁盤先做RAID-0,在此基礎上,再把兩個RAID-0做成RAID-1。這時如果A類或者B類磁盤同時有一個故障,整個RAID將不可用。

(RAID 0) A = (Drive A1 + Drive A2) (Striped)
(RAID 0) B = (Drive B1 + Drive B2) (Striped)
(RAID-1)AB = (A +  B) (Mirrored)

       先做RAID-1,再做RAID-0:每兩塊磁盤先做RAID-1,在此基礎上,再把兩個RAID-1做成RAID-0。這時只有A類或者B類磁盤兩個都故障時,整個RAID才不可用。

(RAID-1) A = (Drive A1 + Drive A2) (Mirrored)
(RAID-1) B = (Drive B1 + Drive B2) (Mirrored)
(RAID-0)AB = (A +  B) (Striped)

綜合上面來看,先做RAID-1,再做RAID-0相對更安全,建議這種方式,所以我們平時說的RAID-10就是先做RAID-1,再做RAID-0

  • RAID-5

        RAID-5應該處於RAID-0和RAID-1之間的一種工作模式,它盡量平衡RAID-0和RAID-1的優點和缺點,是我們平時使用比較多的一種模式。做RAID-5至少需要三塊磁盤,它采用校驗碼冗余數據,校驗信息分布在多個磁盤上,當數據每次寫入到磁盤上,同時還需要寫入校驗信息,因此寫入性能相對不如RAID-0。當某個磁盤出現故障,可以使用其他磁盤上校驗信息來恢復數據。相對RAID-1,它磁盤空間利用率為(N-1)/N

3、RAID的幾種工作級別優缺點

 

【注】以上的高、中、低只是相對於RAID-0、RAID-1、RAID-10、RAID-5而言。

 

二、如何判斷RAID級別、寫入策略、電池狀況

 1、判斷RAID級別:MegaCli64工具輸入磁盤信息如下:

[root()@xxxx ~]# MegaCli64 -LdInfo -lAll -aALL
                                     
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0
Size                : 278.875 GB
Is VD emulated      : No
Mirror Data         : 278.875 GB
State               : Optimal
Strip Size          : 64 KB
Number Of Drives : 2 Span Depth : 1
Default Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disabled
Encryption Type     : None
Default Power Savings Policy: Controller Defined
Current Power Savings Policy: None
Can spin up in 1 minute: Yes
LD has drives that support T10 power conditions: Yes
LD's IO profile supports MAX power savings with cached writes: No
Bad Blocks Exist: No
PI type: No PI

Is VD Cached: No


Virtual Drive: 1 (Target Id: 1)
Name                :
RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0
Size                : 2.180 TB
Is VD emulated      : Yes
Mirror Data         : 2.180 TB
State               : Optimal
Strip Size          : 64 KB
Number Of Drives per span : 2 Span Depth : 3
Default Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disabled
Encryption Type     : None
Default Power Savings Policy: Controller Defined
Current Power Savings Policy: None
Can spin up in 1 minute: No
LD has drives that support T10 power conditions: No
LD's IO profile supports MAX power savings with cached writes: No
Bad Blocks Exist: No
PI type: No PI

Is VD Cached: No

網上有人僅僅通過RAID Level列中的Primary-1, Secondary-0, RAID Level Qualifier-0來判斷,我認為不是很准確。先來了解下Primary、Secondary、RAID Level Qualifier啥意思?

Primary字段:基本上可以確定RAID的級別,但是無法區分是RAID-1和RAID-10,因為有情況下他們的Primary值都是Primary-1, Secondary-0, RAID Level Qualifier-0

在這種情況下如何區分RAID-1和RAID-10?我認為還得結合另外兩列進行判斷:

Number Of Drives per span : 2 #每個區段有2塊磁盤 Span Depth : 3 #一共三個區段
結合primary-1,該RAID表示一共六塊磁盤,每兩個做RAID-1,最后將三個RAID-1做RAID-0

【總結:如何判斷RAID級別】:

1)  除了RAID-1和RAID-10,其他級別通過Primary字段值就可以判斷;

2) 至於RAID-1和RAID-10,還需要結合Number Of Drives (per span)、Span Depth兩列的值,如果Span Depth值為1表示為RAID-1,不為1表示RAID-10;還有一種情況:Primary-1, Secondary-3, RAID Level Qualifier-0也是表示RAID-10;

 

 

2、判斷RAID寫入策略和電池狀態

 

RAID的寫入策略對IO性能有很大影響,有兩種寫入策略:

WriteBack:表示寫入到磁盤緩存上,寫入性能好,如果采用此策略,RAID必須支持電池可用,否則一旦斷點,數據將丟失。
WriteThrough:表示直接寫入到硬盤上,寫入性能沒有WriteBack好,一般沒有電池時采用此策略

2.1)查看RAID的寫入策略

[root()@xxxx ~]# MegaCli64 -LDInfo -Lall -aALL|grep 'Cache Policy'
**********************************************************************************
Default Cache Policy: WriteBack, ReadAdaptive, Direct, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAdaptive, Direct, Write Cache OK if Bad BBU 
以上表示采用
WriteBack(回寫)策略,如果電池壞了也強制寫入cache

  Default Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU
  Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU

  如果是這個,表示采用WriteThrough策略

**********************************************************************************
Disk Cache Policy : Disabled #表示硬盤的cache,一般這里禁用,防止丟失數據

2.2)查看電池狀態

[root()@xxxx ~]# MegaCli64 -adpbbucmd -aall |grep -E  'Battery State|Charger Status|isSOHGood|Relative State of Charge'                        
Battery State     : Operational  #電池狀態,operational表示正在運行
Relative State of Charge: 98 %   #電池電量,如果低於15%,那么寫入策略會由WB轉變為WC,IO性能下降,需要關注
Charger Status: Complete         #充電情況,表示已完成
isSOHGood: Yes                   #不是Yes需要關注

 

三、MySQL適合的RAID存儲方案

 通過上面對RAID的了解,我們已經知道各級別RAID的優缺點,對於MySQL數據庫的存儲,如何選擇RAID級別呢?

 我們可以根據MySQL各種文件類型分別選擇,MySQL數據庫重要的文件類型有:

1、數據文件(frm,ibd):存儲核心的數據,非常重要,安全性要求高,同時需要頻繁的寫入、更新數據,磁盤性能要求也比較高,首先建議物理磁盤是SSD,對於RAID的選擇,如果預算足夠,建議RAID-10,其次是RAID-5

2、二進制日志文件:寫入非常頻繁,寫性能要求高,由於從庫依賴該文件,安全性也很重要,綜合成本考慮,可以用兩塊SATA硬盤,做成RAID-1即可。

3、redo文件,共享表空間文件:安全性要求高,如果預算足夠,RAID-10,通常RAID-1也是可以的,一般而言,redo文件和共享表空間和數據文件存儲在一起即可。

 

 

 

 

參考文章:

                  http://www.chinastor.com/a/jishu/raid/yes.html

                  http://blog.csdn.net/haiross/article/details/38557373

                  http://ju.outofmemory.cn/entry/92025

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM