Назад | Перейти на главную страницу

DRBD IOWait - высокий уровень ввода-вывода и iowait, но низкий трафик и чтение / запись на диске

Мне нужна ваша помощь.

Имею DRBD-кластер (9.6.0, ядро ​​3.10.0-957.21.3, CentOS 7). В этом кластере у меня два drbd-диска:

С drbd0 (SSD, sda) все хорошо - он в статусе UpDate. Но с drbd1 (HDD, sdb) я вижу следующее:

# drbdadm status
drbd0 role:Primary
  disk:UpToDate
  slave role:Secondary
    peer-disk:UpToDate

drbd1 role:Primary
  disk:UpToDate
  slave role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:0.17

Это ОЧЕНЬ медленно - я получаю 0,17% за 6 часов. Я знал, что HDD медленнее SSD, но это плохо.

Информация:

У меня такая конфигурация (закомментированные строки - это мои эксперименты):

# cat /etc/drbd.d/global_common.conf 
global {
 usage-count  yes;
}
common {
 net {
  protocol B;
  }
}

# cat /etc/drbd.d/drbd0.res 
resource drbd0 {
        on master {
                device /dev/drbd0;
                disk /dev/mapper/vg_ssd_drbd-lv_ssd_drbd;
                meta-disk internal;    
                address 192.168.100.15:7788;
        }
        on slave  {
                device /dev/drbd0;
                disk /dev/mapper/vg_ssd_drbd-lv_ssd_drbd;
                meta-disk internal;
                address 192.168.100.17:7788;
        }
        net {
                sndbuf-size 10M;
                rcvbuf-size 10M;
                ping-int 2;
                ping-timeout 2;
                connect-int 2;
                timeout 5;
                ko-count 5;
                max-buffers 128k;
                max-epoch-size 8192;
                verify-alg md5;
        }
        disk {
                c-plan-ahead 20;
                c-min-rate 1M;
                c-max-rate 600M;
                c-fill-target 2M;
                al-extents 3389;
        }
}

# cat /etc/drbd.d/drbd1.res 
resource drbd1 {
        on master {
                device /dev/drbd1;
                disk /dev/mapper/vg_hdd_drbd-lv_hdd_drbd;
                meta-disk internal;    
                address 192.168.100.15:7789;
        }
        on slave  {
                device /dev/drbd1;
                disk /dev/mapper/vg_hdd_drbd-lv_hdd_drbd;
                meta-disk internal;
                address 192.168.100.17:7789;
        }
        net {
                #sndbuf-size 1M;
                #rcvbuf-size 1M;
                ping-int 2;
                ping-timeout 2;
                connect-int 2;
                timeout 5;
                ko-count 5;
                #max-buffers 12k;
                #max-epoch-size 8192;
                #verify-alg md5;
        }
        disk {
                #c-plan-ahead 20;
                c-min-rate 1K;
                c-max-rate 600M;
                #c-fill-target 2M;
                al-extents 919;
        }
}

Серверы имеют канал link-to-link со скоростью 10 Гбит / с - оба находятся в одной комнате.

Я могу показать вам свой мониторинг:

Ночью синхронизирую свой SSD - все хорошо. Но днем ​​я пытался синхронизировать свой жесткий диск, и он очень плачет.

Количество операций ввода-вывода растет мгновенно, но операций чтения и записи на диск нет ни на одном сервере. С NET-трафиком ситуация идентичная.

Если я подключаюсь к серверу, я вижу такую ​​картину:

top - 12:52:35 up 1 day, 10:44,  1 user,  load average: 1.01, 1.06, 1.26
Tasks: 492 total,   1 running, 491 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.3 sy,  0.0 ni,  0.0 id, 99.7 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

DRBD1 (я вижу его в iostat) загружает iowait в CPU на 100%, но WriteKB и ReadKB ~ ноль.

Я погуглил, что это проблема, и мне посоветовали показать TCP Buffer, но это нормально. Я сбрасываю все настройки DRBD для drbd1 по умолчанию, но это не дает результата.

Я попытался самостоятельно диагностировать проблему и обнаружил две аномалии:

Один. Я вижу какое-то одно «Время, затраченное на ввод-вывод» в 1 секунду. Думаю, что у меня тут таймаут.

Два. В моем каталоге, установленном на жесткий диск, я вижу большую разницу для команд df / du и ls. Возможно, это особенность KVM, но я не уверен.

du -sh /data/hdd-drbd/*
170M    /data/hdd-drbd/awx-add.qcow2
7.7G    /data/hdd-drbd/awx.qcow2
2.0G    /data/hdd-drbd/template-DISABLE.qcow2
ls -lah /data/hdd-drbd/
total 9.8G
drwxr-xr-x  2 root root   74 Aug 16 17:37 .
drwxr-xr-x. 8 root root   91 Aug 14 22:11 ..
-rw-------  1 qemu qemu 201G Aug 15 19:41 awx-add.qcow2
-rw-------  1 qemu qemu 7.7G Aug 18 17:26 awx.qcow2
-rw-------  1 root root  46G Aug 15 13:48 template-DISABLE.qcow2

Теперь я перенесу все данные на SSD-диск и попробую повторно синхронизировать пустой диск - может быть, все будет хорошо. Но мне нужна ваша помощь в решении этой проблемы - у вас есть идеи для этой ситуации?

РЕДАКТИРОВАТЬ:

Еще один - почему я перепрошиваю свои хранилища? Я добавил несколько PV в свой LVM для drbd [0/1] и изменил размер drbd-devices. Может это важная информация ... До этой операции drbd работала нормально.

РЕДАКТИРОВАТЬ2:

Повторная синхронизация пустого диска такая же ...

У меня есть решение в стиле CRUTCH.

Сначала я переместил все данные с HDD-drbd на SSD-drbd и воссоздал drbd-device. Так как эта синхронизация работает нормально.

Во-вторых, я (возможно) нахожу одну проблему с производительностью. Посмотреть графику

У меня было 2 часа хорошей производительности, но затем я попытался запустить виртуальную машину KVM. И волшебство, производительность упала (~ 13:10 по графике). Затем я останавливаю виртуальные машины, и производительность восстанавливается.

Думаю, это связано с тем, что не стоит давать даже минимальную нагрузку на DRBD при синхронизации. Однако очень надеюсь, что после синхронизации этой проблемы не будет.