Проблема
Фактически виртуальная машина (ВМ) успешно перенесена на целевой узел кластера, но в платформе отображается на исходном узле.

При этом наблюдаются следующие симптомы:
- одно из следующих состояний ВМ:
- ВМ в статусе Активна, при этом задача по миграции имеет статус Ошибка, зависла или отсутствует;
- ВМ зависла в статусе Мигрирует, при этом задача по миграции завершена со статусом Успешно;
- ВМ в статусе Остановлена, при этом задача по миграции имеет статус Выполняется.
- команда
virsh list --all|grep <Имя_ВМ>на исходном узле не отображает целевую ВМ; - команда
virsh list --all|grep <Имя_ВМ>на целевом узле отображает ВМ в статусеrunning.

Причина
Платформа не получила подтверждения об успешном завершении миграции из-за сбоя сети или ошибки при обработке запроса. В результате фактическое состояние ВМ расходится с состоянием в БД платформы.
Диагностика
Чтобы подтвердить причину проблемы:
- В веб-интерфейсе откройте карточку проблемной ВМ и зафиксируйте имя ВМ и узел кластера.
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Определите фактическое местоположение ВМ:
docker exec vm_back vssh -a 'virsh list --all|grep <имя_ВМ>' 2>/dev/nullПояснения:Пример вывода[root@VMmanager10 ~]# docker exec vm_back vssh -a 'virsh list --all|grep blue-rubellite' 2>/dev/null Node 8: 8 191_blue-rubellite runningNode 8— ID узла кластера;191_blue-rubellite— внутреннее имя ВМ.
Если ВМ запущена на узле кластера, отличном от указанного в веб-интерфейсе, проблема подтверждена.
Решение
Внимание!
Перед выполнением инструкции создайте резервную копию платформы. Подробнее см. в статье Создание резервных копий вручную.
Чтобы решить проблему:
- Определите request_id задачи миграции:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Установите утилиту jq:
Astra Linux, Ubuntuapt update && apt install jq -yAlmaLinuxdnf install jq -y - Получите токен авторизации. Для этого отправьте POST-запрос на URL вида
https://domain.com/auth/v4/public/token. Подробнее см. в инструкции Авторизация по токену статьи Работа с API. - Получите данные задачи. Для этого выполните запрос к сервису taskmgr:
curl -s -k -X GET -H "accept: application/json" -H "Content-Type: application/json" "https://<domain>/taskmgr/v4/task?where=request_id%20EQ%20'<request_id>'" -H "x-xsrf-token: <токен>" | jq -r '.list[] | select(.status == "failed") | "=========================================================", (.stdin.metadata.name), "", .name, "", .id, "", (.callback_params | tostring), "========================================================="'Пояснения:
<domain>— адрес сервера с платформой (IP-адрес или доменное имя);<request_id>— ID задачи миграции, получен в п. 1;<токен>— токен авторизации, получен в п. 3.
Пример командыcurl -s -k -X GET -H "accept: application/json" -H "Content-Type: application/json" "https://10.5.11.10/taskmgr/v4/task?where=request_id%20EQ%20'c53699f24ce3b06f17801c4859238cf1'" -H "x-xsrf-token: 10006262-01dd7b7e-4284-42d7-a458-8d195bf9af28" | jq -r '.list[] | select(.status == "failed") | "=========================================================", (.stdin.metadata.name), "", .name, "", .id, "", (.callback_params | tostring), "========================================================="'В ответе вы получите следующие данные:
Пример вывода========================================================= blue-rubellite host_migrate 10942 {"disks":[{"id":355,"storage":1}],"host_id":191,"node_id":6,"is_dummy":false,"is_master":false,"interfaces":[{"id":198,"dhcp":false,"name":"ens3","model":"virtio","queues":1,"is_vxlan":false,"vxlan_id":0,"mac_address":"52:54:00:57:2D:BC","node_interface":14,"cluster_interface":0,"node_interface_name":"vmbr0"}],"dst_node_id":8,"host_is_active":true,"security_log_action":"[1787719398009][account_id 100000] Migration host id 191","linked_clones_cold_migration":true} =========================================================Внимание!Для групповой миграции в выводе будет несколько блоков, разделённых символами===. Проверьте каждый блок и выполните инструкцию для всех проблемных ВМ.Пояснения:
blue-rubellite— имя ВМ. Убедитесь, что оно совпадает с целевой ВМ;
Внимание!Если ВМ переименовывалась вручную в платформе, имя в выводе API может не совпадать. В этом случае для проверки используйте ID ВМ: сравните значениеhost_idвнутриcallback_paramsс ID ВМ в веб-интерфейсе — они будут совпадать.host_migrate— имя задачи;
Внимание!В выводе должно быть указано именно значениеhost_migrate. Если имя задачи отличается, инструкция неприменима. Обратитесь в техподдержку.10942— ID задачи;{"disks":[...]}— callback_params — параметры для синхронизации данных.
- Выполните API-запрос для завершения задачи миграции:
docker exec vm_back curl -X POST -H 'Instance-ID:1' -H 'internal-auth:on' -o- -D- http://localhost:1500/vm/v3/task/<id_задачи>/success?name=host_migrate -d '{"output":{"content":"","type":"text"},"params":<callback_params>}'Пояснения:
<id_задачи>— ID задачи миграции, получено в п. 5 (в примере —10942);<callback_params>— параметры из п. 5 (в примере —{"disks":[...]}).
Пример командыdocker exec vm_back curl -X POST -H 'Instance-ID:1' -H 'internal-auth:on' -o- -D- http://localhost:1500/vm/v3/task/10942/success?name=host_migrate -d '{"output":{"content":"","type":"text"},"params":{"disks":[{"id":355,"storage":1}],"host_id":191,"node_id":6,"is_dummy":false,"is_master":false,"interfaces":[{"id":198,"dhcp":false,"name":"ens3","model":"virtio","queues":1,"is_vxlan":false,"vxlan_id":0,"mac_address":"52:54:00:57:2D:BC","node_interface":14,"cluster_interface":0,"node_interface_name":"vmbr0"}],"dst_node_id":8,"host_is_active":true,"security_log_action":"[1787719398009][account_id 100000] Migration host id 191","linked_clones_cold_migration":true}}'Пример успешного ответаHTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Content-Length: 4 Connection: keep-aliveУказанная команда передаёт
callback_paramsдля корректной синхронизации данных о местоположении ВМ в БД платформы. - Проверьте результат в веб-интерфейсе. Убедитесь, что:
Может быть полезно
Связанные статьи:
.
