Предупреждение "Storage domain experienced a high latency"

1. Проблема

Система zVirt может демонстрировать следующее предупреждающее сообщение для некоторых доменов хранения:

Storage domain X experienced a high latency of X seconds from host X.
This may cause performance and functional issues. Please consult your storage administrator.

Что это означает и какие действия требуются?

2. Решение

Рекомендуется связаться с лицом, ответственным за состояние доменов хранения.

Затем, после обсуждения, возможны два варианта действий:

  1. Увеличить значение задержки с 5 секунд до значения, которое вам необходимо, обновив значение MaxStorageVdsDelayCheckSec:

    engine-config -s MaxStorageVdsDelayCheckSec=<new recommended value>
    service ovirt-engine restart
  2. Оставить значение без изменений и следить за такими сообщениями. Если все в порядке, можно игнорировать сообщение. Если есть проблемы, их необходимо исправить.

3. Причина проблемы

Это предупреждающее сообщение не изменяет состояние вашей среды виртуализации и предупреждает вас о возможной проблеме в реальном хранилище.

zVirt постоянно отслеживает состояние подключённых к нему доменов хранения, и одним из проверяемых параметров является время задержки (Delay time).

Это время, необходимое хосту для чтения данных из хранилища. Значение по умолчанию, принимаемое как приемлемое, определяется в переменной MaxStorageVdsDelayCheckSec и равно 5 секундам.

Любое значение, превышающее 5 секунд, приведет к возникновению этого предупреждающего сообщения.

4. Диагностические шаги

В базе данных можно увидеть записи журнала, когда ВМ приостанавливается из-за проблемы ввода-вывода хранилища:

engine=# select log_time,message from audit_log where vm_id='abcdef00-abcd-abcd-abcd-abcdef000000';

           log_time            |                                                            message
 2013-01-27 16:20:40.13+05:30  | VM vmname01 is not responding.
 2013-01-27 16:20:44.537+05:30 | VM vmname01 has paused due to storage I/O problem.
 2013-01-27 17:30:21.83+05:30  | VM vmname01 was resumed by username (Host: hostname1.example.com).
 2013-01-27 17:30:22.02+05:30  | VM vmname01 was resumed by username (Host: hostname1.example.com).

Они совпадают с моментами, когда VDSM обнаруживает задержку в хранилище, и записывается сообщение об ошибке:

engine=# select log_time,message from audit_log where storage_domain_id='abcdef00-abcd-abcd-abcd-abcdef000000';

           log_time            |                                                             message
 2013-01-27 12:38:18.238+05:30 | Storage domain STORAGE-DOMAIN-NAME experienced a high latency of 5.72285795212 seconds from host hostname1.example.com. This may cause performance and functional issues. Please consult your Storage Administrator
 2013-01-27 16:13:38.192+05:30 | Storage domain STORAGE-DOMAIN-NAME experienced a high latency of 5.45064496994 seconds from host hostname1.example.com. This may cause performance and functional issues. Please consult your Storage Administrator
 2013-01-27 16:03:59.517+05:30 | Storage domain STORAGE-DOMAIN-NAME experienced a high latency of 5.45904994011 seconds from host hostname1.example.com. This may cause performance and functional issues. Please consult your Storage Administrator

Можно проверить задержку, выполнив следующую команду на гипервизорах:

vdsClient -s 0 repoStats

Domain abcdef00-abcd-abcd-abcd-abcdef000000 {'delay': '0.000331163406372', 'lastCheck': 1353111369.6208229, 'valid': True, 'code': 0}
Domain abcdef00-abcd-abcd-abcd-abcdef000000 {'delay': '0.00102710723877', 'lastCheck': 1353111367.122232, 'valid': True, 'code': 0}

5. Подтверждение задержки

Можно проверить задержку в хранилище вне VDSM, создав следующий скрипт:

#!/bin/bash
while :; do
    echo "======================================================="
    date
    time /bin/dd iflag=direct if=/dev/<master domain path>/metadata bs=4096 count=1 of=/data/delaytest.metadata
    sleep 5
done

Сохраните этот скрипт как /data/delaytest.sh.

Запустите скрипт на одном из гипервизоров следующим образом:

nohup /data/delaytest.sh >/data/delaytest.output 2>&1

Используйте вывод этого скрипта для наблюдения за фактической задержкой в хранилище. Ошибка задержки хранения может возникнуть, если хранилище сбрасывает путь и требуется некоторое время для восстановления multipath, например:

Jan 27 10:52:44 hostname1 multipathd: checker failed path 8:208 in map 360012345678901234567890234567890
Jan 27 10:52:44 hostname1 multipathd: 360012345678901234567890234567890: remaining active paths: 3
Jan 27 10:52:44 hostname1 kernel: device-mapper: multipath: Failing path 8:208.
...
Jan 27 10:52:53 hostname1 multipathd: 360012345678901234567890234567890: sdr - directio checker reports path is down
Jan 27 10:52:54 hostname1 multipathd: 360012345678901234567890234567890: sdn - directio checker reports path is down
Jan 27 10:52:55 hostname1 multipathd: 360012345678901234567890234567890: sdq - directio checker reports path is down
Jan 27 10:52:55 hostname1 multipathd: 360012345678901234567890234567890: sdp - directio checker reports path is down

Ошибка задержки хранения также может возникнуть, если хранилище iSCSI сталкивается с сетевыми ошибками, например:

Nov  7 18:40:04 hostname1 iscsid: connect to 192.168.0.1:3260 failed (No route to host)
Nov  7 18:40:04 hostname1 iscsid: connect to 192.168.0.1:3260 failed (No route to host)
Nov  7 18:40:04 hostname1 iscsid: connect to 10.0.0.1:3260 failed (No route to host)