Skip to content

Миграция с Virtuozzo на OpenVZ вручную

!!! info 'squidward_mode = On' В этой статье не будут описываться очевидные вещи, вроде закидывания публичного ключа ssh сервера-источника в /root/.ssh/authorized_keys сервера-приёмника или открытие порта на файрволе у сервера-приёмника для IP сервера источника. Если вы занимаетесь миграцией OpenVZ, такие, однозначно простые и понятные каждому админу ovz-хоста вещи вам уже хорошо известны. Да и решаются такие вопросы в разных организациях по разному. Уверен, что вы самостоятельно сделаете всё необхоимое для того, чтобы сервер-приёмник был доступен с сервера-источника по протоколу SSH. Поэтому данный момент пропустим, приступив сразу к сути переноса контейнера Virtuozzo на OpenVZ.

Подготовительные действия на сервере-источнике

На сервере-источнике в переменную CTID добавляем CTID контейнера командой

CTID=some_CTID

где some_CTIDCTID контейнера, что мы будем мигрировать.

Затем выполняем

vzctl stop $CTID
vzctl mount $CTID
ls /vz/root/$CTID

Подготовительыне действия на сервере-приёмнике

Видим файлы, значит всё хорошо, содержимое контейнера доступно, и его можно мигрировать вручную с помощью rsync на ноду с OpenVZ.

На сервере-приёмнике делаем

CTID=some_CTID
где some_CTIDCTID контейнера, что мы будем мигрировать.

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"
Если они отличаются из-за использования на ноде с Virtuozzo другого layout, их нужно привести к тому виду, что используется на ноде с OpenVZ. Углубляться в тонкости различий в layout не будем, кто хочет может прочитать про VE_LAYOUT в официальных манах OpenVZ.

Пробный запуск перенесённого контейнера

Запускаем на сервере назначения смигрированный контейнер командой

vzctl start $CTID

и убеждаемся, что он был перенесён нормально.

Подчищаем за собой на сервере-источнике

!!! warning 'Внимание!' Убедительная просьба три раза перепроверить, на каком именно сервере вы собираетесь выполнять данные команды. Их нужно выполнить на сервере-источнике, и только на нём.

После чего удаляем контейнер на старом сервер-источнике

vzctl umount $CTID
vzctl destroy $CTID

Заключение

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