我們?cè)趺唇鉀Q機(jī)械硬盤(pán)既慢又容易壞的問(wèn)題疤孕?

我們使用的計(jì)算機(jī)的全稱叫電子計(jì)算機(jī),前面有電子兩個(gè)字央拖,這說(shuō)的是整個(gè)計(jì)算機(jī)中的核心元器件基本上都是電子單元組成的祭阀。但機(jī)械硬盤(pán)卻是一個(gè)特殊的例外,它更多是用機(jī)械技術(shù)做出來(lái)的一個(gè)產(chǎn)品鲜戒。當(dāng)把帶有機(jī)械技術(shù)基因的磁盤(pán)搭到計(jì)算機(jī)专控,尤其是再應(yīng)用到服務(wù)器領(lǐng)域的時(shí)候,暴露出了機(jī)械技術(shù)的兩個(gè)嚴(yán)重問(wèn)題:

  • 第一遏餐,速度慢伦腐。 如果把內(nèi)存和CPU的速度比作汽車和飛機(jī)的話,這個(gè)大哥毫秒級(jí)別的延遲幾乎就是牛車級(jí)別的失都。
  • 第二柏蘑,容易壞。 經(jīng)常聽(tīng)說(shuō)誰(shuí)誰(shuí)的磁盤(pán)壞了粹庞,很少有聽(tīng)說(shuō)過(guò)誰(shuí)的內(nèi)存條咳焚,CPU壞了。筆者就有在讀研期間實(shí)驗(yàn)室里正在拷貝資料信粮,突然一個(gè)斷電直接廢了一塊硬盤(pán)的經(jīng)歷黔攒。

要想保證服務(wù)器運(yùn)轉(zhuǎn)的穩(wěn)定和高速,就必須解決硬盤(pán)從娘胎里帶出來(lái)的這兩個(gè)缺陷。

多硬盤(pán)連接

問(wèn)題簡(jiǎn)單明了督惰,我們要解決速度慢不傅、容易壞兩個(gè)問(wèn)題。很自然赏胚,單兵作戰(zhàn)不行访娶,那我們就想到往上懟一個(gè)班,多塊硬盤(pán)一起上觉阅。但問(wèn)題是崖疤,假如給你N塊硬盤(pán),讓你來(lái)出一個(gè)技術(shù)方案典勇,你會(huì)怎么設(shè)計(jì)呢劫哼?

第一個(gè)方案就是,把一個(gè)文件分成N片割笙,每一片都散列在不同的硬盤(pán)上权烧。這樣當(dāng)文件進(jìn)行讀取的時(shí)候,就可以N塊硬盤(pán)一起來(lái)工作伤溉,從而達(dá)到讀取速度提高到N倍的效果般码,這就是RAID 0。

raid0

不過(guò)這個(gè)方案沒(méi)有解決容易壞的問(wèn)題乱顾,任何一塊硬盤(pán)壞了都會(huì)導(dǎo)致存儲(chǔ)系統(tǒng)故障板祝。

第二個(gè)方案就是,仍然把文件分片走净,但是所有的分片都存在一塊硬盤(pán)上券时,其它的硬盤(pán)只存拷貝。 這既提高了硬盤(pán)的訪問(wèn)速度温技,也解決了壞的問(wèn)題革为。任意一塊硬盤(pán)壞了,存儲(chǔ)系統(tǒng)都可以正常使用舵鳞,只不過(guò)速度會(huì)打一點(diǎn)折扣。

raid1

不過(guò)這個(gè)方案又帶來(lái)了新的問(wèn)題琢蛤,那就是實(shí)現(xiàn)成本有點(diǎn)高了蜓堕。假如我們用256G硬盤(pán)想實(shí)現(xiàn)512G的存儲(chǔ)容量的話,最少得需要4塊硬盤(pán)才能實(shí)現(xiàn)博其。

有沒(méi)有折中一點(diǎn)的方案呢套才?有,而且很多慕淡。我們這里只說(shuō)下最常見(jiàn)的raid5
RAID 5同樣要對(duì)文件進(jìn)行分片背伴,但是不對(duì)存儲(chǔ)的數(shù)據(jù)進(jìn)行備份,而是會(huì)再單獨(dú)存一個(gè)校驗(yàn)數(shù)據(jù)片。
假如文件分為A1 A2 A3傻寂,然后需要再存一個(gè)校驗(yàn)片到別的磁盤(pán)上息尺。這樣不管A1,A2還是A3那一片丟失了疾掰,都可以根據(jù)另外兩片和校驗(yàn)片合成出來(lái)搂誉。 既保證了數(shù)據(jù)的安全性,又只用了一塊磁盤(pán)做冗余存儲(chǔ)静檬。

raid5

假如我們有8塊256GB的硬盤(pán)炭懊,那么RAID5方案下的磁盤(pán)陣列從用戶角度來(lái)看可用的存儲(chǔ)空間是7*256GB,只“浪費(fèi)”了一塊盤(pán)的空間拂檩,所以目前RAID5應(yīng)用比較廣泛~~

