存儲痛點

存儲系統以保證數據可靠為首要任務,傳統單機存儲以極低成本對外提供存儲服務,但存在多處單點故障,可用性較低,擴展性差等問題。

隨後演化出支持SAS介面雙控雙活控制器架構,在一定程度上能夠避免單點故障,實現升級軟硬體時業務不感知,能夠保證可用性,但擴展性仍受到很大制約。

另外,以上兩種傳統存儲方案中,均存在重構耗時過長的隱患,以目前單盤最大容量14TB磁碟而言,在不影響業務的前提下,存儲單點故障後的重構時間將要以天計算,過大的重構時間窗口,出現高階故障的概率會增大,數據面臨風險也增大。

面對這些問題,為滿足擴展性、無單點故障、快速重構的需求,設計者用分散式架構讓更多的存儲伺服器參與到系統中,理論上它確實解決了以上問題,但均面臨磁碟系統的軟硬體故障,大規模分散式存儲系統雖然能夠快速處理單點故障,但單個存儲系統磁碟規模可到K級別,隨著業務的增長和磁碟壽命的衰減,單點故障成為常態,同時發生高階故障的概率也會逐漸遞增,給整個存儲系統的穩定性和可靠性帶來了挑戰。

監控磁碟系統的必要性

分散式存儲系統中,每個服務組件都有各自的監控邏輯,但都不涉及到OS層和硬體層面的監控。在業務層監控並處理底層異常,猶如隔靴撓癢,感知異常較滯後,有時在底層異常很長時間後,業務層才感知到,並且業務層預判異常,很容易出現誤判。

因此無論在傳統存儲中,還是在大規模分散式存儲中,都需要一套能提前感知和預判磁碟子系統軟硬體健康狀況的機制。一方面,生產環境的單個存儲集群擁有海量磁碟,當業務運行度過磁碟穩定期後,磁碟故障率會變大,同時也面臨質保過期的問題。因此能夠辨別磁碟故障類別,是可修復的異常,還是直接申請售後更換,都能節約一定成本;另一方面,在配合產品定義的數據冗餘特性,保證存儲可靠性的前提下,給自動化運維提供可信的數據支持,實現自動化快速處理異常。短期來看,它直接提高存儲的可用性和服務質量;長期來看,它讓整個存儲系統一直處於良好的健康狀態,並且減輕運維人員的工作量,以及分析處理異常的複雜度。

故障分類

硬體類

1)磁碟硬體故障:以單盤故障居多,極少會遇到批量磁碟硬體故障,故障影響範圍小,前提是軟體要及時處理該異常。

2)HBA卡硬體故障:影響整台伺服器的IO,故障影響範圍大,會觸發較多數據遷移。

軟體類

1) 磁碟固件bug:有批次問題,統計故障時,在某段時間內,同型號多塊磁碟發生故障,重啟後又可以正常工作,健康值良好,可和廠家確認是否是磁碟固件有缺陷。

2) 磁碟驅動異常處理邏輯缺失:磁碟驅動若沒及時處理異常,慢盤處理機制缺失,單盤異常可能夯死整台伺服器,無法重啟伺服器,很難定位到異常盤,對業務影響大。

3) 低效的scsi中間層錯誤處理邏輯:該邏輯適合桌面級應用中,不適合企業級存儲系統中,單盤異常可能會導致整台伺服器IO夯,體驗差,對業務影響大。

分析方法

一次異常不能認為該設備故障無法被繼續使用(如震動、溫度的影響),只有已經明確的故障,才能認為設備不可用,需替換。磁碟的好壞很難界定,所以一般用健康值去衡量磁碟是否可用,一般分良好、警告、錯誤,而健康值是個多維度給磁碟打分後的綜合值。

1. 硬體類異常: HBA的特定寄存器值異常、有硬體複位、PCIE寄存器異常都可以表明該HBA已經異常,磁碟的特定sense key可以表明磁碟是否為壞盤。

2. 軟體異常:磁碟iops和吞吐基本為0,利用率達到99%,某些異常sense key,表明磁碟有異常。

3. 常見影響磁碟健康值的因素:G表,重映射扇區數,CRC項,各類sense key,IO超時,最大IO延遲時間等。

處理方法

軟體層面優化:磁碟異常處理在磁碟驅動層實現,及時處理IO超時、IO錯誤、慢盤,完成磁碟異常修復。自己實現單盤異常處理邏輯,將單盤異常處理和系統隔離。

A) IO超時類:如果不是環境震動導致,說明磁碟本身有異常,可通知監控報警。

B) IO錯誤類:具體錯誤具體處理,部分錯誤可被scsi命令修復,而業務不感知。

C) 慢盤類:確認不是驅動bug導致,底層驅動最先感知到,可通知監控報警。

磁碟健康值打分維度:

A) smart信息中關鍵指標項、特定的sense key都可直接判定為壞盤。

B) smart中特性屬性值,IO延遲大和超時,可以設置磁碟警告。

C) 在業務低峰期時的磁碟短檢,隨機抽樣讀取數據,若有IO報錯,可設置警告

D) 離線時的磁碟長檢,可判定磁碟的健康狀態。

自動化運維處理

自動化運維目的是減輕運維人員的工作量和工作複雜度,提升集群服務質量和可用性。

通過給磁碟健康值評分後,業務監控層根據自己踢盤策略配置,在滿足上層數據冗餘條件下,在一定故障域配額下自動化完成集群移除磁碟操作,並主動觸發恢復,如果在恢復期間,再次發現異常盤,繼續根據踢盤策略決定是否移除磁碟。

當遇到超出配額的高階故障時,需要人工介入,確認故障類型後再做進一步處理。

總結

故障判定和自動化處理是個逐步完善的過程,需要對底層協議、內核、平台業務相關的有深入的理解。焱融雲以保障客戶數據為首要任務,在所有產品發布前,均進行大量線下故障模擬演練,並在生產環境中處理故障並得以驗證,積累了大量自動化運維經驗。以及在產品迭代中,不斷優化自動化運維機制,從而提升產品競爭力和客戶體驗。


推薦閱讀:
相关文章