Перенос контейнера из одного VMmanager OVZ в другой

Материал из ISPWiki
Перейти к: навигация, поиск

Подготовка

Для переноса контейнера необходимо иметь два сервера с установленными и настроенными для корректной работы VMmanager OVZ. На сервер с VMmanager OVZ, куда будет осуществляться импорт, необходимо положить публичный ключ сервера, с которого будет осуществляться импорт. На сервере источнике выполняем:

ssh-keygen -t rsa

Этой командой мы сгенерируем публичный ключ. Далее необходимо разместить его на сервере куда контейнер будет импортирован:

ssh-copy-id -i /root/.ssh/id_rsa.pub root@ip_адрес_сервера

При этом будет запрошен пароль.

После этого можно будет приступать к переносу.

Перенос

Перенос будет осуществляться по тому же принципу, который используется для миграции контейнеров из VDSmanager'а.

Для начала необходимо подготовить "площадку" для контейнера. Необходимо создать запись в базе VEmanager'а, однако, сделать вручную мы это не можем, так как поле id - это первичный ключ таблицы в базе и он генерируется автоматически. По этой же причине мы не можем пользоваться штатной OpenVZ утилитой vzmigrate. Создать запись в базе, без собственно создания самого контейнера можно при помощи функции vm.create. Запрос будет выглядеть примерно следующим образом:

https:/ip:1500/vemgr?admdown=off&chratein=1000&chrateout=1000&comments=&cpu=1&cpufreq=1000&domain=domain.com&func=vm.create&hdd=4000&hostnode=1&ip=xxx.xx.xx.x&layout=ploop&mem=512&name=example&numfile=16536&numproc=5000&ostemplate=template&password=*&swapratio=0&user_id=yy&vmnote=

Перед выполнением запроса зайдите в панель VMmanager OVZ в качестве root (не администратора)

Разумеется, необходимо в качестве параметров подставлять интересующие вас значения:

  • chratein и chrateout - ограничения по входящему и исходящему трафику соответственно
  • cpu - количество процессоров
  • cpufreq - частота процессора
  • domain - доменное имя контейнера
  • hdd - жёсткий диск
  • hostnode - id узла на котором будет находиться контейнер
  • ip - ip адрес контейнера
  • layout - файловая система контейнера
  • mem - оперативная память
  • numfile - ограничение на файловые дескрипторы
  • numproc - ограничение на количество процессов
  • ostemplate - шаблон операционной системы
  • password - пароль
  • swapratio - соотношение Swap/Ram
  • user_id - id пользователя которому будет принадлежать контейнер.

После запуска данного запроса в браузере появится окно для подтверждения. В этом окне в конце нашего запроса дописываем &out=xml и нажимаем кнопку Ок.

Выполнив данную команду мы создадим "фиктивный" контейнер, которого на самом деле не существует на жёстком диске.

Приступаем к переносу самого контейнера.

ВАЖНО! Контейнер, прежде чем начинать перенос, необходимо остановить. В противном случае, во время переноса на контейнере могут произойти какие-либо изменения, которые при переносе не скопируются, что может привести к неработоспособности контейнера. Следующим шагом необходимо перенести конфигурационный файл контейнера. Как правило, конфигурационные файлы контейнеров лежат в /etc/vz/conf. Возвращаемся на сервер с которого необходимо перенести контейнер и выполняем команду

rsync -avz /etc/vz/conf/id.conf root@ip_адрес_ноды_на_которой_будет_находиться_контейнер:/etc/vz/conf/id.conf

Вместо id.conf на сервере источнике должен быть указан id контейнера (посмотреть можно в интерфейсе), например 101.conf. На сервере приёмнике это должен быть id контейнера созданного через vm.create

Последним шагом будет перенос самого контейнера:

rsync -avz /vz/private/id/ root@ip_адрес_ноды_на_которой_будет_находиться_контейнер:/vz/private/id/

После этого, осталось только изменить ip адрес контейнера, висящий на сетевом интерфейсе.