引子
送人玫瑰,手有余香。這個(gè)時(shí)代需要分享,有交流,有碰撞,才有進(jìn)步。今天我要分享的主題的是“存儲(chǔ)設(shè)備那點(diǎn)事”,這句話中需要高亮的關(guān)鍵詞是什么?是“存儲(chǔ)”?是“設(shè)備”?都不是,是“那點(diǎn)”。作為一個(gè)剛進(jìn)入存儲(chǔ)行業(yè)不到兩年的小學(xué)生,能力有限水平一般,全靠房貸的壓力走到今天。存儲(chǔ)涉及方方面面,受到能力和篇幅的限制,實(shí)在難以言盡。本文主要目的是讓大家對(duì)存儲(chǔ)方面有些感性的認(rèn)識(shí),沒(méi)有很深入的技術(shù)細(xì)節(jié)。讀者中肯定會(huì)有行業(yè)前輩、技術(shù)大牛、開(kāi)源社區(qū)達(dá)人、非洲部落的酋長(zhǎng),都保不齊的事,有不足之處還請(qǐng)多多批評(píng)指教。
說(shuō)到存儲(chǔ)設(shè)備,各位有些人可能會(huì)想起這些:磁帶,軟盤(pán),硬盤(pán),U盤(pán),以及早期街邊中年婦女兜售的光盤(pán)(都買過(guò)吧?隨著互聯(lián)網(wǎng)的發(fā)展,這個(gè)行業(yè)沒(méi)落了,唉!)。今天我們要說(shuō)的存儲(chǔ)設(shè)備比這些略顯高級(jí),但終究也沒(méi)有脫離它們。
我有一個(gè)1TB的移動(dòng)硬盤(pán),已經(jīng)差不多裝滿了,最近有些擔(dān)憂,萬(wàn)一哪次不小心摔在地上,可就報(bào)廢了,多年積攢的資料和回憶將付之東流,得想個(gè)辦法。那位說(shuō)了,為啥不存在云盤(pán)?坦誠(chéng)的講,我不太信任云盤(pán)服務(wù)商,不僅僅是局限于技術(shù)層面的不信任,誰(shuí)在乎他們是不是背鍋的。又有人給建議,整個(gè)RAID吧。對(duì),我們就從RAID說(shuō)起。
什么是RAID?
RAID的洋文描述是Redundant Array of Independent Disks,國(guó)語(yǔ)通常翻譯成:獨(dú)立磁盤(pán)冗余陣列。打仗親兄弟,上陣父子兵,一個(gè)硬盤(pán)可能出現(xiàn)種種問(wèn)題,RAID就是將一組硬盤(pán)通過(guò)各種組合,呈現(xiàn)出一個(gè)邏輯上的硬盤(pán),彌補(bǔ)一些單個(gè)硬盤(pán)的缺陷(如IO性能,數(shù)據(jù)保護(hù)),這個(gè)邏輯上的硬盤(pán)從用戶角度看來(lái)和單個(gè)硬盤(pán)使用方式幾乎一樣,對(duì)用戶透明。
總結(jié)起來(lái)一句話:基友一生一起走,單身的痛苦不再有。
RAID的等級(jí)
RAID的等級(jí)就是硬盤(pán)以何種形式組合在一起,比如:RAID 0、RAID 1、RAID10、RAID 01、RAID 3、RAID 5、RAID 6等等,很多,相聲演員可以寫(xiě)個(gè)貫口上臺(tái)表演了,這次就挑常見(jiàn)的說(shuō)幾個(gè)。
RAID0
最簡(jiǎn)單的RAID0由兩塊硬盤(pán)組成,如圖1所示,當(dāng)用戶寫(xiě)入數(shù)據(jù)的時(shí)候,例如數(shù)據(jù)塊A,實(shí)際上是將數(shù)塊A分為兩個(gè)部分,分別寫(xiě)入Disk1和Disk2,B、C、D是同樣的操作。可以看到,RAID0并沒(méi)有解決前面我遇到的問(wèn)題,Disk1或Disk2任何一塊盤(pán)壞了,保存的數(shù)據(jù)就會(huì)丟失,數(shù)據(jù)得不到保護(hù)。當(dāng)然,優(yōu)點(diǎn)也是顯然的,數(shù)據(jù)并行的寫(xiě)入兩塊盤(pán),花費(fèi)時(shí)間縮短了,理論上節(jié)省50%的時(shí)間,IO性能好。我們也可以使用更多的盤(pán)組成RAID0,那樣的話數(shù)據(jù)塊就會(huì)被分為更多分,并行寫(xiě)入多塊盤(pán),用時(shí)會(huì)更少。組成RAID0的各個(gè)硬盤(pán)地位是平等的,有任務(wù)兄弟們一起分擔(dān),沒(méi)有誰(shuí)的角色是特別的。
RAID1
你有我有全都有哇,哎嗨依兒呀,這就是那RAID1,不相信就往下看那。
只要2塊硬盤(pán)就可以組成一個(gè)RAID1,如圖2所示。RAID1的特點(diǎn)是用戶寫(xiě)入的數(shù)據(jù)塊會(huì)被同時(shí)寫(xiě)到組成RAID1的每一個(gè)硬盤(pán),這些硬盤(pán)保存的數(shù)據(jù)一模一樣。所以,其中一塊硬盤(pán)損壞了,不要害怕,另外一塊硬盤(pán)仍舊保存完整的數(shù)據(jù)。有人要問(wèn)了:”那要是兩塊硬盤(pán)都?jí)牧四兀俊保笥眩蹅兒煤昧奶煨袉幔勘举|(zhì)上RAID1是在做備份,我們不也經(jīng)常將電腦的文件拷貝到U盤(pán)或移動(dòng)硬盤(pán)備份嘛。只不過(guò)這個(gè)備份是實(shí)時(shí)的,用戶每寫(xiě)一個(gè)數(shù)據(jù)就立即備份。增加更多硬盤(pán)組成RAID1,也就增加備份數(shù)量,更保險(xiǎn),但需要花更多的錢買硬盤(pán),當(dāng)然,阿聰這樣的土豪另說(shuō)。
RAID3
在說(shuō)RAID3之前,先往回倒個(gè)三言兩語(yǔ)。前面的RAID0和RAID1的插圖中,每個(gè)硬盤(pán)都畫(huà)了一些小格子,保存A、B或A1、A2等。劃分這些小格子的行為稱為磁盤(pán)的條帶化(striping),又是一個(gè)新名詞,沒(méi)辦法,新的事物誕生總歸要取一個(gè)名字吧。早年間,管理論壇的人叫版主,維護(hù)博客的人叫博主。現(xiàn)在呢,建立微信群的人叫群主,建立并維護(hù)公眾號(hào)的人呢?公主?宋老師答應(yīng)嗎?
感受一下磁盤(pán)條帶化的效果,圖3所示,兩個(gè)盤(pán)沒(méi)有條帶化,用戶數(shù)據(jù)過(guò)來(lái)先寫(xiě)Disk1,寫(xiě)滿Disk1之后再寫(xiě)Disk2,看到這樣的RAID你有什么感受?既沒(méi)有使得IO性能得到提升,也沒(méi)有數(shù)據(jù)保護(hù)功能,然后冠冕堂皇包裝成RAID。誰(shuí)要是推銷這個(gè)RAID,作為有素質(zhì)的人,咱不能爆粗口,叫個(gè)代罵服務(wù)先罵他100塊錢的。
有人問(wèn)了(對(duì),就是前面問(wèn)問(wèn)題的那個(gè)人):“這個(gè)例子太極端,如果我有一個(gè)很大的文件,我可以計(jì)算出6~10部分最終會(huì)保存到Disk2內(nèi),那么我就可以并行的寫(xiě)入1~5到Disk1,6~10到Disk2”。如果Disk1是1TB的硬盤(pán),你的文件有多大?大于1TB,現(xiàn)實(shí)世界又有多少場(chǎng)景存在這么大的文件呢?
我們繼續(xù)。圖4展示了條帶化之后的磁盤(pán)格式,如果說(shuō)未經(jīng)過(guò)條帶化是以盤(pán)為單位存儲(chǔ)的,即一個(gè)盤(pán)寫(xiě)滿再寫(xiě)下一個(gè)盤(pán)。那么條帶化之后,則是按照條帶為單位存儲(chǔ)的,寫(xiě)滿一個(gè)條帶之后再寫(xiě)下一個(gè)條帶。RAID的各個(gè)盤(pán)的同樣區(qū)域(偏移位置和大小確定的區(qū)域)組成了一個(gè)條帶。
接著看RAID3,圖5所示。Disk4是與眾不同的,作為校驗(yàn)盤(pán),它不保存用戶數(shù)據(jù),而是保存用戶數(shù)據(jù)的校驗(yàn)值。Ap是A1、A2和A3的異或邏輯運(yùn)算校驗(yàn)值。同理Bp~Dp類似。這樣做的好處是:如果4塊盤(pán)有一塊盤(pán)壞了,我們可以從其它3塊盤(pán)讀出數(shù)據(jù),再次進(jìn)行異或邏輯運(yùn)算,計(jì)算出損壞盤(pán)的數(shù)據(jù),這一過(guò)程稱為數(shù)據(jù)重建。
舉個(gè)栗子:
假設(shè)初始A1=1,A2=0,A3=1,在存盤(pán)時(shí)候計(jì)算Ap=A1^A2^A2=1^0^1=0。
現(xiàn)在Disk3損壞,我們要計(jì)算A3,A3=A1^A2^Ap=1^0^0=1。得到了正確的A3!
考察一下RAID3特點(diǎn),其一,可以并行的寫(xiě)。其二,有校驗(yàn)盤(pán),允許一塊盤(pán)故障。其三,特別的,如果損壞的是校驗(yàn)盤(pán),不會(huì)影響此時(shí)用戶的讀操作。缺點(diǎn)也是有的,那就是用戶寫(xiě)數(shù)據(jù)的時(shí)候,不管是向哪一個(gè)數(shù)據(jù)盤(pán)寫(xiě)入數(shù)據(jù),都需要同時(shí)重寫(xiě)校驗(yàn)盤(pán),對(duì)于寫(xiě)操作頻繁的應(yīng)用,校驗(yàn)盤(pán)的負(fù)載很大,成為瓶頸。
那么,對(duì)于校驗(yàn)數(shù)據(jù)的保存這個(gè)費(fèi)時(shí)費(fèi)力的工作能否均衡一下呢?不能老可一個(gè)人霍霍啊。
RAID5
RAID5沒(méi)有獨(dú)立的校驗(yàn)盤(pán)。從下圖中找找Ap、Bp、Cp和Dp的位置,發(fā)現(xiàn)什么了嗎?對(duì),每個(gè)盤(pán)同時(shí)扮演數(shù)據(jù)盤(pán)和校驗(yàn)盤(pán),校驗(yàn)值寫(xiě)入這個(gè)負(fù)載就分?jǐn)偟矫總€(gè)盤(pán)上,前面RAID3遇到的校驗(yàn)盤(pán)瓶頸就不存在了。
當(dāng)一塊盤(pán)出現(xiàn)故障后,RAID將無(wú)法繼續(xù)提供服務(wù),一般情況,運(yùn)維人員會(huì)更換故障盤(pán),新盤(pán)到位后,RAID進(jìn)行數(shù)據(jù)重建,借助校驗(yàn)算法,將丟失的數(shù)據(jù)恢復(fù)到新的盤(pán)中,然后RAID可以繼續(xù)提供服務(wù)。一些系統(tǒng)中支持熱備盤(pán),當(dāng)RAID中一塊硬盤(pán)(Disk2)故障后,系統(tǒng)從熱備盤(pán)中選擇一塊(Disk5),頂替故障盤(pán)角色,然后RAID立即進(jìn)行數(shù)據(jù)重建,這樣就最大限度的減少了RAID停止服務(wù)的時(shí)間。沒(méi)錯(cuò),熱備盤(pán)就是備胎。
RAID5可以并行IO提升性能,數(shù)據(jù)校驗(yàn)起到數(shù)據(jù)保護(hù)作用,也不存在校驗(yàn)盤(pán)瓶頸,看起來(lái)不錯(cuò)。
有人問(wèn)了(對(duì),還是前面問(wèn)問(wèn)題的那個(gè)人):“如果同時(shí)有2塊盤(pán)故障怎么把辦?”
“那就用RAID6,可以容忍有2塊盤(pán)故障。”
“如果同時(shí)有3塊盤(pán)故障怎么把辦?”
喂,代罵公司嗎?我再加100塊錢,馬上過(guò)來(lái)罵個(gè)人。
對(duì)的,要蛋定。RAID雖然比單個(gè)硬盤(pán)有很多優(yōu)勢(shì),但也不是牛逼透頂?shù)模灿薪鉀Q不了的問(wèn)題,也有Hold不住的極端情況。
RAID6以及其它RAID形式就不再展開(kāi)了。您可以訪問(wèn)這里繼續(xù)深造:
https://en.wikipedia.org/wiki/Standard_RAID_levels
順便提一下,RAID發(fā)展后期出現(xiàn)了RAID2.0,一個(gè)不以單個(gè)盤(pán)為RAID組成基本單位的技術(shù)。
花開(kāi)兩朵,各表一枝。說(shuō)了這么多關(guān)于RAID的內(nèi)容,對(duì)于終端用戶呢?如何使用RAID呢?這是個(gè)問(wèn)題。用戶當(dāng)然可以買幾塊硬盤(pán)組成一個(gè)RAID,當(dāng)成“大硬盤(pán)”來(lái)使用,對(duì)于臺(tái)式機(jī)還可以忍受,機(jī)箱大隨便裝。那么,筆記本電腦用戶呢?沒(méi)地方裝啊。USB外接式?你很優(yōu)雅的走進(jìn)了星巴克,要了一杯咖啡,拿出高大上的蘋(píng)果電腦,傍邊的桌子上一堆硬盤(pán),你告訴別人別碰,說(shuō)是你的RAID?這是休閑呢還是擺攤呢。
這個(gè)世界上,只要有需求,哪怕變態(tài)的需求,都會(huì)有商家滿足你。想強(qiáng)身健體,有的商家就把中藥和酒混在一起,來(lái)吧,藥酒,可補(bǔ)可補(bǔ)了。
-
硬盤(pán)
+關(guān)注
關(guān)注
3文章
1311瀏覽量
57337 -
RAID
+關(guān)注
關(guān)注
0文章
278瀏覽量
35106 -
存儲(chǔ)設(shè)備
+關(guān)注
關(guān)注
0文章
164瀏覽量
18596
原文標(biāo)題:EMC潘國(guó)林: 大話存儲(chǔ)系列之磁盤(pán)娶親(RAID)
文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論