磁碟IO高負載演練
IO高負載是一種常見的故障現象,可能由於過高的業務進程負載、非預期的非業務進程佔用、記憶體資源不足等因素導致。IO高負載可能會導致業務效能受損,資料丟失等風險。因此通過此演練情境驗證系統在IO高負載時的警示和恢複情況。
實現原理
本方案使用雲助手外掛程式ACS-ECS-HighIo,內部使用dd工具(data duplicator)實現複製和轉換檔以提高磁碟IO負載,具體說明如下:
-
對於讀模式,先寫入一個臨時檔案到目標路徑,通過迴圈讀取對應檔案類比讀壓力。
-
對於寫入模式,通過迴圈寫入類比寫入壓力。
使用指南
演練準備
請確保您的ECS執行個體已安裝雲助手Agent,並且雲助手狀態為正常。具體操作,請參見查看雲助手狀態及異常狀態處理。
故障注入
-
登入ECS執行個體。
具體操作,請參見使用Workbench登入Linux執行個體。
-
使用具有sudo存取權限的使用者,運行雲助手外掛程式
ACS-ECS-HighIo。sudo acs-plugin-manager --exec --plugin ACS-ECS-HighIo --params inject,[model=paramA],[dir=paramB],[bs=paramC],[count=paramD],[duration=paramE][]內為可選故障注入參數,參數說明:-
model(可選):讀/寫入模式,取值read/write,預設為read。
-
dir(可選):目標路徑,通過指定路徑來實現對不同磁碟的壓力測試,預設為系統根目錄。
-
bs(可選):塊大小,格式同dd命令中bs塊參數格式,用於控制每次讀寫的塊大小,該參數可影響讀寫速率,為了保證佔滿IO,預設為1M。
-
count(可選):一次讀取迴圈的塊數量,預設為1024。
-
duration(可選):期間,單位秒,預設為300(秒)。
顯示如下內容時,說明雲助手外掛程式
ACS-ECS-HighIo執行成功。[ecs-user@iZ0jl5pl6qr9 ~]$ sudo acs-plugin-manager --exec --plugin ACS-ECS-HighIo --params inject params: model-read, dir=/, bs=1M, count=1024, duration=300 Done /usr/local/share/aliyun-assist/plugin/ACS-ECS-HighIo/TMP_FILE_PATH.tmp -
-
執行
iotop命令,查看故障注入是否成功。顯示如下內容時,說明故障注入成功。
Total DISK READ : 105.85 M/s | Total DISK WRITE : 0.00 B/s Actual DISK READ: 105.85 M/s | Actual DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 3270 be/4 root 105.85 M/s 0.00 B/s 0.00 % 99.16 % dd if=//AliFaultHighio.tmp of=/dev/null bs=1M count=1024 iflag=dsync,direct,fullblock 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init noibrs splash 2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd] 4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H] 6 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [mm_percpu_wq] 7 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0] 8 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_sched] 9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_bh] 10 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0] 11 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0] 12 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [cpuhp/0] 13 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [cpuhp/1] 14 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1] 15 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1] 16 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1] 17 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/1:0] 18 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/1:0H] 19 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kdevtmpfs] 20 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [netns] 21 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_tasks_kthre]
故障恢複
在ECS執行個體中執行故障恢複命令,查看I/O讀寫是否恢複到故障注入前的水平。
演練完畢後必須執行一次該命令,以刪除產生的臨時檔案。
sudo acs-plugin-manager --exec --plugin ACS-ECS-HighIo --params recover
演練案例
-
故障注入:對
usr路徑進行讀取,持續60s。sudo acs-plugin-manager --exec --plugin ACS-ECS-HighIo --params inject,dir=/usr,duration=60顯示故障注入參數和注入結果,以及存放臨時檔案的目錄檔案。
[ecs-user@iZ0jl5pl6qr9ecxxx ~]$ sudo acs-plugin-manager --exec --plugin ACS-ECS-HighIo --params inject,dir=/usr,duration=60 params: model=read, dir=/usr, bs=1M, count=1024, duration=60 Done /usr/local/share/aliyun-assist/plugin/ACS-ECS-HighIo/TMP_FILE_PATH.tmp -
在
usr目錄下,查看當前注入的臨時檔案,可以看到產生了AliFaultHighio.tmp臨時檔案。[ecs-user@iZ2zeioazo ~]$ cd /usr [ecs-user@iZ2zeioazo usr]$ ll total 512128 -rw-r--r--. 1 root root 524288000 Jul 31 10:38 AliFaultHighio.tmp dr-xr-xr-x. 2 root root 32768 May 28 11:17 bin drwxr-xr-x. 2 root root 4096 Feb 9 2022 games drwxr-xr-x. 35 root root 4096 May 28 11:16 include dr-xr-xr-x. 35 root root 4096 May 28 11:08 lib dr-xr-xr-x. 49 root root 36864 May 28 11:16 lib64 drwxr-xr-x. 30 root root 4096 May 28 11:13 libexec drwxr-xr-x. 14 root root 4096 May 28 11:13 local dr-xr-xr-x. 2 root root 20480 Jul 31 10:27 sbin dr-xr-xr-x. 94 root root 4096 May 28 11:16 share drwxr-xr-x. 4 root root 4096 May 28 11:00 src lrwxrwxrwx. 1 root root 10 Feb 9 2022 tmp -> ./var/tmp [ecs-user@iZ2zeioazolicrtw3ow42bZ usr]$ -
執行iotop命令,查看磁碟I/O讀寫情況。
Total DISK READ : 106.05 M/s | Total DISK WRITE : 0.00 B/s Actual DISK READ: 106.05 M/s | Actual DISK WRITE: 31.72 K/s TID PRIO USER DISK READ DISK WRITE> COMMAND 365 be/3 root 0.00 B/s 0.00 B/s [jbd2/vda3-8] 3443 be/4 root 106.05 M/s 0.00 B/s dd if=/usr/AliFaultHighio.tmp of=/dev/null bs=1M count=1024 iflag=dsync,direct,fullblock -
執行故障恢複命令。
sudo acs-plugin-manager --exec --plugin ACS-ECS-HighIo --params recover