Перейти к основному содержимому

Как перенести и клонировать ВМ

Операции этой страницы решают разные задачи. Живая миграция переносит на другой узел вычисления работающей машины — память и состояние процессора, — не трогая её данные. Миграция хранилища переносит датасеты ВМ с одного пула на другой потоком 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).

Предусловия:

  • машина запущена и её первичная настройка завершена;
  • целевой узел существует и отличается от текущего;
  • машина не заблокирована и по ней не идёт другая миграция;
  • в кластере есть свободный порт передачи для потока памяти.
  1. Откройте карточку машины и запустите перенос, выбрав тип «на другой узел» и целевой узел. Общий таймаут операции (300 секунд) и окно переключения (100 миллисекунд) заданы значениями по умолчанию и в интерфейсе не настраиваются.
  2. Операция принимается сразу — работа идёт дальше в фоне.
  3. Следите за ходом переноса: приходят состояние, фаза, процент готовности, исходный и целевой узел, а при неудаче — причина отказа.

Пока перенос не завершён, операции, способные ему помешать — остановка, изменение конфигурации, снятие блокировки, — отклоняются понятной ошибкой. Чтение данных о машине остаётся доступным. Состояние машины на время переноса принадлежит самому переносу: по его итогу она числится запущенной либо получает ошибку переноса.

Прогресс не переживает перезагрузку страницы

Ход переноса привязан к идентификатору запущенной операции, и метода «найти активный перенос по машине» в 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-клоны, миграция упрётся в зависимость на шаге удаления исходных датасетов — это известное ограничение. Удалите клоны до переноса.

Как сделать клон ВМ​

Клон — новая ВМ той же конфигурации в том же ВЦОД (виртуальном центре обработки данных) и на том же пуле. Нужна привилегия на создание ВМ с областью действия по ВЦОД источника.

  1. Остановите ВМ-источник. Клонирование запущенной машины отклоняется отказом -2603.

  2. Запустите клонирование источника и задайте имя клона и, при желании, описание. Остальные параметры наследуются и в этот момент не правятся.

  3. Дождитесь, пока клон появится в списке ВМ. Он создаётся той же цепочкой, что и новая машина: сначала запись, потом сборка на узле.

Ограничения клонирования​

ОграничениеПочемуЧто делать
Клон всегда на пуле источникаТак работает zfs cloneНужна копия на другом пуле — сделайте клон, затем миграцию
Конфигурацию нельзя переопределитьКлон наследует vCPU, RAM, диски и сети источника целикомПравьте параметры после создания на карточке клона
Один запуск — один клонПакетного режима нетПовторите операцию нужное число раз
Источник нельзя удалить, пока жив клонКлон зависит от снимка источникаУдалите клоны, затем источник; иначе удаление вернёт -2604 со списком клонов
Сервисные ВМ не клонируютсяКлон унаследовал бы сервисную привязку без обвязки: отказ -2605Создайте сервисную машину штатным способом
Клон клонировать нельзяКлон клона выстроил бы цепочку зависимых ZFS-клонов. Отказ -2606 приходит раньше проверок блокировки и состояния источникаКлонируйте исходную машину ещё раз. Метка клона остаётся у машины навсегда, в том числе после удаления источника
Два клона одного источника в одну секундуОбе операции используют одно имя снимка-точкиОбычно вторая переиспользует снимок первой; при точной гонке повторите операцию

Прочие отказы: -2601 — источник не найден, -2602 — источник заблокирован, -2610 — сбой создания клона, -255 — пул источника не принимает данные, -256 — профиль ОС источника не найден, -403 — не хватает привилегий или ВМ вне области действия роли.

Как восстановить ВМ из области импорта​

Область импорта — место, куда кластер принимает потоки ВМ извне. Восстановление из неё — отдельный шаг оператора: автоматически ВМ не поднимается.

Область импорта открывается вкладкой «Import area»: таблица со столбцами «Dataset Id», «VM name», «Progress». Cluster master видит все записи; обычный пользователь — записи тех ВЦОД, где у него роль администратора.

  1. Найдите нужную запись и убедитесь, что приём завершён: столбец «Progress» показывает прогресс передачи, и восстанавливать можно только принятые до конца записи.

  2. Решите, с какими идентификаторами поднимать машину. По умолчанию восстановление берёт исходные. Тогда машины с тем же идентификатором в кластере быть не должно, иначе придёт отказ -25208. Во втором режиме vStack Center выдаёт новые идентификаторы и эту проверку не выполняет. Проверьте также, живы ли исходный пул и ВЦОД.

  3. Запустите восстановление по выбранной записи и дождитесь, пока машина появится в списке ВМ.

По умолчанию восстановление поднимает ВМ с её исходными идентификаторами: записи машины, дисков и сетевых портов, консольные порты, а при наличии — и снимок, зарегистрированный вместе с потоком.

Второй режим выдаёт новые идентификаторы. 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.