Как удалить недоступный узел кластера?
Вмешательство в базу данных предполагает потенциальный риск. Мы не рекомендуем вносить ручные правки в базу, поскольку это может нарушить корректную работу платформы.
Перед внесением изменений в БД создайте резервную копию платформы.
Перед удалением узла кластера его нужно освободить от виртуальных машин (ВМ): удалить ВМ или перенести на другие узлы кластера. Если ВМ по какой-либо причине не могут быть удалены или перенесены, измените статус узла на "Повреждён". Для этого:
- Определите id недоступного узла кластера в разделе "Узлы".
- Подключитесь к серверу с платформой по SSH.
Подключитесь к СУБД:
В связи с поэтапным переходом платформы на использование СУБД PostgreSQL, разные экземпляры VMmanager могут использовать разные СУБД:
- VMmanager Hosting — MySQL;
- VMmanager Infrastructure:
- для новых установок на ОС Astra Linux, начиная с версии VMmanager 2023.06.1 — PostgreSQL;
- в остальных случаях — MySQL.
Чтобы определить тип СУБД, выполните на сервере с платформой команду:
docker ps --filter name=pgsql
BASHПример ответа
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3213c5dc94d0 postgres:12 "docker-entrypoint.s…" 5 days ago Up 4 days 5432/tcp pgsql
CODEЕсли вывод команды содержит информацию о контейнере, платформа использует PostgreSQL, если ответ пустой — MySQL.
MySQL
docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD"
BASHPostgreSQL
docker exec -it pgsql bash -c "psql -d isp"
BASHПроверьте содержится ли в базе данных информация о резервных копиях ВМ и сетевых интерфейсах удаляемого узла:
select id,name,backup_location from vm_disk_backup where node=<node_ID>;
CODEselect id,name from vm_node_bridge where node=<node_ID>;
CODEselect id,name from vm_node_bond where node=<node_ID>;
CODEselect id,name from vm_node_interfaces where node=<node_ID>;
CODEПример запроса с результатами:
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)
CODEЕсли информация о резервных копиях или сетевых интерфейсах есть в базе данных, удалите её с помощью соответствующего запроса:
Резервные копии:
delete from vm_disk_backup where node=<node_ID>;
CODEБриджи:
delete from vm_node_bridge where node=<node_ID>;
CODEЕсли при удалении информации о бриджах появляется ошибка вида 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> ;
CODEБонды:
delete from vm_node_bond where node=<node_ID>;
CODEСетевые интерфейсы:
delete from vm_node_interfaces where node=<node_ID>;
CODEОбратите внимание!
Если данные не удалить, то при удалении узла в платформе появится ошибка #1111 Handler throw uncaught exception: vm/node/{node_id} constraint.
Измените статус узла:
update vm_node set state="crashed" where id=<node_ID>;
CODEВ интерфейсе платформы обновите страницу раздела "Узлы" и удалите проблемный узел: меню → Удалить → введите название узла → Удалить .
Обратите внимание!
ВМ проблемного узла будут удалены из базы данных платформы.