Как перенести и клонировать ВМ
Операции этой страницы решают разные задачи. Живая миграция переносит на другой узел вычисления работающей машины — память и состояние процессора, — не трогая её данные. Миграция хранилища переносит датасеты ВМ с одного пула на другой потоком ZFS send/receive. Клонирование делает copy-on-write-копию дисков на том же пуле — секунды и почти без расхода ёмкости. Восстановление из области импорта поднимает ВМ из потока, который ранее приняли на кластер.
Отсюда границы применимости. Перенос данных между пулами идёт долго, пропорционально размеру дисков, и требует выключенной машины. Живая миграция вычислений, наоборот, работает только на запущенной машине: гостевая ОС продолжает работать, а окно недоступности сводится к моменту переключения и задаётся параметром. Клон мгновенный, но живёт на том же пуле и зависит от снимка источника: пока клон существует, источник нельзя удалить, а откатить его к снимку старше точки клонирования не даст ZFS.
Клон наследует конфигурацию источника целиком: vCPU, RAM, диски, сети, гостевые настройки. Переопределить их при создании нельзя — задаются только имя и описание. MAC-адреса генерируются заново, IP-адреса выделяются как при обычном создании, и только в тех семействах, где адрес был у порта источника.
Как перенести работающую ВМ на другой узел
Живая миграция появилась в 3.1.0. Она переносит на выбранный узел вычисления запущенной машины; диски остаются в своём пуле и по сети доступны новому узлу. Гостевая ОС работы не прерывает — недоступна она только в момент переключения.
Операция доступна роли Cluster master: её даёт привилегия Live Migrate VM
(1607). Кастомной роли привилегию выдают вручную. Чтение прогресса — отдельная
привилегия View VM Migration Status (1113).
Предусловия:
- машина запущена и её первичная настройка завершена;
- целевой узел существует и отличается от текущего;
- машина не заблокирована и по ней не идёт другая миграция;
- в кластере есть свободный порт передачи для потока памяти.
- Откройте карточку машины и запустите перенос, выбрав тип «на другой узел» и целевой узел. Общий таймаут операции (300 секунд) и окно переключения (100 миллисекунд) заданы значениями по умолчанию и в интерфейсе не настраиваются.
- Операция принимается сразу — работа идёт дальше в фоне.
- Следите за ходом переноса: приходят состояние, фаза, процент готовности, исходный и целевой узел, а при неудаче — причина отказа.
Пока перенос не завершён, операции, способные ему помешать — остановка, изменение конфигурации, снятие блокировки, — отклоняются понятной ошибкой. Чтение данных о машине остаётся доступным. Состояние машины на время переноса принадлежит самому переносу: по его итогу она числится запущенной либо получает ошибку переноса.
Ход переноса привязан к идентификатору запущенной операции, и метода «найти активный перенос по машине» в API нет. Если обновить страницу, процент готовности больше не показывается — сам перенос при этом продолжается. Понять, что машина переносится, можно по её состоянию в списке ВМ.
| Отказ | Почему | Обход |
|---|---|---|
-403 нет привилегии | у роли нет Live Migrate VM или View VM Migration Status | выполните операцию под ролью Cluster master либо выдайте привилегию кастомной роли |
-1601 неверный тип переноса | указан тип вне набора «вычисления» / «хранилище» | выберите один из двух сценариев |
-1602 неподходящий набор параметров | для переноса на узел передан целевой пул или наоборот | для смены узла указывайте целевой узел, для смены пула — целевой пул |
-1603 машина не найдена | указан несуществующий идентификатор ВМ | проверьте идентификатор в списке ВМ |
-1604 машина вне области доступа | ВМ принадлежит ВЦОД, недоступному роли | работайте в своём ВЦОД |
-1605 состояние машины не позволяет перенос | для смены узла машина не запущена либо её первичная настройка не завершена | запустите машину и дождитесь завершения настройки |
-1606 целевой узел не найден | узла с таким номером в кластере нет | выберите узел из списка узлов кластера |
-1607 целевой узел совпадает с текущим | машина уже работает на этом узле | выберите другой узел |
-1608 живая миграция недоступна | исчерпан пул портов передачи | дождитесь завершения текущих переносов |
-1611 перенос уже идёт | машина заблокирована либо по ней есть незавершённая миграция | дождитесь завершения и повторите |
-1612 миграция не найдена | запрошен статус по неизвестному идентификатору | возьмите идентификатор из ответа на запуск переноса |
Для переноса данных между пулами тот же метод принимает второй сценарий — с
целевым пулом вместо целевого узла и остановленной машиной. Ниже описан
исторический путь через vm-migration; он остаётся рабочим.
Как перенести ВМ на другой пул
Миграция доступна только роли Cluster master и требует включённой возможности миграции в настройках кластера.
Предусловия:
- ВМ выключена либо создана и ещё не запускалась;
- целевой пул отличается от текущего;
- целевой пул импортирован на узел кластера;
- есть свободный порт для потока send/receive.
Запустите миграцию и укажите целевой пул. Операция идёт полным циклом: передача потока, перерегистрация дисков, снимков и самой ВМ на новом пуле, удаление исходных датасетов. Пока цикл не закончен, ВМ остаётся заблокированной; результат видно по её карточке и в истории событий.
| Отказ | Почему | Обход |
|---|---|---|
-25300 операция доступна только роли Cluster master | Миграцию запросила другая роль | Выполните операцию под ролью уровня кластера |
-25306 ВМ не в состоянии Offline/Created | Машина запущена или приостановлена | Остановите ВМ |
-25305 миграция на тот же пул невозможна | Целевой пул совпадает с текущим | Укажите другой пул |
-25307 не удалось определить узел для пула миграции | Пул не импортирован | Проверьте состояние целевого пула |
-25304 не удалось определить узел для ВМ | Размещение ВМ неизвестно | Проверьте состояние узла и пула ВМ |
-25308 нет свободных send-receive портов | Все порты передачи заняты | Дождитесь завершения текущих передач |
-25310 миграция завершилась неудачей | Сбой перерегистрации после передачи | Проверьте состояние ВМ на обоих пулах и повторите |
Отдельно учитывайте клоны: если у переносимой ВМ есть живые CoW-клоны, миграция упрётся в зависимость на шаге удаления исходных датасетов — это известное ограничение. Удалите клоны до переноса.
Как сделать клон ВМ
Клон — новая ВМ той же конфигурации в том же ВЦОД (виртуальном центре обработки данных) и на том же пуле. Нужна привилегия на создание ВМ с областью действия по ВЦОД источника.
-
Остановите ВМ-источник. Клонирование запущенной машины отклоняется отказом
-2603. -
Запустите клонирование источника и задайте имя клона и, при желании, описание. Остальные параметры наследуются и в этот момент не правятся.
-
Дождитесь, пока клон появится в списке ВМ. Он создаётся той же цепочкой, что и новая машина: сначала запись, потом сборка на узле.
Ограничения клонирования
| Ограничение | Почему | Что делать |
|---|---|---|
| Клон всегда на пуле источника | Так работает zfs clone | Нужна копия на другом пуле — сделайте клон, затем миграцию |
| Конфигурацию нельзя переопределить | Клон наследует vCPU, RAM, диски и сети источника целиком | Правьте параметры после создания на карточке клона |
| Один запуск — один клон | Пакетного режима нет | Повторите операцию нужное число раз |
| Источник нельзя удалить, пока жив клон | Клон зависит от снимка источника | Удалите клоны, затем источник; иначе удаление вернёт -2604 со списком клонов |
| Сервисные ВМ не клонируются | Клон унаследовал бы сервисную привязку без обвязки: отказ -2605 | Создайте сервисную машину штатным способом |
| Клон клонировать нельзя | Клон клона выстроил бы цепочку зависимых ZFS-клонов. Отказ -2606 приходит раньше проверок блокировки и состояния источника | Клонируйте исходную машину ещё раз. Метка клона остаётся у машины навсегда, в том числе после удаления источника |
| Два клона одного источника в одну секунду | Обе операции используют одно имя снимка-точки | Обычно вторая переиспользует снимок первой; при точной гонке повторите операцию |
Прочие отказы: -2601 — источник не найден, -2602 — источник заблокирован,
-2610 — сбой создания клона, -255 — пул источника не принимает данные, -256 —
профиль ОС источника не найден, -403 — не хватает привилегий или ВМ вне области
действия роли.
Как восстановить ВМ из области импорта
Область импорта — место, куда кластер принимает потоки ВМ извне. Восстановление из неё — отдельный шаг оператора: автоматически ВМ не поднимается.
Область импорта открывается вкладкой «Import area»: таблица со столбцами «Dataset Id», «VM name», «Progress». Cluster master видит все записи; обычный пользователь — записи тех ВЦОД, где у него роль администратора.
-
Найдите нужную запись и убедитесь, что приём завершён: столбец «Progress» показывает прогресс передачи, и восстанавливать можно только принятые до конца записи.
-
Решите, с какими идентификаторами поднимать машину. По умолчанию восстановление берёт исходные. Тогда машины с тем же идентификатором в кластере быть не должно, иначе придёт отказ
-25208. Во втором режиме vStack Center выдаёт новые идентификаторы и эту проверку не выполняет. Проверьте также, живы ли исходный пул и ВЦОД. -
Запустите восстановление по выбранной записи и дождитесь, пока машина появится в списке ВМ.
По умолчанию восстановление поднимает ВМ с её исходными идентификаторами: записи машины, дисков и сетевых портов, консольные порты, а при наличии — и снимок, зарегистрированный вместе с потоком.
Второй режим выдаёт новые идентификаторы. vStack Center заводит машину как новую: свой идентификатор, диски в новом датасете, новые консольные порты и новые сетевые порты в тех же сетях. Порты получают свежие адреса и MAC, IP guard на них включён. Снимок, принятый вместе с потоком, регистрируется в обоих режимах.
| Отказ | Почему | Обход |
|---|---|---|
-25206 Import area item is not finished | Приём потока не завершён | Дождитесь завершения приёма |
-25208 Specified VM id exists already | ВМ с исходным идентификатором уже есть в кластере | Удалите конфликтующую машину либо восстанавливайте с новыми идентификаторами. Переименование идентификатор не освобождает |
-25205 VM item is not defined, -25207 Import area item has no VM id | Запись области импорта неполная | Примите поток заново |
-25209 Can't retrieve pool map | Пул записи недоступен | Проверьте состояние пула |
-25210, -25211 сбой выделения консольных портов | Не удалось выделить порты консоли | Повторите операцию позже |
-25220–-25223 конфликт MAC или адреса порта | Адрес или MAC из записи уже заняты | Освободите адрес либо удалите конфликтующий порт |
-25224 Can't parse dataset name | Имя датасета не разбирается | Выберите запись из списка области импорта заново |
См. также
- Как делать снимки ВМ и откатываться к ним — что нельзя откатить, пока жив клон
- Как создать, удалить и перенести виртуальную машину — создание машины с нуля и удаление источника
Методы API
Операции этой страницы в API: vm-migrate, vm-migrate-status, vm-migration,
vms-clone, vm-import-area-list, vm-import-area-process — см.
Справочник API.