DBA親,你們的RAID5陣列有保障嗎?

像教授發表於2017-11-26

很多人遇到過伺服器RAID5掛掉,往往掉一個盤後,第二個盤也立刻掛掉。

    引用:RAID 5也是以資料的校驗位來保證資料的安全,但它不是以單獨硬碟來存放資料的校驗位,而是將資料段的校驗位互動存放於各個硬碟上。這樣,任何一個硬碟損壞,都可以根據其它硬碟上的校驗位來重建損壞的資料。硬碟的利用率為n-1。如果掛掉兩個盤,資料就玩完了。
    理論上兩個硬碟同時失效的概率是很低的,但為什麼會這樣呢?
                                                                                  
    引用:從數學角度說,每個磁碟的平均無故障時間 (MTBF) 大約為 50 萬至 150 萬小時(也就是每 50150 年發生一次硬碟損壞)。實際往往不能達到這種理想的情況,在大多數散熱和機械條件下,都會造成硬碟正常工作的時間大幅減少。考慮到每個磁碟的壽命不同,陣列中的任何磁碟都可能出現問題,從統計學角度說,陣列中 N 個磁碟發生故障的機率比單個磁碟發生故障的機率要大 N 倍。結合上述因素,如果陣列中的磁碟數量合理,且這些磁碟的平均無故障時間 (MTBF) 較短,那麼在磁碟陣列的預期使用壽命過程中,就很有可能發生磁碟故障(比方說每幾個月或每隔幾年就會發生一次故障)
    兩塊磁碟同時損壞的機率有多大呢(“同時就是指一塊磁碟尚未完全修復時另一塊磁碟也壞掉了)?如果說 RAID 5 陣列的MTBF相當於MTBF^2,那麼這種機率為每隔10^15個小時發生一次(也就是1萬多年才出現一次),因此不管工作條件如何,發生這種情況的概率是極低的。從數學理論角度來說,是有這種概率,但在現實情況中我們並不用考慮這一問題。不過有時卻是會發生兩塊磁碟同時損壞的情況,我們不能完全忽略這種可能性,實際兩塊磁碟同時損壞的原因與MTBF基本沒有任何關係。
    對這種情況來說,這裡首先要引入一個一般人不常接觸到的概念:BER 硬碟誤位元速率,英文是BER(Bit Error Rate),是描述硬碟效能的一個非常重要的引數,是衡量硬碟出錯可靠性的一個引數。這個引數代表你寫入硬碟的資料,在讀取時遇到 不可修復的讀錯誤的概率。從統計角度來說也比較少見,一般來說是指讀取多少位後會出現一次讀取錯誤。
    隨著硬碟容量增加,驅動器讀取資料的誤讀率就會增加,而硬碟容量暴漲,誤位元速率的比例一直保持相對增加。一個1TB的驅動器是需要更多讀取整個驅動器,這是在RAID重建期間發生錯誤的概率會比300G 驅動器遇到錯誤的機率大。
    那這個錯誤的機率到底有多大呢?或者說,我們寫入多少GB資料,才會遇到1byte的讀取錯誤呢?看這篇文章:
