磁碟IO高負載演練

更新時間:
Copy as MD

IO高負載是一種常見的故障現象,可能由於過高的業務進程負載、非預期的非業務進程佔用、記憶體資源不足等因素導致。IO高負載可能會導致業務效能受損,資料丟失等風險。因此通過此演練情境驗證系統在IO高負載時的警示和恢複情況。

實現原理

本方案使用雲助手外掛程式ACS-ECS-HighIo,內部使用dd工具(data duplicator)實現複製和轉換檔以提高磁碟IO負載,具體說明如下:

  • 對於讀模式,先寫入一個臨時檔案到目標路徑,通過迴圈讀取對應檔案類比讀壓力。

  • 對於寫入模式,通過迴圈寫入類比寫入壓力。

使用指南

演練準備

請確保您的ECS執行個體已安裝雲助手Agent,並且雲助手狀態正常。具體操作,請參見查看雲助手狀態及異常狀態處理

故障注入

  1. 登入ECS執行個體。

    具體操作,請參見使用Workbench登入Linux執行個體

  2. 使用具有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
  3. 執行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

演練案例

  1. 故障注入:對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
  2. 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]$
  3. 執行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
  4. 執行故障恢複命令。

    sudo acs-plugin-manager --exec --plugin ACS-ECS-HighIo --params recover