IO Hang是指在進行讀或寫操作時,系統因為某些原因無法完成這些操作,導致進程或系統無法繼續正常工作的一種情況。其可以由多種原因引起,包括硬體故障、驅動問題、檔案系統錯誤、網路延遲或擁塞等。這對業務產生效能下降,服務延遲,資料一致性問題等風險。通過此演練情境驗證系統在磁碟發生IO Hang時的警示和恢複情況。
使用限制
僅支援Alibaba Cloud Linux 3/2等相容Cgroup v1的Linux發行版。
實現原理
本方案使用雲助手外掛程式ACS-ECS-IoHang,使用Cgroups對磁碟進行限速。其中Cgroups是Linux核心提供的一種可以限制單個或多個進程所使用資源的機制,可以對CPU、記憶體、IO資源、網路頻寬實現精細化的控制。
使用指南
演練準備
請確保您的ECS執行個體已安裝雲助手Agent,並且雲助手狀態為正常。具體操作,請參見查看雲助手狀態及異常狀態處理。
故障注入
登入ECS執行個體。
具體操作,請參見使用Workbench工具以SSH協議登入Linux執行個體。
使用具有sudo存取權限的使用者,運行雲助手外掛程式
ACS-ECS-IoHang。sudo acs-plugin-manager --exec --plugin ACS-ECS-IoHang --params inject,disk=vda,[duration=paramA][]內為可選故障注入參數,參數說明:disk(必選):指定目標磁碟。您可以使用lsblk查看當前系統掛載的磁碟,如需對所有磁碟注入可指定disk=all。
duration(可選):期間,單位為秒,預設為300。
查看故障注入是否成功。
如顯示以下結果,說明故障注入成功。

檢查業務讀寫是否符合預期。
故障恢複
方法一(推薦):等待逾時自動回復。
說明預設300s後會自動結束,對系統硬碟注入,因情境特殊,可能發生無法自動回復情況,請在控制台執行強制重啟執行個體,具體操作,請參見重啟執行個體。
方法二:僅對資料盤注入,在ECS執行個體中執行故障恢複命令。
sudo acs-plugin-manager --exec --plugin ACS-ECS-IoHang --params recover
演練案例
使用lsblk命令查看和選擇當前系統掛載的磁碟,以資料盤(vdb)為例,進行故障注入。
為了更直觀地觀察演練效果,類比業務對磁碟vdb讀取情境,如有實際業務可跳過。
sudo dd if=/dev/vdb of=/dev/null在iotop命令中查看當前IO佔用情況。
說明如未安裝iotop工具,可執行以下命令安裝。
Alibaba Cloud Linux 3/2、CentOS 7
sudo yum install -y iotopUbuntu、Debian
sudo apt install -y iotop

執行故障注入。
sudo acs-plugin-manager --exec --plugin ACS-ECS-IoHang --params inject,disk=vdb,duration=120返回如下所示,顯示注入參數和指定裝置的主裝置號和副裝置號,表示注入成功。

查看注入效果。
查看iotop命令中查看IO佔用情況,當前磁碟讀取速度已跌至0 B/s。

等待故障恢複。
注入逾時後,類比的業務進程速度已恢複。