http://lenciel.cn/docs/scsi-sata-reliability/

    對於不同型別的硬碟(以前企業級、伺服器、資料中心級硬碟用SCSI/光纖,商用、民用級別是IDE;現在對應的則是SAS/SATA
    他們的MRBF(平均無故障時間)是接近的,但是BER便宜的SATA硬碟要比昂貴的SCSI硬碟的誤位元速率(BER)要高得多。
    也就是說,出現某個sector無法讀取的情況,SATA要比SCSI嚴重得多。具體區別在韌體上:遇到讀取不過去,或者寫入不過去的壞道時,家用硬碟會花費1分鐘以上的時間去嘗試糾正錯誤,糾正不了就直接用備用扇區代替,這個時間超過陣列控制器能容忍的限度,所以遇到這種情況直接掉盤;企業級的磁碟會把這項工作放在後臺進行,不需要停頓1分鐘左右的時間,從而不影響陣列執行。在BER 硬碟誤位元速率上沒有任何區別。
 
    按照文中的計算,一個1TB的硬碟,通常你無法讀取所有sector的概率達到了56%,因此你用便宜的大容量SATA盤,在出現硬碟故障的情況下重建RAID的希望是:無法實現。
    用1TBSATA硬碟做RAID5的話,當你遇到一個硬碟失效的情況,幾乎剩下的兩個以上硬碟(RAID5最少組合是3個)鐵定會遇到一個硬碟讀取錯誤,從而重建失敗。
    所以,以前小硬碟做RAID5,基本很少遇到同時掛掉兩個盤的情況;現在硬碟大了,出問題的概率也越來越大了。
    對於跑RAID的使用者,對整個硬碟進行讀取的事情經常發生。即使系統足夠和諧,知道不對你報告那些出現在你從不讀取的檔案中的壞道,但是也只是略過了報告這一步:它還是會找到所有的壞道,56%就來了。還有所謂的監控專用企業級SATA,其原理就是在韌體上做手腳,讓硬碟即使遇到寫入的資料讀取錯誤,也不管三七二十一直接跳過,不再重試讀取(標準硬碟的讀取方式是遇到某個扇區CRC錯誤自動重新再去讀,直到讀到正確的資料為止)。這對監控資料來說是理所當然的(大多數監控的硬碟都是在不停地寫入,但是很少需要讀取),除非遇到出現問題需要重現影像時。
 
    現有的Raid5陣列的磁碟中有未檢測到的錯誤的話,Hot Spare沒辦法解決。Hot Spare只能在某個磁碟下線的時候,及時的替換下線的盤進行Raid重建,如果其他磁碟有錯誤的話,重建還是會可能失敗。
 
    解決方法還是要在陣列健康狀態下,進行定期或者其他方式的錯誤檢查。一般的硬體陣列卡,也就是插在主機板PCI/PCIX/PCIE/或者主機板整合的RAID5,壓根就沒資料巡檢(scrub)功能。企業級的資料儲存,也只有到盤陣級別(比如IBM DS3000/4000/5000DELL MD3000….etc)才有這類功能,但是你也看不到檢查的結果,最多能在日誌裡看到某個硬碟CRC失敗,然後跳紅燈掉出來,陣列櫃告警通知你換硬碟。你別想知道這個硬碟到底是徹底掛了呢,還是有讀取錯誤,還是有壞道。。。總之兩眼一抹黑。ZFS上的RAIDZ有資料巡檢(scrub)功能
 
   總結遇到RAID5一次掛掉倆盤的概率
1、使用越大容量的硬碟做RAID5,遇到BER 扇區的概率越大;比如用100G硬碟做RAID5就比用1TB的安全;
2、使用越多盤數的硬碟做RAID5,遇到BER 扇區的概率越大;比如用3個盤做的RAID5,比6個盤做的RAID5安全;
3、使用越便宜的硬碟做RAID5,遇到BER 扇區的概率越大;比如用SCSI/FC/SAS盤比用IDE/SATARAID5安全;
4、RAID5裡面存放的資料越多,塞得越滿,遇到BER 扇區的概率越大;比如存了100G資料的比存了1TB資料的RAID5安全;(REBUID時只讀取存過資料的扇區,某些卡則不管三七二十一要讀完整個盤)
 
   RAID1/RAID10參與重建的只有一個盤,raid5所有盤都需要參與重建相比,故障概率降低;RAID1 某一組磁碟故障,也不需要強制上線的操作,因為資料仍然存在,不需要組RAID也能讀取,哪怕是換到其他沒有raid卡的機器上資料仍能讀出;而RAID5如果不能強制第二個掉下的硬碟上線,你一點東西都讀不到。
   對於DB來說:做raid 1+0 是最好不過啦!(備份時必不可少的;RAID處理降級狀態時,如重要資料容量不大,建議先做備份,當然這種備份應該是異機的,不可備份至當前已降級的RAID中。如果在REBUILD當中出現另外硬碟離線的情況導致RAIDOFFLINE,切不可重建RAID,如確定後離線的硬碟,可通過強制上線恢復資料(有些控制器沒有選項,就沒辦法了)

 






本文轉自 位鵬飛 51CTO部落格,原文連結:http://blog.51cto.com/weipengfei/1006565,如需轉載請自行聯絡原作者


相關文章