DBA親,你們的RAID5陣列有保障嗎?
很多人遇到過伺服器RAID5掛掉,往往掉一個盤後,第二個盤也立刻掛掉。
引用:RAID 5也是以資料的校驗位來保證資料的安全,但它不是以單獨硬碟來存放資料的校驗位,而是將資料段的校驗位互動存放於各個硬碟上。這樣,任何一個硬碟損壞,都可以根據其它硬碟上的校驗位來重建損壞的資料。硬碟的利用率為n-1。如果掛掉兩個盤,資料就玩完了。
理論上兩個硬碟同時失效的概率是很低的,但為什麼會這樣呢?
引用:從數學角度說,每個磁碟的平均無故障時間 (MTBF) 大約為 50 萬至 150 萬小時(也就是每 50~150 年發生一次硬碟損壞)。實際往往不能達到這種理想的情況,在大多數散熱和機械條件下,都會造成硬碟正常工作的時間大幅減少。考慮到每個磁碟的壽命不同,陣列中的任何磁碟都可能出現問題,從統計學角度說,陣列中 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;
那這個錯誤的機率到底有多大呢?或者說,我們寫入多少GB資料,才會遇到1byte的讀取錯誤呢?看這篇文章:
http://lenciel.cn/docs/scsi-sata-reliability/
對於不同型別的硬碟(以前企業級、伺服器、資料中心級硬碟用SCSI/光纖,商用、民用級別是IDE;現在對應的則是SAS/SATA;
他們的MRBF(平均無故障時間)是接近的,但是BER便宜的SATA硬碟要比昂貴的SCSI硬碟的誤位元速率(BER)要高得多。
也就是說,出現某個sector無法讀取的情況,SATA要比SCSI嚴重得多。具體區別在韌體上:遇到讀取不過去,或者寫入不過去的壞道時,家用硬碟會花費1分鐘以上的時間去嘗試糾正錯誤,糾正不了就直接用備用扇區代替,這個時間超過陣列控制器能容忍的限度,所以遇到這種情況直接掉盤;企業級的磁碟會把這項工作放在後臺進行,不需要停頓1分鐘左右的時間,從而不影響陣列執行。在BER 硬碟誤位元速率上沒有任何區別。
也就是說,出現某個sector無法讀取的情況,SATA要比SCSI嚴重得多。具體區別在韌體上:遇到讀取不過去,或者寫入不過去的壞道時,家用硬碟會花費1分鐘以上的時間去嘗試糾正錯誤,糾正不了就直接用備用扇區代替,這個時間超過陣列控制器能容忍的限度,所以遇到這種情況直接掉盤;企業級的磁碟會把這項工作放在後臺進行,不需要停頓1分鐘左右的時間,從而不影響陣列執行。在BER 硬碟誤位元速率上沒有任何區別。
按照文中的計算,一個1TB的硬碟,通常你無法讀取所有sector的概率達到了56%,因此你用便宜的大容量SATA盤,在出現硬碟故障的情況下重建RAID的希望是:無法實現。
用1TB的SATA硬碟做RAID5的話,當你遇到一個硬碟失效的情況,幾乎剩下的兩個以上硬碟(RAID5最少組合是3個)鐵定會遇到一個硬碟讀取錯誤,從而重建失敗。
所以,以前小硬碟做RAID5,基本很少遇到同時掛掉兩個盤的情況;現在硬碟大了,出問題的概率也越來越大了。
所以,以前小硬碟做RAID5,基本很少遇到同時掛掉兩個盤的情況;現在硬碟大了,出問題的概率也越來越大了。
對於跑RAID的使用者,對整個硬碟進行讀取的事情經常發生。即使系統足夠和諧,知道不對你報告那些出現在你從不讀取的檔案中的壞道,但是也只是略過了報告這一步:它還是會找到所有的壞道,56%就來了。還有所謂的監控專用企業級SATA,其原理就是在韌體上做手腳,讓硬碟即使遇到寫入的資料讀取錯誤,也不管三七二十一直接跳過,不再重試讀取(標準硬碟的讀取方式是遇到某個扇區CRC錯誤自動重新再去讀,直到讀到正確的資料為止)。這對監控資料來說是理所當然的(大多數監控的硬碟都是在不停地寫入,但是很少需要讀取),除非遇到出現問題需要重現影像時。
現有的Raid5陣列的磁碟中有未檢測到的錯誤的話,Hot Spare沒辦法解決。Hot Spare只能在某個磁碟下線的時候,及時的替換下線的盤進行Raid重建,如果其他磁碟有錯誤的話,重建還是會可能失敗。
解決方法還是要在陣列健康狀態下,進行定期或者其他方式的錯誤檢查。一般的硬體陣列卡,也就是插在主機板PCI/PCIX/PCIE/或者主機板整合的RAID5,壓根就沒資料巡檢(scrub)功能。企業級的資料儲存,也只有到盤陣級別(比如IBM DS3000/4000/5000,DELL 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/SATA的RAID5安全;
4、RAID5裡面存放的資料越多,塞得越滿,遇到BER 扇區的概率越大;比如存了100G資料的比存了1TB資料的RAID5安全;(REBUID時只讀取存過資料的扇區,某些卡則不管三七二十一要讀完整個盤)
RAID1/RAID10參與重建的只有一個盤,與raid5所有盤都需要參與重建相比,故障概率降低;RAID1 某一組磁碟故障,也不需要強制上線的操作,因為資料仍然存在,不需要組RAID也能讀取,哪怕是換到其他沒有raid卡的機器上資料仍能讀出;而RAID5如果不能強制第二個掉下的硬碟上線,你一點東西都讀不到。
對於DB來說:做raid 1+0 是最好不過啦!(備份時必不可少的;當RAID處理降級狀態時,如重要資料容量不大,建議先做備份,當然這種備份應該是異機的,不可備份至當前已降級的RAID中。如果在REBUILD當中出現另外硬碟離線的情況導致RAID卷OFFLINE,切不可重建RAID,如確定後離線的硬碟,可通過強制上線恢復資料(有些控制器沒有選項,就沒辦法了)
本文轉自 位鵬飛 51CTO部落格,原文連結:http://blog.51cto.com/weipengfei/1006565,如需轉載請自行聯絡原作者
相關文章
- 超全域性陣列有哪些?超全域性陣列有什麼作用?陣列
- 臨時工說: 他們說DBA 是IT 行業的職位的常青樹,你信嗎行業
- 親愛的程式設計師,你餓了嗎?程式設計師
- php定義常量陣列有幾種方式PHP陣列
- 你能充分信任Oracle DBA嗎?BNOracle
- 面試官:雙親委派模型你瞭解嗎?面試模型
- 各位Oracle DBA們,你們期待的線上實訓環境終於來了Oracle
- IP,PV ,UV 它們認識你,你認識它們嗎
- 15個 MySQL 基礎面試題,DBA 們準備好了嗎?MySql面試題
- Javascript建立陣列的方式你瞭解了嗎JavaScript陣列
- 你們都有在做演算法題嗎?演算法
- 你們公司做程式碼審查嗎?
- 你真的瞭解JS陣列的那些方法嗎?JS陣列
- 說說你對arguments的理解,它是陣列嗎?陣列
- Java列舉類,你們用對了嗎?Java
- 我們的陣列陣列
- 陣列有哪些方法支援響應式更新的?底層原理如何實現?陣列
- 陣列手撕堆,你學會了嗎?陣列
- 今年做小遊戲,你們賺到錢了嗎?遊戲
- 親愛的程式猿們怎麼找工作
- 陣列模擬雙連結串列,你get到了嗎?陣列
- 我們打算聊聊雲平臺的那些事,嘉賓們都來了,你不來嗎?
- 九成消失!成都的遊戲美術外包商,你們還好嗎?遊戲
- 有測試的小夥伴們,你們有啥微信技術交流群嗎,能拉我一下嗎。非常感謝
- 2019 - 微軟:嗨哥們,我能加入你們的發行版郵件列表嗎?微軟
- 陣列模擬單連結串列你會了嗎?陣列
- 2019年我們追過的jQuery,它的漏洞你知道嗎?jQuery
- 你是你喜歡的那種領導嗎?(2月讀書筆記《領袖們》)筆記
- 做Oracle DBA 自由職業的同志們,注意拉!!Oracle
- 保障 Google Play 的安全,我們一直在努力Go
- Python中的有序序列有哪些Python
- 你們發現ThinkSNS+ V0.8.9已悄悄釋出了嗎?
- 你知道我們平時在CSS中寫的%都是相對於誰嗎?CSS
- [譯] android應用開發者,你們真的瞭解Activity的生命週期嗎?Android
- [譯] android應用開發者,你們真的瞭解Fragment的生命週期嗎?AndroidFragment
- 親愛的專案經理,我恨你
- 親愛的專案經理 我恨你
- 當我們談微服務,我們在談什麼 (3) — 如何保障微服務的穩定性微服務