DOSTOR存儲(chǔ)在線11月2日國(guó)際報(bào)道:調(diào)節(jié)RAID(獨(dú)立磁盤冗余陣列)并不困難,你不需要專業(yè)服務(wù)也可以進(jìn)行。
圍繞高速緩存和高速緩存使用率有許多參數(shù),一些是明顯可以調(diào)節(jié)的針對(duì)RAID LUN(邏輯單元號(hào))的參數(shù)。這篇文章不是講述如何調(diào)整特定的RAID控制器,如果是那樣,你將需要花點(diǎn)時(shí)間來(lái)閱讀文檔,但是通過這篇文章,你可以在整體系統(tǒng)的I/O背景下考慮參數(shù)。每家廠商都有自己的命名和概念體系。由于沒有標(biāo)準(zhǔn)的定義,我會(huì)選擇我自己的定義標(biāo)準(zhǔn),你可以把它套用到一些特定廠商上。在調(diào)整RAID的時(shí)候你需要考慮的領(lǐng)域是:LUN創(chuàng)建和RAID水平,高速緩存調(diào)節(jié)和設(shè)置。
我們已經(jīng)有許多文章來(lái)討論如何判斷該使用什么樣的RAID水平,因此我們這里將討論如何調(diào)整RAID參數(shù)。如果你準(zhǔn)備通過設(shè)置RAID來(lái)優(yōu)化你的系統(tǒng),無(wú)論要設(shè)置的是個(gè)人電腦上的RAID控制器卡還是高端關(guān)鍵任務(wù)型企業(yè)級(jí)RAID陣列,通過這篇文章,你都可以很好的理解需要考慮哪些事情。
我們一開始先考慮你所擁有的RAID控制器的類型。如今,RAID控制器可以分成三類:
1. 企業(yè)級(jí)主動(dòng)/主動(dòng)型:這種類型的控制器允許你從任意主機(jī)寫入到任意LUN,同時(shí)對(duì)性能沒有影響。這些控制器通常有龐大的鏡像后的高速緩存(通常超過32GB),而控制器設(shè)計(jì)成可以熱插拔任意組件。這種控制器的連接目前主要是在光纖通道上,以后很快就會(huì)變成FCoE(以太網(wǎng)光纖通道)。
2. 中端主動(dòng)/被動(dòng)型:這種類型的控制器對(duì)每個(gè)LUN有兩面,一面是主動(dòng),也是主存儲(chǔ)路徑,一面是被動(dòng),用于故障復(fù)原。你通常可以將LUN在主存儲(chǔ)和故障復(fù)原之間進(jìn)行分割,甚至分割你的系統(tǒng)。高速緩存可以在控制器中進(jìn)行鏡像化操作,但是這些控制器不像企業(yè)級(jí)控制器那樣富有彈性。這類控制器的連接方式目前主要是光纖通道,以后很快會(huì)變成FCoE。
3. RAID控制器卡:這些是可以插入到PCIe的卡,通過SAS或SATA連接方式連接到驅(qū)動(dòng)器。這些卡沒有像中端或企業(yè)級(jí)控制器那樣強(qiáng)大的處理器,而且他們也不支持那么多的驅(qū)動(dòng)器。你不能故障復(fù)原到另一個(gè)控制器,而且你的系統(tǒng)只能在PCIe插槽和控制器卡上做文章。
許多RAID廠商只考慮他們自己的設(shè)備和存儲(chǔ)。他們某種程度上認(rèn)為存儲(chǔ)只是按順序從主機(jī)進(jìn)行分配,同時(shí)存儲(chǔ)只是按順序分配的裸設(shè)備。盡管這種觀點(diǎn)已經(jīng)有了某些改變,我仍然有時(shí)聽到一些奇怪的廠商言論說用戶只是使用裸設(shè)備,同時(shí)數(shù)據(jù)庫(kù)和文件一次性寫入系統(tǒng)。其實(shí),基于塊的文件系統(tǒng)并不是按順序分配數(shù)據(jù)。
RAID高速緩存調(diào)節(jié)和設(shè)置
RAID高速緩存調(diào)節(jié)可以分成三個(gè)方面:
·調(diào)節(jié)高速緩存,無(wú)論是先讀取的還是后寫入的;
·調(diào)節(jié)高速緩存塊大小;
·調(diào)節(jié)高速緩存鏡像(對(duì)中端控制器很重要);
先讀取和后寫入:你可能認(rèn)為先讀取和后寫入是一樣的,但是它們實(shí)際上很不同。
如果是先讀取方式——通過在磁盤上讀取順序塊,在請(qǐng)求前先讀取數(shù)據(jù)——它假設(shè)的是數(shù)據(jù)將被順序讀取,而且是分配在順序的塊地址上。RAID控制器不知道文件系統(tǒng)或數(shù)據(jù)的拓?fù)浠蚋窬?,它們知道的就是順序的塊地址,因此控制器I/O請(qǐng)求是針對(duì)順序的塊地址的。如果你的文件系統(tǒng)分配小于你的RAID條帶大小,同時(shí)如果同一時(shí)間兩個(gè)以上的文件被寫入,那么文件可能在這些RAID條帶內(nèi)分割。
例如,如果文件系統(tǒng)分配是64KB,而RAID 5 8+1條帶是512KB,同時(shí)多個(gè)文件正在被寫入,那么大多數(shù)RAID控制器做的就是讀取你所請(qǐng)求的數(shù)據(jù),在這種情況下是64KB,也許還有64KB,而如果你再次順序讀取,經(jīng)常會(huì)是整個(gè)條帶。另一方面,如果你只是讀取一個(gè)64KB的塊,而剩下的條帶有來(lái)自其他文件的數(shù)據(jù),那么先讀取這種方式只會(huì)給性能帶來(lái)不利影響。你要將RAID條帶和文件系統(tǒng)分配進(jìn)行匹配,同時(shí)要知曉有多少個(gè)文件正在被同時(shí)寫入,這樣你才能很好的理解先讀取對(duì)你的系統(tǒng)所可能帶來(lái)的影響。知道這一點(diǎn)可以讓你理解一些在RAID上進(jìn)行先讀取調(diào)整的方法。
后寫入——將塊讀取到高速緩存以便寫入——如果被寫入的數(shù)據(jù)符合RAID的條帶值,那么后寫入這種方式有很大的好處,因?yàn)樗跀?shù)據(jù)到達(dá)高速緩存的時(shí)候就可以讓寫入者確認(rèn)寫入。這里的關(guān)鍵是數(shù)據(jù)必須匹配RAID條帶。如果不匹配,那么RAID控制器必須進(jìn)行讀取修正寫入(讀取進(jìn)入條帶,根據(jù)新數(shù)據(jù)進(jìn)行修正,然后再寫入條帶),這種操作會(huì)帶來(lái)更大的系統(tǒng)開銷和延遲性。這種情況下RAID高速緩存的作用是隱藏?cái)?shù)據(jù)寫入到磁盤的延遲性并在數(shù)據(jù)到達(dá)高速緩存的時(shí)候就馬上顯示寫入。針對(duì)后寫入的調(diào)節(jié)經(jīng)常涉及到需要為寫入分配多少高速緩存空間,以及可以被讀取或?qū)懭氲淖钚「咚倬彺鎵K大小。
調(diào)節(jié)RAID高速緩存塊大小
高速緩存塊大小是數(shù)據(jù)可以被讀取到高速緩存的最小大小。例如,磁盤上的RAID分配是32KB,那么你可能認(rèn)為磁盤上的所有I/O都是32KB,但如果高速緩存塊大小是4KB,那么讀取和寫入磁盤的最小大小就是4KB,只有磁盤上的八分之一大小。如果你的文件系統(tǒng)分配和寫入請(qǐng)求比較大,那么小的高速緩存塊大小可能會(huì)降低RAID的性能,因?yàn)槲宜吹降腞AID在碰到小的塊的時(shí)候都會(huì)變得比較慢——RAID沒有足夠的CPU資源來(lái)管理所有的塊。隨著下一代RAID擁有更強(qiáng)勁的CPU,這種情況可能會(huì)慢慢消失,不過,如果數(shù)據(jù)和單個(gè)磁盤內(nèi)的RAID分配不匹配的話,設(shè)置小的高速緩存塊還是必要的。
如果你寫入小的請(qǐng)求而讀取大的請(qǐng)求,而且文件系統(tǒng)分配和RAID條帶一樣大,那么在多個(gè)寫入進(jìn)行順序分配的時(shí)候文件系統(tǒng)或許不會(huì)那么碎片化,同時(shí)先讀取這種方式可能比較好。另外,如果寫入比讀取大的話,先讀取也是有用的,因?yàn)樗械腞AID控制器可以按順序看到小的讀取。因此,在調(diào)整寫入的時(shí)候,你需要理解讀取請(qǐng)求相對(duì)于寫入請(qǐng)求的大小,并決定有多少文件被同時(shí)寫入。如果答案是每次進(jìn)行一個(gè)寫入,那么除非文件系統(tǒng)碎片化,數(shù)據(jù)很可能是順序分配的,這種情況下先讀取可能帶來(lái)很大的好處。另一方面,如果有多個(gè)文件被寫入,同時(shí)寫入大小和文件系統(tǒng)分配小于條帶大小,那么先讀取的價(jià)值就比較小,甚至沒有用??偠灾喝绻鄠€(gè)文件同時(shí)寫入,只有在寫入大小和文件分配等于或大于RAID條帶大小的情況下先讀取這種方式才有用。
調(diào)節(jié)針對(duì)鏡像的高速緩存
許多中端RAID控制器都有高速緩存鏡像功能,在企業(yè)級(jí)控制器中,所有的寫入都被鏡像??刂破鳙@取I/O請(qǐng)求后將請(qǐng)求寫入到另一半高速緩存以防備正在寫入的控制器的部分發(fā)生故障。如果數(shù)據(jù)和全條帶匹配,一些廠商有技術(shù)有辦法越過寫入高速緩存鏡像要求,不過,在使用寫入高速緩存鏡像的通用環(huán)境下,每個(gè)寫入請(qǐng)求都被寫入到高速緩存,然后在I/O請(qǐng)求得到確認(rèn)之前寫入到另一個(gè)高速緩存。寫入高速緩存鏡像因此通常會(huì)拖累性能,因?yàn)閷懭氲搅硪粋€(gè)高速緩存會(huì)帶來(lái)延遲性和帶寬要求,同時(shí)每個(gè)高速緩存必須作為另一個(gè)高速緩存的鏡像,因此你的可用的高速緩存空間因鏡像而減少一半。
如果讀取和寫入高速緩存有可調(diào)節(jié)的參數(shù),那么你可以根據(jù)工作負(fù)荷和可靠性要求調(diào)節(jié)這些參數(shù)。我經(jīng)常聽到的問題是用戶應(yīng)不應(yīng)該使用寫入高速緩存鏡像。答案取決于你需要多高的數(shù)據(jù)可靠性。比如說你寫入一個(gè)文件,將數(shù)據(jù)寫入到?jīng)]有進(jìn)行寫入高速緩存鏡像的系統(tǒng)。同時(shí),控制器的整個(gè)后端(從高速緩存到磁盤)發(fā)生故障。這時(shí)候,你的應(yīng)用程序被告知寫入已成功,但是數(shù)據(jù)實(shí)際上沒有到達(dá)磁盤。顯然,這種情況的發(fā)生概率很小,但是仍然是有可能的,我曾經(jīng)見到過這種情況。如果再給同一個(gè)文件進(jìn)行另一次寫入,你可能會(huì)看到I/O錯(cuò)誤,因?yàn)镽AID控制器在認(rèn)識(shí)到不能從高速緩存寫入到磁盤的時(shí)候會(huì)顯示錯(cuò)誤,或者RAID控制器會(huì)故障復(fù)原,寫入看起來(lái)仍然正常進(jìn)行和完成,但是文件實(shí)際上沒有獲得寫入,而應(yīng)用程序不知道這一點(diǎn)。文件沒有寫入不是好事,這也就是為什么許多系統(tǒng)默認(rèn)采用寫入高速緩存鏡像的原因。對(duì)寫入高速緩存鏡像的調(diào)節(jié)涉及決定為寫入節(jié)省多少高速緩存空間,同時(shí)你必須啟用寫入高速緩存鏡像。不管無(wú)記載數(shù)據(jù)損壞的概率有多低,你絕對(duì)不希望碰上這種情況。如果控制器故障,你幾乎不可能再找到壞數(shù)據(jù)或缺少的數(shù)據(jù)。
RAID控制器調(diào)節(jié)其實(shí)沒那么難,只要你了解一點(diǎn)有關(guān)應(yīng)用程序和RAID之間互動(dòng)的知識(shí)。如果多個(gè)文件同時(shí)被寫入而且文件系統(tǒng)分配比較小,先讀取方式經(jīng)常沒那么有用。這種糟糕情況的最明顯例子就是Windows上的NTFS。對(duì)于文件系統(tǒng)分配比較大的文件系統(tǒng),如果它們分配大小等于或大于RAID條帶大小,那么先讀取方式能帶來(lái)很大的好處。