Миграция с Virtuozzo на OpenVZ вручную
!!! info 'squidward_mode = On' В этой статье не будут описываться очевидные вещи, вроде закидывания публичного ключа ssh сервера-источника в /root/.ssh/authorized_keys сервера-приёмника или открытие порта на файрволе у сервера-приёмника для IP сервера источника. Если вы занимаетесь миграцией OpenVZ, такие, однозначно простые и понятные каждому админу ovz-хоста вещи вам уже хорошо известны. Да и решаются такие вопросы в разных организациях по разному. Уверен, что вы самостоятельно сделаете всё необхоимое для того, чтобы сервер-приёмник был доступен с сервера-источника по протоколу SSH. Поэтому данный момент пропустим, приступив сразу к сути переноса контейнера Virtuozzo на OpenVZ.
Подготовительные действия на сервере-источнике¶
На сервере-источнике в переменную CTID добавляем CTID контейнера командой
CTID=some_CTID
где some_CTID – CTID контейнера, что мы будем мигрировать.
Затем выполняем
vzctl stop $CTID
vzctl mount $CTID
ls /vz/root/$CTID
Подготовительыне действия на сервере-приёмнике¶
Видим файлы, значит всё хорошо, содержимое контейнера доступно, и его можно мигрировать вручную с помощью rsync на ноду с OpenVZ.
На сервере-приёмнике делаем
CTID=some_CTID
mkdir /vz/private/$CTID
mkdir /vz/root/$CTID
ls -lhd /vz/{private,root}/$CTID
видим что-то вроде
drwxr-xr-x 2 root root 4.0K Jan 6 17:51 /vz/private/some_CTID
drwxr-xr-x 2 root root 4.0K Jan 6 17:46 /vz/root/some_CTID
Подготовительные действия завершены. Теперь можно мигрировать сами данные.
Мигрируем данные контейнера на хост с OpenVZ¶
Запускаем на сервере-источнике команду
rsync -e "ssh -p$OUR_PORT" -aHX --numeric-ids /vz/root/$CTID/* root@$DST_HOST:/vz/private/$CTID/
где $OUR_PORT – переменная с номером порта, что использует наш SSH. Если SSH на сервере-приёмнике работает на стандартном порту, просто убираем из команды параметр
-e "ssh -p$OUR_PORT"
Cмотрим на сервере назначения как в каталоге /vz/private/$CTID появляются файлы
ls -lha /vz/private/$CTID
Настройка контейнера на сервере-приёмнике¶
Файлы успешно скопировались? Отлично, значит пора перенести конфигурационный файл контейнера с сервера-источника на сервер-приёмник.
Смотрим на сервере-источнике, где расположен конфигурационный файл контейнера. Обычно он находится по пути вида
ls /etc/vz/conf/$CTID.conf
scp -P$OUR_PORT /etc/vz/conf/$CTID.conf root@$DST_HOST:/etc/vz/conf/$CTID.conf
где
-P$OUR_PORT
параметр, указывающий на используемый на сервере-приёмнике порт SSH. Если вы используете стандартный порт, данный параметр из команды убираем.
Смотрим, что в конфигурационном файле, и при необходимости правим его.
В частности, обращаем внимание на строки вида
VE_ROOT=/vz/root/some_CTID
VE_PRIVATE="/vz/private/$VEID"
VE_LAYOUT="simfs"
Пробный запуск перенесённого контейнера¶
Запускаем на сервере назначения смигрированный контейнер командой
vzctl start $CTID
и убеждаемся, что он был перенесён нормально.
Подчищаем за собой на сервере-источнике¶
!!! warning 'Внимание!' Убедительная просьба три раза перепроверить, на каком именно сервере вы собираетесь выполнять данные команды. Их нужно выполнить на сервере-источнике, и только на нём.
После чего удаляем контейнер на старом сервер-источнике
vzctl umount $CTID
vzctl destroy $CTID
Заключение¶
Я не люблю суету, связанную с биллингом и правками в нём, да и биллинг у всех разный. Поправить инфу о хосте, на котором расположен контейнер в каждом индивидуальном случае вам будет необходимо в соответствии со спецификой вашего решения, и обсуждение тонкостей данного вопроса уже выходят за рамки данной статьи, поэтому на этом моменте позвольте мне откланяться :)