Raid卡緩存

硬盤(pán)延遲是毫秒級(jí)別的侮腹,即使是多快硬盤(pán)并行,也只能提升數(shù)倍而已稻励,不能夠達(dá)到量級(jí)的提升凯旋。和CPU內(nèi)存的納秒級(jí)別工作頻率比起來(lái),還是太慢了钉迷。
在計(jì)算機(jī)界至非,沒(méi)有緩存解決不了的速度問(wèn)題,如果有糠聪,那就再加一層』耐郑現(xiàn)代磁盤(pán)本身也基本都帶了緩存,另外在一些比較新的raid卡里舰蟆,硬件開(kāi)發(fā)者們又搞出來(lái)了一層“內(nèi)存”趣惠,并且還自己附帶一塊電池,這就是RAID卡緩存身害。 我們看下幾款主流RAID卡的配置:

  • PERC S120 入門(mén)軟件陣列卡味悄,主板集成無(wú)緩存 支持RAID0 1
  • PERC H330 入門(mén)硬件RAID卡,無(wú)板載緩存, 支持RAID 0 1 5 10 50
  • PERC H730 主流硬件RAID卡帶有1G緩存和電池 支持RAID 0 1 5 6 10 50 60
  • PERC H730P 高性能硬件RAID卡帶有2G緩存和電池 支持RAID 0 1 5 6 10 50 60
  • PERC H830 同H730P,沒(méi)有內(nèi)置接口塌鸯,使用外置接口連接附加存儲(chǔ)磁盤(pán)柜用

拿目前服務(wù)器端出鏡率比較高的H730和H730P來(lái)看侍瑟,他們分別帶了1G和2G的緩存卡,并且自帶電池丙猬。 電池的作用就是當(dāng)發(fā)現(xiàn)主機(jī)意外斷電的時(shí)候涨颜,能夠快速把緩存中的數(shù)據(jù)寫(xiě)回到磁盤(pán)中去。對(duì)于寫(xiě)入茧球,一般操作系統(tǒng)寫(xiě)到這個(gè)RAID卡里就完事了庭瑰,所以速度快。對(duì)于讀取也是抢埋,只要緩存里有弹灭,就不會(huì)透?jìng)鞯酱疟P(pán)的機(jī)械軸上督暂。

另外想再補(bǔ)充說(shuō)一點(diǎn)的就是文件相關(guān)函數(shù)里設(shè)置DIRECT I/O僅僅只能繞開(kāi)操作系統(tǒng)本身的Page Cache,而RAID卡里的緩存,對(duì)于Linux來(lái)說(shuō)穷吮,可以說(shuō)算是一個(gè)黑盒逻翁。換句話說(shuō),就是操作系統(tǒng)并不清楚RAID卡是從緩存里吐的數(shù)據(jù)酒来,還是真正從硬盤(pán)里讀的卢未。

動(dòng)手查看你的RAID配置

了解了raid基本原理以后,我們可以實(shí)際動(dòng)手查看一下機(jī)器上的raid情況堰汉。這里拿我手頭的一臺(tái)服務(wù)器舉例辽社。
通過(guò)cat /proc/scsi/scsi,我們可以查看到raid卡的型號(hào)

Host: scsi10 Channel: 02 Id: 01 Lun: 00
  Vendor: DELL     Model: PERC H730 Mini   Rev: 4.27
  Type:   Direct-Access                    ANSI  SCSI revision: 05

可以看到我的這臺(tái)服務(wù)器raid卡使用的是PERC H730翘鸭, 這塊RAID卡帶有1G緩存和電池滴铅。

再看我們的硬盤(pán)陣列

# /opt/MegaRAID/MegaCli/MegaCli64  -LDInfo -Lall -aALL

Virtual Drive: 1 (Target Id: 1)
Name                :
RAID Level          : Primary-5, Secondary-0, RAID Level Qualifier-3
Size                : 1.633 TB
Sector Size         : 512
Is VD emulated      : No
Parity Size         : 278.875 GB
State               : Optimal
Strip Size          : 128 KB
Number Of Drives    : 7
Span Depth          : 1

RAID Level列標(biāo)明的就是當(dāng)前RAID組的RAIN級(jí)別。對(duì)照下面

  • RAID 1: Primary-1, Secondary-0, RAID Level Qualifier-0 RAID 1
  • RAID 0: Primary-0, Secondary-0, RAID Level Qualifier-0 RAID 0
  • RAID 5: Primary-5, Secondary-0, RAID Level Qualifier-3 RAID 5
  • RAID 10: Primary-1, Secondary-3, RAID Level Qualifier-0 RAID 10

可以看到就乓,本機(jī)RAID Level是RAID5汉匙。

