作為一名DBA,選擇自己的數(shù)據(jù)存儲(chǔ)在什么上面,應(yīng)該是最基本的事情了。但是很多DBA卻容易忽略了這一點(diǎn),我就是其中一個(gè)。之前對(duì)raid了解的并不多,本文就記錄下學(xué)習(xí)的raid相關(guān)知識(shí)。

一、RAID的基礎(chǔ)知識(shí)

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

1、為什么要使用RAID?

我們知道,單塊磁盤(pán)無(wú)論是從性能上、容量上、還是安全上都存在單點(diǎn)問(wèn)題,如果把多塊硬盤(pán)組成一個(gè)group,當(dāng)成一個(gè)邏輯驅(qū)動(dòng)器,從而實(shí)現(xiàn)同時(shí)從多塊硬盤(pán)存取數(shù)據(jù),那樣可以提高了存儲(chǔ)的吞吐量,同時(shí)也提高了存取速度和擴(kuò)大存儲(chǔ)容量。

RAID(Redundant Array of Independent Disk 獨(dú)立冗余磁盤(pán)陣列)技術(shù)就是專(zhuān)門(mén)干這事的。RAID就是一種由多塊廉價(jià)磁盤(pán)構(gòu)成的冗余陣列,在操作系統(tǒng)下是作為一個(gè)獨(dú)立的大型存儲(chǔ)設(shè)備出現(xiàn)。RAID可以充分發(fā)揮出多塊硬盤(pán)的優(yōu)勢(shì),可以提升硬盤(pán)速度,增大容量,提供容錯(cuò)功能夠確保數(shù)據(jù)安全性,易于管理的優(yōu)點(diǎn),在任何一塊硬盤(pán)出現(xiàn)問(wèn)題的情況下都可以繼續(xù)工作,不會(huì)受到損壞硬盤(pán)的影響,這對(duì)于數(shù)據(jù)庫(kù)存儲(chǔ)領(lǐng)域是非常必要的。

2、RAID的幾種工作級(jí)別

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

  • RAID-0

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

移動(dòng)開(kāi)發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

  • RAID-1

        RAID-1采用鏡像(Mirroring)的方式冗余數(shù)據(jù)。RAID-1要求至少兩個(gè)或2xN個(gè)磁盤(pán),每次寫(xiě)數(shù)據(jù)時(shí)會(huì)同時(shí)寫(xiě)入鏡像盤(pán)。這種陣列可靠性很高,但其有效容量減小到總?cè)萘康囊话?,同時(shí)這些磁盤(pán)的大小應(yīng)該相等,否則總?cè)萘恐痪哂凶钚〈疟P(pán)的大小。RAID-1的數(shù)據(jù)安全性在所有的RAID級(jí)別上來(lái)說(shuō)是最好的。但是其磁盤(pán)的利用率卻只有50%,是所有RAID級(jí)別中最低的。

移動(dòng)開(kāi)發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

  • RAID-10

        由于RAID-0和RAID-1都存在明顯的優(yōu)點(diǎn)和缺點(diǎn),為了結(jié)合兩者的優(yōu)點(diǎn)、避免兩者的缺點(diǎn),從而產(chǎn)生了RAID-10,RAID-10適合用在速度需求高,又要完全容錯(cuò),當(dāng)然成本也很多的應(yīng)用。不過(guò)在做RAID-10時(shí)需要注意的是先做RAID-1,再做RAID-0還是先做RAID-0,再做RAID-1,二者還是有區(qū)別的。舉個(gè)栗子,假如現(xiàn)在有四塊磁盤(pán):

        先做RAID-0,再做RAID-1:每?jī)蓧K磁盤(pán)先做RAID-0,在此基礎(chǔ)上,再把兩個(gè)RAID-0做成RAID-1。這時(shí)如果A類(lèi)或者B類(lèi)磁盤(pán)同時(shí)有一個(gè)故障,整個(gè)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:每?jī)蓧K磁盤(pán)先做RAID-1,在此基礎(chǔ)上,再把兩個(gè)RAID-1做成RAID-0。這時(shí)只有A類(lèi)或者B類(lèi)磁盤(pán)兩個(gè)都故障時(shí),整個(gè)RAID才不可用。

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

綜合上面來(lái)看,先做RAID-1,再做RAID-0相對(duì)更安全,建議這種方式,所以我們平時(shí)說(shuō)的RAID-10就是先做RAID-1,再做RAID-0。

  • RAID-5

        RAID-5應(yīng)該處于RAID-0和RAID-1之間的一種工作模式,它盡量平衡RAID-0和RAID-1的優(yōu)點(diǎn)和缺點(diǎn),是我們平時(shí)使用比較多的一種模式。做RAID-5至少需要三塊磁盤(pán),它采用校驗(yàn)碼冗余數(shù)據(jù),校驗(yàn)信息分布在多個(gè)磁盤(pán)上,當(dāng)數(shù)據(jù)每次寫(xiě)入到磁盤(pán)上,同時(shí)還需要寫(xiě)入校驗(yàn)信息,因此寫(xiě)入性能相對(duì)不如RAID-0。當(dāng)某個(gè)磁盤(pán)出現(xiàn)故障,可以使用其他磁盤(pán)上校驗(yàn)信息來(lái)恢復(fù)數(shù)據(jù)。相對(duì)RAID-1,它磁盤(pán)空間利用率為(N-1)/N

移動(dòng)開(kāi)發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

