Disk 由於晶圓問題、firmware 問題、driver 問題等等會造成一定機率上的故障。假如一塊硬碟每天的故障機率是 1%,那麼一座有一萬個 disk 的資料中心,每天可能會有 100 塊硬碟損壞。當然,vSAN 對於部分類型的損壞會嘗試自動修復,這樣能大幅減少人力成本,畢竟大部分問題重開機就能解決。
LSOM 是最底層與硬碟打交道的元件,它的 DDH(Degraded Device Handling)服務可以監控硬碟狀態。當 DDH 偵測到 Disk 即將故障或損壞時,會將 Disk 標記為有問題的裝置,讓它不再參與資料的 I/O 流程。更多細節可以參考 VMware KB:https://kb.vmware.com/s/article/2148358
這裡列舉 vSAN 偵測到的硬碟狀態及其原因:
PDL
Permanent Disk Loss (PDL) 是一種嚴重的錯誤,需要人工介入。一般情況下是 Host 與 Disk 的連結出了問題,無法連接。可能是 ESXi Host 內部或 Disk 的 bug 導致的。
Transient Error
這種錯誤可以藉由多次 I/O 重試修復。一般是由於 ESXi Host 內部或 SCSI 的 bug,例如 I/O 工作負載突然激增。
Stuck I/O
Stuck I/O 發生在 ESXi Host 外面,一般由 firmware 或 hardware 的 bug 導致 I/O 無法完成。在 vSAN 7.0 Update 3 以前,Stuck I/O 會使整個 Host 關機。一個 disk 的 I/O 無反應會影響整個 Cluster 處理 I/O 的進程,自動重啟後 I/O 仍會繼續 Stuck。因此,最好手動移除 Disk 再重啟。vSAN 7.0 Update 3 之後,監控平台會提示使用者某個 Disk 發生 Stuck I/O,需要手動重啟 Host。
URE
Unrecovered Read Error (URE) 是 LSOM 遇到 metadata 讀取錯誤時發生的問題。這是由於 Disk 介質的錯誤,能夠自動修復。當 Disk 發生 URE 並且 DDH 開啟時,vSAN 會透過將資料撤出並重建 disk 來處理此錯誤。
High Latency
當 LSOM 偵測到過多的 High Latency I/O 時會觸發此狀態。
Congestion
當 LSOM 偵測到以下 Congestion 時,會通知 DOM 降低 I/O 流量直到 Congestion 解除:
- Log Congestion
- SSD Congestion
- Component Congestion
- Memory Congestion
- IOPS Congestion
最後,當 DDH 偵測到 Disk 的錯誤後,需將 Disk 上的 Object Component 即時撤離,此時需進行 Evacuation 操作。
Evacuate
由於 Disk 發生錯誤,需要將 Disk 上的 Component 撤出到其他 Disk,以確保 Object 能符合使用者設定的 Policy。當然,也可能發生 Evacuate 錯誤,此時需要人工介入。關於 Evacuation 的結果,有以下三種:
- Data evacuation completed
成功撤離。 - Data evacuation failed due to insufficient resources
由於 Cluster 容量不足導致撤離失敗,需人工介入。 - Data evacuation failed due to inaccessible objects
當 ESXi host 重啟或發生網路問題,容易觸發 inaccessible object。需人工介入修復基礎設施問題或刪除該 object。
總結
- PDL: 嚴重錯誤需人工介入並手動移除Disk,相關人員需手動確保資料可用性
- Transient Error: 暫時的error,可通過 I/O 重試修復
- Stuck I/O: Disk I/O發生卡住事件,需要手動重啟 Host
- URE: 由 Disk 介質錯誤引起,可自動修復
- High Latency: 高延遲 I/O 觸發的error,一般發生在HDD
- Congestion: 減少 I/O 流量直至 Congestion 解除
- Evacuate: 確保 Object 符合使用者設定的 Policy前提下,安全把disk撤出ESXi Host