存儲(chǔ)不需要很難,而且它一點(diǎn)兒都不難。如果你有這樣的疑問“我的存儲(chǔ)設(shè)備會(huì)不會(huì)讓我的數(shù)據(jù)受損啊?“那這時(shí)候你就開始你的擔(dān)心之旅了。作為一個(gè)存儲(chǔ)菜鳥,我愿意盡自己的微薄之力,去揭開目前用于存儲(chǔ)行業(yè),解決用戶問題的主要存儲(chǔ)技術(shù)的面紗。
某些存儲(chǔ)技術(shù)(如rsync,DFSR),在出現(xiàn)錯(cuò)誤的時(shí)候就會(huì)有數(shù)據(jù)損失的風(fēng)險(xiǎn)。在這種情況下,存儲(chǔ)技術(shù)的改變不可避免。新的技術(shù)往往被認(rèn)為是高可用性技術(shù),與被濫用的容錯(cuò)存儲(chǔ)技術(shù)可不同。
對(duì)于高可用設(shè)備來說,數(shù)據(jù)的損失是不可接受的?,F(xiàn)在我們要說的就是真正的容錯(cuò)。在存儲(chǔ)產(chǎn)品上,則包括RAID(或者ZFS)還有各種形式的集群。一個(gè)來自主要廠商的合適的存儲(chǔ)領(lǐng)域的網(wǎng)絡(luò)(SAN)可能會(huì)包括一種或多種技術(shù),有時(shí)還可以和用戶自己的技術(shù)強(qiáng)強(qiáng)聯(lián)合。
RAID(獨(dú)立磁盤冗余陣列)
RAID原來是相當(dāng)?shù)梦⒉蛔愕?,但是那段慘淡的歲月已經(jīng)過去了。RAID把多個(gè)硬盤集中到一個(gè)卷中,根據(jù)RAID的水平,實(shí)現(xiàn)相應(yīng)的應(yīng)對(duì)硬盤故障的能力??紤]到硬盤的大小(當(dāng)然也有其它因素),RAID5現(xiàn)在經(jīng)常出現(xiàn)在某些應(yīng)用中,而它的后繼者,RAID6,也馬上就要到來了。
當(dāng)然,我在這里要提一下致命的不可恢復(fù)讀取錯(cuò)誤(URE)。這個(gè)東西幾乎可以出現(xiàn)在你的任何硬盤中,而且硬盤自己偵測不到,控制器元件也檢查不出來。很多情況可以引發(fā)URE,有些你根本無能為力(比如宇宙射線的影響)。RAID技術(shù)可以讓你承受硬盤出現(xiàn)故障,但是如果你在重建過程中,在一個(gè)看起來“很好”的硬盤中,不巧碰到了URE,那你就慘了。
但這并不是世界末日,這個(gè)問題早已被人們熟知,人們針對(duì)它也研究了各種方法。你是不是會(huì)碰到URE,取決于你使用的硬盤的質(zhì)量。如果你使用低端的SATA硬盤,那你需要考慮采用RAID5,RAID0就算了(那樣絕對(duì)不安全),RAID6也可以考慮,但應(yīng)該作為臨時(shí)補(bǔ)丁直到你把數(shù)據(jù)轉(zhuǎn)移到更可靠的東西上。
生活中三大必然要發(fā)生的事:稅收,死亡,硬盤故障
硬盤的質(zhì)量越好——比如說SAS硬盤,或者光纖通道的硬盤——它們的URE率就越低。在你重建存儲(chǔ)系統(tǒng)時(shí),這些硬盤能顯著減少災(zāi)難性陣列故障的機(jī)會(huì),而且還會(huì)讓你的陣列使用壽命延長。一個(gè)好的硬件RAID控制器可以在RAID6中應(yīng)對(duì)URE,并在周圍做出標(biāo)注。在RAID6中,在同一時(shí)刻,在兩個(gè)硬盤中,在兩個(gè)標(biāo)注區(qū)域發(fā)生URE的幾率非常小。
這些高質(zhì)量的硬盤只會(huì)為我們服務(wù)一定的時(shí)間,更長的重建時(shí)間和更多的硬盤故障相關(guān)的問題都需要解決。陣列中的硬盤使用時(shí)間相同,都進(jìn)行同樣的工作,有相同的缺點(diǎn),出現(xiàn)故障也會(huì)成組出現(xiàn)。閃存也有自己的問題,無法拯救RAID??磥砦覀儗?duì)RAID的希望要放到接下來的10年里,那個(gè)時(shí)候或許會(huì)有設(shè)計(jì)完美的,用于企業(yè)級(jí)的RAID產(chǎn)品,也許還會(huì)有消費(fèi)級(jí)的產(chǎn)品出現(xiàn)呢。
來自Sun的ZFS
ZFS感覺像是由瘋子設(shè)計(jì)出來的文件系統(tǒng)。它還被認(rèn)為能取代RAID。它的真實(shí)的保證數(shù)據(jù)完整性的技術(shù)已經(jīng)遠(yuǎn)遠(yuǎn)超出了本文所要討論的范圍,但是據(jù)說它能承受三倍的硬盤故障,更能與URE血戰(zhàn)到底。它那幾乎如同魔法般的數(shù)據(jù)完整性保障能力使人們在使用ZFS時(shí)只需要注意一點(diǎn):在任何情況下,永遠(yuǎn)永遠(yuǎn)都不要對(duì)ZFS撒謊。
不要在虛擬磁盤(超級(jí)監(jiān)管程序創(chuàng)建的,ISCSI或FCoE)上使用ZFS,也不要在硬件RAID上使用。ZFS必須完全透明地控制硬件??梢允褂孟馰Mware“原始設(shè)備映射”那樣的功能,但要保證你映射的是本地硬盤。
一些管理員在無論什么樣的硬件RAID上運(yùn)行ZFS都禁止ZFS Intent Log,同時(shí)還配置硬件控制器忽略ZFS的刷新磁盤上數(shù)據(jù)的命令。這就可以讓RAID控制器決定硬盤的刷新,并且可以依靠電池來應(yīng)對(duì)電力中斷。
這是一種提升性能的調(diào)試策略,最終以IOPS來衡量。這種做法很常見,主要用在混合使用ZFS,NFS的系統(tǒng)中,NFS會(huì)要求系統(tǒng)在每次寫入后都刷新數(shù)據(jù),這和ZFS更高級(jí)的用于IOPS的算法和數(shù)據(jù)完整性平衡有沖突。其它的管理員——也包括我自己——并不贊同這種做法,因?yàn)樗艞壛薢FS保持?jǐn)?shù)據(jù)完整性的一些功能。如果對(duì)IPOS有要求,我更傾向于依賴使用了固態(tài)硬盤或NVRAM硬盤的混合存儲(chǔ)池。它可以更好地配置ZFS,也可以滿足NFS對(duì)數(shù)據(jù)寫入刷新的要求,同時(shí),還能使ZFS的保護(hù)機(jī)制完整。