База знаний VMmanager

Как удалить недоступный узел кластера?

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

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

Перед удалением узла кластера его нужно освободить от виртуальных машин (ВМ): удалить ВМ или перенести на другие узлы кластера. Если ВМ по какой-либо причине не могут быть удалены или перенесены, измените статус узла на "Повреждён". Для этого:

  1. Определите id недоступного узла кластера в разделе "Узлы".
  2. Подключитесь к серверу с платформой по SSH.
  3. Подключитесь к СУБД:

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

    • VMmanager Hosting — MySQL;
    • VMmanager Infrastructure:
      • для новых установок на ОС Astra Linux, начиная с версии VMmanager 2023.06.1 — PostgreSQL;
      • в остальных случаях — 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. Проверьте содержится ли в базе данных информация о резервных копиях ВМ и сетевых интерфейсах удаляемого узла:

    select id,name,backup_location from vm_disk_backup where node=<node_ID>;
    select id,name from vm_node_bridge where node=<node_ID>;
    select id,name from vm_node_bond where node=<node_ID>;
    select id,name from vm_node_interfaces where node=<node_ID>;

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

    mysql> select id,name,backup_location from vm_disk_backup where node=1;
    +-----+------------------------+-----------------+
    | id  | name                   | backup_location |
    +-----+------------------------+-----------------+
    |  42 | vm_102_20211224T000000 |               1 |
    |  77 | vm_102_20211231T000000 |               1 |
    | 111 | vm_102_20220107T000000 |               1 |
    +-----+------------------------+-----------------+
    3 rows in set (0.00 sec)
  5. Если информация о резервных копиях или сетевых интерфейсах есть в базе данных, удалите её с помощью соответствующего запроса: 

    1. Резервные копии:

      delete from vm_disk_backup where node=<node_ID>;
    2. Бриджи:

      delete from vm_node_bridge where node=<node_ID>;

      Если при удалении информации о бриджах появляется ошибка вида ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails, выполните запрос:

      UPDATE vm_host_interfaces i
      LEFT JOIN vm_host h ON i.host = h.id
      LEFT JOIN vm_node n ON h.node = n.id
      LEFT JOIN vm_node_bridge b ON b.node = n.id
      SET i.node_bridge = b.id
      WHERE i.node_bridge = <bridge_id> ;
    3. Бонды:

      delete from vm_node_bond where node=<node_ID>;
    4. Сетевые интерфейсы:

      delete from vm_node_interfaces where node=<node_ID>;
      Обратите внимание!
      Если данные не удалить, то при удалении узла в платформе появится ошибка #1111 Handler throw uncaught exception: vm/node/{node_id} constraint.
  6. Измените статус узла: 

    update vm_node set state='crashed' where id=<node_ID>;
  7. В интерфейсе платформы обновите страницу раздела "Узлы" и удалите проблемный узел: меню   → Удалить → введите название узла → Удалить .

    Обратите внимание!
    ВМ проблемного узла будут удалены из базы данных платформы.