Задача. Есть физически сервер, на котором работают виртуальные машины под управлением 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 service211 — номер контейнера. Частично проблему решить удалось. Я вручную установил 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/.