Описание
Проблема проявляется в невозможности остановить или перезапустить виртуальную машину (ВМ). При выполнении этих операций в логе vmctl.log появляется ошибка:
libvirt.libvirtError: Timed out during operation: cannot acquire state change lock (held by monitor=remoteDispatchDomainBlockStatsFlags)В большинстве случаев проблема проблема затрагивает только один кластер. Перезагрузка узла может временно восстановить его работу, но не устраняет причину сбоя.
Причина проблемы — нестабильная работа одного или нескольких физических сетевых соединений между узлами кластера и системой хранения данных (СХД). Потеря сетевых пакетов приводит к тому, что узлы теряют доступ к общему дисковому пространству. В результате служба libvirt не может завершить операции с ВМ из-за блокировок, возникающих по тайм-ауту при ожидании доступа к дискам ВМ.
Диагностика
Чтобы подтвердить причину проблемы:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Проверьте лог vmctl.log:
Ожидаемый результат: присутствует ошибка cannot acquire state change lock.docker exec -it vm_box cat /var/log/vmctl.log
Пример выводаFile "/usr/local/lib64/python3.9/site-packages/libvirt.py", line 2789, in setMetadata raise libvirtError('virDomainSetMetadata() failed') libvirt.libvirtError: Timed out during operation: cannot acquire state change lock (held by monitor=remoteDispatchDomainBlockStatsFlags) - Проверьте наличие проблем на физических каналах подключения СХД. Если проблемы присутствуют, это подтверждает причину.
Решение
Чтобы решить проблему, устраните неисправности сетевого аппаратного обеспечения. Это восстановит стабильное сетевое соединение между кластером и СХД.
Связанные статьи: