База знаний VMmanager
Режим фокусировки

Некорректный статус ВМ после миграции

Проблема

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

При этом наблюдаются следующие симптомы:

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

Причина

Платформа не получила подтверждения об успешном завершении миграции из-за сбоя сети или ошибки при обработке запроса. В результате фактическое состояние ВМ расходится с состоянием в БД платформы.

Решение

Чтобы исправить несоответствие между фактическим состоянием ВМ и состоянием в БД платформы:

  1. Определите ID задачи миграции:
    1. В правом меню нажмите Список задач .
    2. Выберите задачу по миграции для целевой ВМ.
    3. Проверьте значение в столбце id.
  2. Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
  3. Подключитесь к БД:

    Вмешательство в базу данных предполагает потенциальный риск. Мы не рекомендуем вносить ручные правки в базу, поскольку это может нарушить корректную работу платформы.

    Перед внесением изменений в БД создайте резервную копию платформы. 


    В связи с поэтапным переходом платформы на использование СУБД PostgreSQL, разные экземпляры VMmanager могут использовать разные СУБД.

    Платформа использует PostgreSQL:

    • во всех новых установках, начиная с версии 2026.03.1;
    • в установках VMmanager Infrastructure на сервере с ОС Astra Linux, начиная с версии VMmanager 2023.06.1.

    В остальных случаях платформа использует MySQL. Смена СУБД при обновлении платформы не выполняется.

    Чтобы определить тип СУБД, выполните на сервере с платформой команду: 

    docker ps --filter name=pgsql
    Пример ответа
    CONTAINER ID   IMAGE         COMMAND                  CREATED      STATUS      PORTS      NAMES
    3213c5dc94d0   postgres:12   "docker-entrypoint.s…"   5 days ago   Up 4 days   5432/tcp   pgsql

    Если вывод команды содержит информацию о контейнере, платформа использует PostgreSQL, если ответ пустой — MySQL.


    MySQL
    docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD"
    PostgreSQL
    docker exec -it pgsql bash -c "psql -d isp"
  4. Получите consul_id для проблемной задачи:
    SELECT consul_id FROM vm_task_log WHERE id = [id_задачи];

    Пояснения:

    • [id_задачи] — значение получено в п. 1.
    Пример вывода
    SELECT consul_id FROM vm_task_log WHERE id = 2338;
    +-----------+
    | consul_id |
    +-----------+
    |     16980 |
    +-----------+
  5. Получите callback_params для проблемной задачи. Это параметры, которые система должна была отправить при успешном завершении миграции:
    SELECT callback_params FROM taskmgr_task WHERE id = [consul_id];
    Пример вывода
    SELECT callback_params FROM taskmgr_task WHERE id = 16980
    *************************** 1. row ***************************
    callback_params: {"disks": [{"id": 64466, "storage": 34}], "host_id": 66687, "node_id": 397, "is_dummy": false, "interfaces": [{"id": 66689, "name": "eth0", "is_vxlan": false, "mac_address": "52:54:00:11:C1:0F", "node_interface": 337, "is_main_network": true, "node_interface_name": "vmbr0"}], "dst_node_id": 375}

    Пояснения:

    • [consul_id] — значение получено в п. 4.
  6. Выйдите из БД:
    exit
  7. В контейнере vm_box выполните API-запрос на ручное завершение задачи:
    curl -X POST -H 'Instance-ID:1' -H 'internal-auth:on' -o- -D- \
    http://localhost:1500/vm/v3/task/[consul_id]/success?name=host_migrate \
    -d '{"output":{"content":"","type":"text"},"params":[callback_params]}'

    Пояснения:

    • [consul_id] — значение получено в п. 4;
    • [callback_params] — значение получено в п.5. 
    Пример запроса для consul_id = 16980
    curl -X POST -H 'Instance-ID:1' -H 'internal-auth:on' -o- -D- \
    http://localhost:1500/vm/v3/task/16980/success?name=host_migrate \
    -d '{"output":{"content":"","type":"text"},"params":{"disks": [{"id": 64466, "storage": 34}], "host_id": 66687, "node_id": 397, "is_dummy": false, "interfaces": [{"id": 66689, "name": "eth0", "is_vxlan": false, "mac_address": "52:54:00:11:C1:0F", "node_interface": 337, "is_main_network": true, "node_interface_name": "vmbr0"}], "dst_node_id": 375}}'
    Пример успешного ответа
    HTTP/1.1 200 OK
    Content-Type: application/json; charset=utf-8
    Content-Length: 4
    Connection: keep-alive
  8. Проверьте в веб-интерфейсе, что ВМ находится на целевом узле.
Может быть полезно