作為一名 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ú)立冗余磁盤陣列。
1、為什么要使用 RAID?
我們知道,單塊磁盤無(wú)論是從性能上、容量上、還是安全上都存在單點(diǎn)問(wèn)題,如果把多塊硬盤組成一個(gè) group,當(dāng)成一個(gè)邏輯驅(qū)動(dòng)器,從而實(shí)現(xiàn)同時(shí)從多塊硬盤存取數(shù)據(jù),那樣可以提高了存儲(chǔ)的吞吐量,同時(shí)也提高了存取速度和擴(kuò)大存儲(chǔ)容量。
RAID(Redundant Array of Independent Disk 獨(dú)立冗余磁盤陣列) 技術(shù)就是專門干這事的。RAID 就是一種由多塊廉價(jià)磁盤構(gòu)成的冗余陣列,在操作系統(tǒng)下是作為一個(gè)獨(dú)立的大型存儲(chǔ)設(shè)備出現(xiàn)。RAID 可以充分發(fā)揮出多塊硬盤的優(yōu)勢(shì),可以提升硬盤速度,增大容量, 提供容錯(cuò)功能夠確保數(shù)據(jù)安全性,易于管理的優(yōu)點(diǎn),在任何一塊硬盤出現(xiàn)問(wèn)題的情況下都可以繼續(xù)工作,不會(huì)受到損壞硬盤的影響,這對(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)把多塊磁盤串聯(lián)成一個(gè)更為龐大的磁盤組,可以提高磁盤的性能和吞吐量。它讀寫數(shù)據(jù)的速度是最快的,要求比較低,要求兩個(gè)磁盤即可做 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ǔ)。
RAID-1
RAID-1 采用鏡像(Mirroring)的方式冗余數(shù)據(jù)。RAID-1 要求至少兩個(gè)或 2xN 個(gè)磁盤,每次寫數(shù)據(jù)時(shí)會(huì)同時(shí)寫入鏡像盤。這種陣列可靠性很高,但其有效容量減小到總?cè)萘康囊话耄瑫r(shí)這些磁盤的大小應(yīng)該相等,否則總?cè)萘恐痪哂凶钚〈疟P的大小。RAID-1 的數(shù)據(jù)安全性在所有的 RAID 級(jí)別上來(lái)說(shuō)是最好的。但是其磁盤的利用率卻只有 50%,是所有 RAID 級(jí)別中最低的。
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)在有四塊磁盤:
先做 RAID-0,再做 RAID-1:每?jī)蓧K磁盤先做 RAID-0,在此基礎(chǔ)上,再把兩個(gè) RAID-0 做成 RAID-1。這時(shí)如果 A 類或者 B 類磁盤同時(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磁盤先做 RAID-1,在此基礎(chǔ)上,再把兩個(gè) RAID-1 做成 RAID-0。這時(shí)只有 A 類或者 B 類磁盤兩個(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 至少需要三塊磁盤,它采用校驗(yàn)碼冗余數(shù)據(jù),校驗(yàn)信息分布在多個(gè)磁盤上,當(dāng)數(shù)據(jù)每次寫入到磁盤上,同時(shí)還需要寫入校驗(yàn)信息,因此寫入性能相對(duì)不如 RAID-0。當(dāng)某個(gè)磁盤出現(xiàn)故障,可以使用其他磁盤上校驗(yàn)信息來(lái)恢復(fù)數(shù)據(jù)。相對(duì) RAID-1,它磁盤空間利用率為 (N-1)/N
3、RAID 的幾種工作級(jí)別優(yōu)缺點(diǎn)
【注】以上的高、中、低只是相對(duì)于 RAID-0、RAID-1、RAID-10、RAID-5 而言。
二、如何判斷 RAID 級(jí)別、寫入策略、電池狀況
1、判斷 RAID 級(jí)別: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
網(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塊磁盤
Span Depth : 3 #一共三個(gè)區(qū)段
結(jié)合primary-1,該RAID表示一共六塊磁盤,每?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 寫入策略和電池狀態(tài)
RAID 的寫入策略對(duì) IO 性能有很大影響,有兩種寫入策略:
WriteBack:表示寫入到磁盤緩存上,寫入性能好,如果采用此策略,RAID必須支持電池可用,否則一旦斷點(diǎn),數(shù)據(jù)將丟失。
WriteThrough:表示直接寫入到硬盤上,寫入性能沒有WriteBack好,一般沒有電池時(shí)采用此策略。
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(回寫)策略,如果電池壞了也強(qiáng)制寫入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
如果是這個(gè),表示采用 WriteThrough 策略
Disk Cache Policy : Disabled #表示硬盤的cache,一般這里禁用,防止丟失數(shù)據(jù)
復(fù)制代碼
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%,那么寫入策略會(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 各種文件類型分別選擇,MySQL 數(shù)據(jù)庫(kù)重要的文件類型有:
1、數(shù)據(jù)文件(frm,ibd):存儲(chǔ)核心的數(shù)據(jù),非常重要,安全性要求高,同時(shí)需要頻繁的寫入、更新數(shù)據(jù),磁盤性能要求也比較高,首先建議物理磁盤是SSD,對(duì)于RAID的選擇,如果預(yù)算足夠,建議RAID-10,其次是RAID-5
2、二進(jìn)制日志文件:寫入非常頻繁,寫性能要求高,由于從庫(kù)依賴該文件,安全性也很重要,綜合成本考慮,可以用兩塊SATA硬盤,做成RAID-1即可。
3、redo文件,共享表空間文件:安全性要求高,如果預(yù)算足夠,RAID-10,通常RAID-1也是可以的,一般而言,redo文件和共享表空間和數(shù)據(jù)文件存儲(chǔ)在一起即可。
評(píng)論
查看更多