Перенос виртуальных машин (контейнеров) с proxmox на openVZ

Задача. Есть физически сервер, на котором работают виртуальные машины под управлением proxmox. Их надо перенести на новый физически сервер под управлением OpenVZ на базе дистрибутива CentOS 7.

На версии OpenVZ 7.0.7 скрипт не отработал и завершился с ошибками. Ошибка:

Can't open /sys/fs/cgroup/perf_event/machine.slice/211/tasks for writing: Permission denied
vcmmd: failed to unregister Container: Failed to connect to VCMMD service

211 — номер контейнера. Частично проблему решить удалось. Я вручную установил vcmmd https://github.com/OpenVZ/vcmmd. Скрипт отработал, контейнер был перенесён, но не запустился всё с той ошибкой:

Can't open /sys/fs/cgroup/perf_event/machine.slice/211/tasks for writing: Permission denied

Проблему не решил, вернулся к версии 7.0.6

Если сервера работают под управлением одинаковых дистрибутивов, то задача решает при помощи команды vzmigrate, например, вот-так-вот:

[root@OpenVZ .ssh]# vzmigrate 10.1.5.6 101

Но, если дистрибутивы разные, то задача решается не так просто и выполнение команды vzmigrate не завершается успехом.

Самое распространённое решение по переносу виртуальных машины, которое я нашёл на сегодняшний день это использовать отдельно скрипт, который выполняет миграцию. На многих форумах, где поднимался данный вопрос, все дороги в итоге шли ссылкой на скрипт — https://src.openvz.org/projects/OVZL/repos/ovztransfer/browse/ovztransfer.sh.

Но данный скрипт, как написано, предназначен для OpenVZ -> Virtuozzo 7. И как я понял, он мигрирует всё в виртуальные машины или контейнеры.

Вторая часть ссылок привела меня сюда — http://ftp.uma.es/Linux/openvz/. Здесь я взял скрипт vzmigrate-4.2-1 и применил его. Но из коробки он не работает.

Момент первый. Скрипт проверяет на целевом сервера, запущен ли openVZ.

# Check if OpenVZ is running 777
if ! logexec 2 $SSH root@$host /etc/init.d/vz status ; then
 log 0 "OpenVZ is not running on the target machine"
 log 0 "Can't continue migration"
 undo lock
 exit $MIG_ERR_OVZ_NOT_RUNNING
fi

В моём случае эта проверка не работает, т.к. строчка /etc/init.d/vz status не выполняется (по понятным причинам, дистрибутив другой). Решение: убираю полностью эту проверку. Абсолютно не критично, т.к. openVZ на целевом сервере запущен.

При желании можно переписать эту часть скрипта. Я проверял запуск openVZ командой service vz status. Скрипт при этом отрабатывал.

Момент второй. В отличие от первого момента тут решения я не нашёл. Следующая проверка:

# Check if CPT modules are loaded for live migration 777
if [ $online -eq 1 ]; then
 if [ ! -f /proc/cpt ]; then
 log 0 "vzcpt module is not loaded on the source node"
 log 0 "Can't continue live migration"
 undo lock
 exit $MIG_ERR_OVZ_NOT_RUNNING
 fi
 if ! logexec 2 $SSH root@$host "test -f /proc/rst";
 then
 log 0 "vzrst module is not loaded on the destination node"
 log 0 "Can't continue live migration"
 undo lock
 exit $MIG_ERR_OVZ_NOT_RUNNING
 fi
fi

Как видно из скрипта, тут проверяется наличие модулей vzcpt и vzrst, причём первый на исходной машине, а второй на целевой. Решить проблему с загрузкой этих модулей мне не удалось. Решения в интернете есть, но они мне не помогли. Поэтому я убрал этот блок и попробовал запустить живую миграцию без него:

./vzmigrate421.sh --remove-area no  -v --live 34.108.21.22 101

Получил вот такую ошибку:

Copying dumpfile
/var/tmp/dump.101: not a regular file
Error: Failed to copy dump to 34.108.21.22
rm: cannot remove ‘/var/tmp/dump.101’: Is a directory
 unfreeze

Скрипт не мог по каким-то причинам выполнить нужные ему действия с dump-файлом. Этот вопрос я не разбирал и выполнил команду без опции —live. И скрипт отработал.

Ссылка на скрипт — vzmigrate421_vipileno

На целевой машине контейнер автоматически запустился сам. Как и было указано в команде «не удалять данные на исходной машине» —remove-area no.


Если при выполнение скрипта получается ошибки относительно vzquota, то дело в конфиге виртуальной машины. Я прописывал в конфиг:

# Disk quota parameters (in form of softlimit:hardlimit)
DISK_QUOTA="no"

и ошибки не возникало.


Использованный материал и то, что может помочь в решении миграции.

http://ftp.uma.es/Linux/openvz/ — разные версии скриптов миграции.

https://habrahabr.ru/post/144219/ — живая миграция openVZ

Есть отличный видео материал, который объясняет некоторые моменты миграции — https://events.yandex.ru/lib/talks/3118/.

Добавить комментарий