Случилось так, что в кластере oVirt 4.2.5 сломалась возможность передачи роли Storage Pool Manager (SPM) с одного хоста на другой. Как позже выяснилось, истинная причина этой проблемы заключалась в том, что на хранилище виртуальных машин Data Domain возникла проблема с неудалённым "осиротевшим" диском в LVM-группе, с которой работает oVirt. Однако данная ключевая проблема привела к другой сложности - невозможности передачи роли SPM между хостами.
При попытке выполнить форсированную передачу роли SPM в веб-консоли oVirt…
…возникала ошибка вида “Failed to force select KOM-M11 as the SPM due to a failure to stop the current SPM.”
В логе engine.log на сервере oVirt Engine в этот момент фиксировалось следующее сообщение:
# tail -f /var/log/ovirt-engine/engine.log
...
2018-08-13 12:13:50,858+03 ERROR [org.ovirt.engine.core.vdsbroker.vdsbroker.SpmStopVDSCommand] (default task-37) [0b598484-cc03-4002-840d-1307d15294a2] SpmStopVDSCommand::Not stopping SPM on vds 'KOM-VM14', pool id '00000001-0001-0001-0001-0000000001c2' as there are uncleared tasks 'Task '150ed04f-31b7-406b-9858-8114fede320f', status 'finished'
...
Как я понял, в данной ситуации проблема передачи SPM заключается в невозможности остановить SPM на текущем хосте из-за заданий VDSM, имеющих статус завершённых, но не вычищенных из очереди заданий.
Перейдём в консоль хоста, на котором на данный момент выполняется роль SPM и посмотрим задания VDSM
# vdsm-client Host getAllTasksInfo
{
"150ed04f-31b7-406b-9858-8114fede320f": {
"verb": "deleteVolume",
"id": "150ed04f-31b7-406b-9858-8114fede320f"
}
}
Как видно, в списке заданий есть одно задание. Посмотрим его статус.
# vdsm-client Task getStatus taskID=150ed04f-31b7-406b-9858-8114fede320f
{
"message": "Could not acquire resource. Probably resource factory threw an exception.: ()",
"code": 100,
"taskID": "150ed04f-31b7-406b-9858-8114fede320f",
"taskResult": "cleanSuccess",
"taskState": "finished"
}
Как было отмечено ранее, по сути информация фигурирующая в сообщении об ошибке отсылает нас в корневую причину проблем, находящуюся в LVM-группе. Однако интересно в контексте нашей вторичной проблемы с невозможностью передачи SPM другое – то, что задача VDSM на хосте фактически имеет статус finished/cleanSuccess, но при этом не исчезает из списка заданий VDSM.
Решить эту проблему мы можем, самостоятельно очистив “залипшее” задание командой следующего вида:
# vdsm-client Task clear taskID=150ed04f-31b7-406b-9858-8114fede320f
true
После этого снова проверим список заданий VDSM и убедимся в том, что теперь он пуст.
# vdsm-client Host getAllTasksInfo
{}
После этого повторная попытка передачи роли SPM между хостами должна произойти успешно.
Похожая проблема с “залипшим” заданием VDSM, приводящим к невозможности перевода хоста с ролью SPM в режим облуживания ранее была описана Bug 1519497 - downloadImage task was finished but not cleared, thus preventing moving the SPM to maintenance.
Спасибо огромное! Было зависшее задание экспорта виртуальной машины на Домен Экспорта, причём в состоянии running. Из-за этого все остальные домены имели статус "Неизвестный"