Перенос ВМ: смена узла и смена пула
«Перенести ВМ» в vStack Center — это две разные операции с разными механиками, и выбирать между ними приходится по тому, что именно вам мешает. Если узел уходит на обслуживание, машину нужно запустить на другом узле, а её данные остаются на месте. Если заканчивается место в пуле или пул выводят из эксплуатации, нужно перенести данные в другой пул, а узел исполнения при этом не важен.
Живая миграция появилась в 3.1.0: работающую машину переносят на другой узел без остановки, гостевая ОС при этом продолжает работать. Перенос данных между пулами по-прежнему требует остановленной машины.
Эта страница описывает перенос через остановку — он работает на любой версии и не требует отдельной привилегии. Про живую миграцию, её предусловия и чтение прогресса — «Перенос и клонирование ВМ». Если живая миграция недоступна, планируйте окно простоя: у смены узла его длительность равна времени останова и запуска, у смены пула — времени копирования данных.
Смена узла работает через размещение при запуске. При запуске машины узел выбирается явно, а без выбора vStack Center сам берёт наименее загруженный узел в состоянии ONLINE. Работает это не для всех машин: удалённый запуск и автоматическое размещение доступны машинам в NVMe-режиме дисков, а машина на virtio-blk запускается только на узле своего пула данных.
Смена пула — это миграция данных: полный цикл ZFS send/receive, затем перерегистрация дисков, снимков и самой машины, затем удаление исходного датасета. Операция долгая и односоставная: результат приходит после завершения всего цикла, а не после старта копирования, и прогресс копирования vStack Center не показывает.
| Задача | Что делать | Что переносится | Ключевое ограничение |
|---|---|---|---|
| Освободить узел под обслуживание, простой недопустим | Живая миграция на выбранный узел | Только исполнение; данные остаются в своём пуле | С 3.1.0; нужна привилегия Live Migrate VM; машина должна быть запущена |
| Освободить узел под обслуживание, простой допустим | Остановить машину и запустить её на выбранном узле | Только исполнение; данные остаются в своём пуле | На virtio-blk запуск возможен только на узле пула |
| Освободить пул хранения | Миграция машины на другой пул | Данные: диски, снимки, регистрация ВМ | ВМ остановлена; целевой пул отличается от исходного |
| Получить быструю копию рядом | Клонирование машины | Ничего не переносится — создаётся копия | Клон всегда на пуле источника; операция идёт через API |
Предусловия
- права на машину: Cluster master видит любую ВМ кластера; обычный
пользователь работает только с машинами своих ВЦОД (виртуальных центров
обработки данных). Для запуска и остановки порог роли в ВЦОД —
role_id ≤ 3; - для смены пула — роль Cluster master: миграция открыта только ей;
- целевой пул импортирован на узле: иначе vStack Center не определит узел пула и вернёт код -25307;
- имя целевого пула вида
z02— две цифры после буквы; - квоты ВЦОД и ёмкость кластера позволяют запустить машину: при запуске проверяются и квоты, и переподписка памяти;
- согласованное окно простоя;
- версия vStack Center — 3.0.5 для клонирования ВМ, 3.1.0 для живой миграции; перенос через остановку и миграция данных между пулами работают и на более ранних версиях.
Шаг 1. Снять картину машины
До любого переноса нужно знать три вещи: где машина сейчас, чем она пользуется и можно ли её вообще запустить на другом узле.
- Откройте Provider Data Center → All Virtual Machines и найдите машину. Колонка State показывает её состояние, Storage (GB) — сколько места она занимает.
- Откройте карточку машины и прочитайте блок General properties: узел исполнения (Node), ВЦОД машины, CPU (Cores), RAM, OS profile и VM configuration version.
- Прочитайте таблицу Disks — колонки Name, Slot, Disk size (GB), Sector size, IOps limit, MBps limit. По ней считают объём, который предстоит скопировать, и запоминают ограничения скорости.
- Пересчитайте снимки в таблице Snapshots — колонки Name, Date of creation, Size (GB). После миграции число снимков должно совпасть.
| Что выписать | Зачем |
|---|---|
| Узел исполнения (Node) | Понять, откуда машину предстоит увести |
| Пул данных машины | Выбрать целевой пул, отличный от исходного |
| Режим дисков — NVMe или virtio-blk | Определяет, можно ли запускать машину не на узле пула |
| Состояние (State) | От него зависит, примет ли машина команду запуска или миграции |
| Число снимков | Сверка после переноса данных |
Режим дисков на карточке не подписан отдельной строкой. Если машина на virtio-blk, это выясняется при попытке запустить её на чужом узле: запуск отклоняется с кодом -460.
Шаг 2. Остановить машину
Обе операции требуют остановленной машины, поэтому шаг общий.
- Откройте карточку ВМ (или найдите машину в списке), нажмите Actions и выберите команду остановки.
- Если гостевая система не реагирует на ACPI, задайте таймаут жёсткого выключения (0–999 секунд) или откажитесь от ACPI-выключения.
- Дождитесь, пока State сменится на «остановлена». Пока идёт операция, машина заперта: другие команды над ней отбиваются.
Приостановленную машину команда остановки принимает так же, как работающую.
Задача A. Запустить машину на другом узле
Это то, что нужно перед обслуживанием узла: данные остаются в своём пуле, меняется только место исполнения.
- Убедитесь, что машина в NVMe-режиме дисков. Машина на virtio-blk запускается только на узле своего пула данных: попытка запустить её на другом узле возвращает код -460.
- Откройте карточку ВМ, нажмите Actions и выберите команду запуска.
- Выберите целевой узел. Номер узла — от 1 до числа узлов кластера; если оставить автоматический выбор, vStack Center возьмёт наименее загруженный узел в состоянии ONLINE — это удобно при массовом запуске после обслуживания.
- Дождитесь, пока State сменится на «запущена», и проверьте поле Node в блоке General properties: узел, на котором машина действительно поднялась, показан там — и при явном выборе, и при автоматическом.
Когда подходящих узлов нет, приходит код -458.
Перезапуском узел не сменить: перезапуск берёт текущее размещение машины. Для смены узла нужна пара «остановить — запустить».
Задача B. Перенести данные в другой пул
Это то, что нужно при исчерпании пула или выводе пула из эксплуатации. Миграция копирует данные потоком ZFS send/receive, перерегистрирует диски, снимки и машину, а затем удаляет исходный датасет.
- Выберите целевой пул. Откройте Provider Data Center → Storage Resources: таблица ZFS pools покажет Health, Consuming, Scrubbing, Resilvering, Current node и Capacity (RAW). Берите здоровый пул, по которому не идут восстановление и проверка целостности.
- Откройте пул и в разделе Properties сверьте Free с суммой Disk size
(GB) всех дисков машины — свободного места должно хватить на все диски. Имя
целевого пула должно быть вида
z02. - Убедитесь, что машина остановлена или создана и ещё не запускалась: другие состояния миграция не принимает и отвечает кодом -25306.
- Откройте карточку ВМ, нажмите Actions, выберите миграцию и укажите целевой пул.
- Дождитесь завершения цикла. Пока он идёт, машина заперта, а результат приходит один раз — после копирования, перерегистрации и удаления исходного датасета. Ход операции показывает панель журнала — кнопка LOG.
- Сверьте результат: число снимков в таблице Snapshots совпадает с замером до миграции, а в Storage Resources у исходного пула вырос остаток. Точное размещение дисков по пулам отдаёт API — см. Справочник API.
- Запустите машину.
Миграция на тот же пул запрещена и отклоняется с кодом -25305. Копирование идёт через ограниченный набор портов передачи. Когда все они заняты другими переносами, приходит код -25308. Повторите операцию позже.
Задача C. Быстрая копия вместо переноса
Иногда задача решается копией, а не переносом: например, нужно проверить обновление на дубликате машины. Клон — это мгновенная copy-on-write-копия остановленной машины: операция занимает секунды независимо от размера дисков и почти не тратит ёмкость.
Клонирование в веб-интерфейсе не представлено: операцию выполняет администратор через API — см. Справочник API. Задаются только имя клона и описание.
- Остановите машину-источник: клонирование запущенной машины отклоняется с кодом -2603.
- Запустите клонирование и задайте имя клона.
- Дождитесь, пока клон появится в списке All Virtual Machines. Он создаётся той же цепочкой, что и новая машина: сначала запись, потом сборка на узле.
Клон наследует конфигурацию источника полностью и создаётся в том же ВЦОД и на том же пуле — переносом это не заменить. MAC-адреса генерируются заново, адреса выделяются как при обычном создании.
Живой клон удерживает источник. Пока клон существует, источник нельзя удалить, а его миграция упрётся в шаг удаления исходных датасетов — это известное ограничение. Сначала уберите клоны, потом переносите источник.
Завершение работ
- Запустите машину и проверьте, что она поднялась: State в списке ВМ и поле Node на карточке.
- После смены пула сверьте освободившуюся ёмкость в Storage Resources: у исходного пула вырастет остаток. Исходный датасет удаляется в рамках цикла миграции — отдельной команды не требуется.
- Проверьте, что диски и снимки на месте: таблицы Disks и Snapshots на карточке машины. Ограничения скорости машина сохраняет — сверьте IOps limit и MBps limit у дисков, а ограничение полосы — у сетевых портов.
- Если машину переносили под обслуживание узла — выводите узел из работы только после того, как все его машины подняты на других узлах.
Проверка результата
| Что проверяем | Где смотреть | Ожидаемо |
|---|---|---|
| Машина работает на нужном узле | Карточка ВМ, блок General properties | Поле Node — выбранный узел |
| Машина запущена | Список ВМ, колонка State | Состояние соответствует «работает» |
| Снимки на месте | Карточка ВМ, таблица Snapshots | Число снимков совпадает с замером до миграции |
| Диски на месте | Карточка ВМ, таблица Disks | Состав дисков и ограничения скорости не изменились |
| Исходный пул освободился | Storage Resources, Capacity (RAW) | Заполненность исходного пула снизилась |
| Данные переехали в целевой пул | Через API | Пул машины и пул каждого диска — целевой |
Если не получилось
| Что видите | Почему | Что делать |
|---|---|---|
| Код ошибки -25300 | Миграция открыта только роли Cluster master | Войдите под ролью уровня кластера |
| Код ошибки -25306 | Машина не остановлена и не находится в состоянии «создана» | Остановите машину и дождитесь фактического останова |
| Код ошибки -25305 | Целевой пул совпадает с исходным | Выберите другой пул: миграция на тот же пул запрещена |
| Код ошибки -25307 | Не удалось определить узел целевого пула | Пул может быть не импортирован. Проверьте его в Storage Resources по колонке Current node |
| Код ошибки -25304 | Не удалось определить узел машины | Проверьте состояние узлов в Server Nodes |
| Код ошибки -25308 | Нет свободных портов передачи | Дождитесь завершения других переносов и повторите |
| Код ошибки -25310 | Цикл миграции не завершился: сбой перерегистрации | Проверьте состояние машины и её дисков на карточке; не запускайте новую миграцию до выяснения |
| Код ошибки -460 | Машина на virtio-blk: запуск возможен только на узле её пула | Сменить узел исполнения нельзя. Перенесите данные в пул нужного узла миграцией |
| Код ошибки -459 | Windows в NVMe-режиме не завершила первичную настройку | Завершите настройку на узле пула, затем запускайте удалённо |
| Код ошибки -458 | Нет доступных узлов в состоянии ONLINE для размещения | Верните узлы в работу или выберите узел вручную |
| Код ошибки -442, -443 | Выбран несуществующий узел | Возьмите номер узла из таблицы Server Nodes |
| Код ошибки -457 | Машина уже запущена | Остановите её перед повторным запуском |
| Код ошибки -455 | Машина приостановлена | Верните её в работу, затем запускайте |
| Код ошибки -409 | Машина заперта другой операцией | Дождитесь её завершения; запертая машина освобождается сама, когда узел ответит |
| Код ошибки -413, -414, -415 | Исчерпана квота ВЦОД по хранилищу, памяти или ядрам | Освободите квоту или расширьте её |
| Код ошибки -440 | Исчерпана память кластера с учётом переподписки | Запускайте на другом узле или освободите память |
| Код ошибки -452 | При удалённом запуске не подключились диски по сети | Запустите машину на узле её пула и проверьте связность фабрики |
| Код ошибки -2603 | Источник клона не остановлен | Остановите машину перед клонированием |
| Код ошибки -2605 | Машину ведёт сервис — например, программно-определяемый маршрутизатор (Edge) | Сервисные машины не клонируются |
| Код ошибки -3001, -429 | Машины с таким идентификатором нет в области видимости | Проверьте машину и права на её ВЦОД |
| Миграция «зависла» без ответа | Результат приходит один раз, после всего цикла | Дождитесь: длительность зависит от объёма дисков. Прогресс копирования не показывается |
| Машина не запускается после миграции | Изменилось размещение или не хватает ресурсов | Проверьте квоты и наличие узлов ONLINE; машину на virtio-blk запускайте на узле нового пула |
Ограничения
Прогресс миграции недоступен: результат приходит по завершении цикла и не сообщает, сколько данных скопировано. Оценивайте по объёму дисков машины из таблицы Disks.
Целевой пул задаётся именем вида z02 — пул с именем другого вида целью миграции
указать нельзя.
Отмены миграции нет. Если цикл провалился, состояние машины проверяют чтением её карточки, а не повторной командой.
См. также
- Полный набор операций переноса и клонирования — «Как перенести и клонировать ВМ».
- Жизненный цикл машины и её статусы — «Жизненный цикл виртуальной машины».
- Выбор целевого пула по ёмкости и состоянию — «Как посмотреть пулы кластера».
- Вывод узла из работы под обслуживание — «Как управлять узлами кластера».
Методы API
Операции этой страницы в API: vm-list, vm-get, vm-statuses,
vm-snapshot-list, vms-stop, vms-start, vms-restart, vm-migration,
vms-clone, pool-map-by-guid, pools-get, cluster-node-disable — см.
Справочник API.