另外Strip Size叫做條帶大小,我機(jī)器上的配置是128KB生蚁。假如有一個(gè)512KB的文件噩翠,它就會(huì)被分成4個(gè)條帶,每個(gè)128KB邦投。這些條帶可能會(huì)分散在不同的磁盤(pán)上伤锚,如果一次性讀取的話,多個(gè)硬盤(pán)就可以一起轉(zhuǎn)動(dòng)機(jī)械軸志衣,讀取速度就會(huì)提高到原來(lái)的數(shù)倍屯援。不過(guò)要說(shuō)明的是,如果文件小于這個(gè)條帶大小念脯,小于128K狞洋,那么RAID下的多塊硬盤(pán)對(duì)于該文件的讀取耗時(shí)也不會(huì)有幫助。

繼續(xù)查看組成RAID的所有的磁盤(pán)的狀況

#/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL

......
Drive's position: DiskGroup: 1, Span: 0, Arm: 0
Device Id: 1
...
Raw Size: 279.396 GB [0x22ecb25c Sectors]
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]
Coerced Size: 278.875 GB [0x22dc0000 Sectors]
Sector Size:  512
Logical Sector Size:  512
Physical Sector Size:  512
Inquiry Data: SEAGATE ST300MM0008     TT31S42310JR
...
...
...
Drive's position: DiskGroup: 1, Span: 0, Arm: 6
Device Id: 7
Raw Size: 279.396 GB [0x22ecb25c Sectors]
Non Coerced Size: 278.896 GB [0x22dcb25c Sectors]
Coerced Size: 278.875 GB [0x22dc0000 Sectors]

看到屬于DiskGroup 1的總共有7塊硬盤(pán)绿店,每塊的大小都是278GB左右吉懊。6塊盤(pán)的總?cè)萘看笮【褪?.6T左右,確實(shí)是只“浪費(fèi)”了一塊硬盤(pán)的容量來(lái)保障數(shù)據(jù)的安全性惯吕!

另外Inquiry Data也顯示了硬盤(pán)的制造商惕它,已經(jīng)型號(hào)。這些磁盤(pán)都是希捷的300G的機(jī)械硬盤(pán)废登,經(jīng)Google查詢其轉(zhuǎn)速為1萬(wàn)轉(zhuǎn)每分鐘。

本文小節(jié)

機(jī)械技術(shù)和電子技術(shù)比較起來(lái)郁惜,穩(wěn)定性要差很多堡距。所以機(jī)械背景出身的硬盤(pán)既慢又容易壞甲锡。為了解決這個(gè)問(wèn)題,RAID技術(shù)應(yīng)運(yùn)而生羽戒。通過(guò)一定的冗余原始存儲(chǔ)或者校驗(yàn)數(shù)據(jù)提供安全性的保障缤沦,通過(guò)增加帶電子基因的緩存,合理調(diào)度多塊磁盤(pán)的機(jī)械軸易稠,提高了磁盤(pán)IO的讀寫(xiě)速度缸废。在Linux下可以通過(guò)MegaCli工具來(lái)查看你的RAID組情況,強(qiáng)烈你建議實(shí)際動(dòng)手查看一下驶社!

歡迎搜索微信公眾號(hào):開(kāi)發(fā)內(nèi)功修煉

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末企量,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子亡电,更是在濱河造成了極大的恐慌届巩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件份乒,死亡現(xiàn)場(chǎng)離奇詭異恕汇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)或辖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)瘾英,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人颂暇,你說(shuō)我怎么就攤上這事缺谴。” “怎么了蟀架?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵瓣赂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我片拍,道長(zhǎng)煌集,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任捌省,我火速辦了婚禮苫纤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纲缓。我一直安慰自己卷拘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布祝高。 她就那樣靜靜地躺著栗弟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪工闺。 梳的紋絲不亂的頭發(fā)上乍赫,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天瓣蛀,我揣著相機(jī)與錄音,去河邊找鬼雷厂。 笑死惋增,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的改鲫。 我是一名探鬼主播诈皿,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼像棘!你這毒婦竟也來(lái)了稽亏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤讲弄,失蹤者是張志新(化名)和其女友劉穎措左,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體避除,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怎披,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓶摆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凉逛。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖群井,靈堂內(nèi)的尸體忽然破棺而出状飞,到底是詐尸還是另有隱情,我是刑警寧澤书斜,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布诬辈,位于F島的核電站,受9級(jí)特大地震影響荐吉,放射性物質(zhì)發(fā)生泄漏焙糟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一样屠、第九天 我趴在偏房一處隱蔽的房頂上張望穿撮。 院中可真熱鬧,春花似錦痪欲、人聲如沸悦穿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)栗柒。三九已至,卻和暖如春知举,著一層夾襖步出監(jiān)牢的瞬間傍衡,已是汗流浹背深员。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工负蠕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛙埂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓遮糖,卻偏偏與公主長(zhǎng)得像绣的,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子欲账,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354