3、RAID的幾種工作級(jí)別優(yōu)缺點(diǎn)

 移動(dòng)開(kāi)發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

【注】以上的高、中、低只是相對(duì)于RAID-0、RAID-1、RAID-10、RAID-5而言。

 

二、如何判斷RAID級(jí)別、寫(xiě)入策略、電池狀況

 1、判斷RAID級(jí)別:MegaCli64工具輸入磁盤(pán)信息如下:

移動(dòng)開(kāi)發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

[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-0Size                : 278.875 GB
Is VD emulated      : No
Mirror Data         : 278.875 GB
State               : Optimal
Strip Size          : 64 KBNumber Of Drives    : 2
Span Depth          : 1Default 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: NoBad 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-0Size                : 2.180 TB
Is VD emulated      : Yes
Mirror Data         : 2.180 TB
State               : Optimal
Strip Size          : 64 KBNumber Of Drives per span   : 2Span Depth          : 3Default 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: NoBad Blocks Exist: No
PI type: No PI

Is VD Cached: No

移動(dòng)開(kāi)發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

網(wǎng)上有人僅僅通過(guò)RAID Level列中的Primary-1, Secondary-0, RAID Level Qualifier-0來(lái)判斷,我認(rèn)為不是很準(zhǔn)確。先來(lái)了解下Primary、Secondary、RAID Level Qualifier啥意思?

Primary字段:基本上可以確定RAID的級(jí)別,但是無(wú)法區(qū)分是RAID-1和RAID-10,因?yàn)橛星闆r下他們的Primary值都是Primary-1, Secondary-0, RAID Level Qualifier-0

在這種情況下如何區(qū)分RAID-1和RAID-10?我認(rèn)為還得結(jié)合另外兩列進(jìn)行判斷:

Number Of Drives per span   : 2    #每個(gè)區(qū)段有2塊磁盤(pán)Span Depth                  : 3    #一共三個(gè)區(qū)段
結(jié)合primary-1,該RAID表示一共六塊磁盤(pán),每?jī)蓚€(gè)做RAID-1,最后將三個(gè)RAID-1做RAID-0

【總結(jié):如何判斷RAID級(jí)別】:

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

2) 至于RAID-1和RAID-10,還需要結(jié)合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寫(xiě)入策略和電池狀態(tài)

 

RAID的寫(xiě)入策略對(duì)IO性能有很大影響,有兩種寫(xiě)入策略:

WriteBack:表示寫(xiě)入到磁盤(pán)緩存上,寫(xiě)入性能好,如果采用此策略,RAID必須支持電池可用,否則一旦斷點(diǎn),數(shù)據(jù)將丟失。
WriteThrough:表示直接寫(xiě)入到硬盤(pán)上,寫(xiě)入性能沒(méi)有WriteBack好,一般沒(méi)有電池時(shí)采用此策略

2.1)查看RAID的寫(xiě)入策略

移動(dòng)開(kāi)發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

[root()@xxxx ~]# MegaCli64 -LDInfo -Lall -aALL|

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

  如果是這個(gè),表示采用WriteThrough策略

**********************************************************************************
Disk Cache Policy   : Disabled     #表示硬盤(pán)的cache,一般這里禁用,防止丟失數(shù)據(jù)

移動(dòng)開(kāi)發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

2.2)查看電池狀態(tài)

[root()@xxxx ~]# MegaCli64 -adpbbucmd -aall |grep -E  'Battery State|Charger Status|isSOHGood|Relative State of Charge'                        Battery State     : Operational  #電池狀態(tài),operational表示正在運(yùn)行
Relative State of Charge: 98 %   #電池電量,如果低于15%,那么寫(xiě)入策略會(huì)由WB轉(zhuǎn)變?yōu)閃C,IO性能下降,需要關(guān)注
Charger Status: Complete         #充電情況,表示已完成
isSOHGood: Yes                   #不是Yes需要關(guān)注

 

三、MySQL適合的RAID存儲(chǔ)方案

 通過(guò)上面對(duì)RAID的了解,我們已經(jīng)知道各級(jí)別RAID的優(yōu)缺點(diǎn),對(duì)于MySQL數(shù)據(jù)庫(kù)的存儲(chǔ),如何選擇RAID級(jí)別呢?

 我們可以根據(jù)MySQL各種文件類(lèi)型分別選擇,MySQL數(shù)據(jù)庫(kù)重要的文件類(lèi)型有:

1、數(shù)據(jù)文件(frm,ibd):存儲(chǔ)核心的數(shù)據(jù),非常重要,安全性要求高,同時(shí)需要頻繁的寫(xiě)入、更新數(shù)據(jù),磁盤(pán)性能要求也比較高,首先建議物理磁盤(pán)是SSD,對(duì)于RAID的選擇,如果預(yù)算足夠,建議RAID-10,其次是RAID-52、二進(jìn)制日志文件:寫(xiě)入非常頻繁,寫(xiě)性能要求高,由于從庫(kù)依賴(lài)該文件,安全性也很重要,綜合成本考慮,可以用兩塊SATA硬盤(pán),做成RAID-1即可。3、redo文件,共享表空間文件:安全性要求高,如果預(yù)算足夠,RAID-10,通常RAID-1也是可以的,一般而言,redo文件和共享表空間和數(shù)據(jù)文件存儲(chǔ)在一起即可。

 

 

http://www.cnblogs.com/mysql-dba/p/7120601.html