Как стать автором
Обновить
92.79
ISPsystem
Софт для управления IT-инфраструктурой

Миграция с Proxmox на VMmanager

Время на прочтение7 мин
Количество просмотров13K
Хостеры, уже выросшие из домашнего сервера с 1-2 виртуальными серверами до нескольких высокопроизводительных серверов в ДЦ, задумываются об автоматизации рутинных действий и администрировании виртуальных серверов.
Наиболее популярным из бесплатных менеджеров виртуализации является Proxmox.
При своих плюсах (он бесплатный, с открытым исходным кодом и сообществом), он имеет и минусы, которые с лихвой перекрывают эти плюсы:



  • Платные обновления
  • Платная техническая поддержка
  • Отсутствие официальной русскоязычной документации
  • Непрофессиональная локализация
  • Относительная сложность установки
  • Все дополнительные возможности и интеграции — платные
  • Многие компоненты созданы сторонними разработчиками



Переходить с привычного ПО на что-то новое довольно сложно, помимо изучения нового программного продукта требуется и произвести миграцию всех данных. Это очень сложный шаг и к нему следует подойти как можно основательней. Не редко выбор бесплатных или менее дорогих продуктов выливается в дополнительные расходы для дописывания нужного функционала, интеграции с другим используемым ПО, локализацией и тому подобное.

Пользуясь программными продуктами ISPsystem, хостер может получить полную автоматизацию всего процесса предоставления услуг своим клиентам.

В этой статье я расскажу, как перенести виртуальные машины с Proxmox под управление VMmanager. VMmanager не поддерживает импорт или миграцию контейнеров и виртуальных серверов с других менеджеров виртуализации. Но это не сложно сделать при помощи API VMmanager.
Рассмотрим вариант миграции контейнеров с Proxmox на VMmanager-OVZ.

Миграция контейнеров с Proxmox на VMmanager-OVZ.

Миграция упрощается тем, что это можно проделать на одном сервере.
VMmanager-OVZ без проблем устанавливается на том же сервере, где работает Proxmox без какого-либо вмешательства в работу контейнеров.

Для этого следует скачать и запустить файл-инсталлятор —
http://download.ispsystem.com/install.5.sh
после чего ответить на несколько вопросов для выбора требуемого программного продукта и его версии.
Так же автоматически подключится официальный репозитарии и начнется установка панели управления и сопутствующего ПО.
Обратите внимание, что настройки openvz от proxmox без каких-либо проблем используются в VMmanager-OVZ.
Единственное замечание: после установки VMmanager-OVZ, необходимо вручную скачать пример конфигурационного файла для openvz. Он требуется для создания контейнера, и отсутствует в дистрибутиве proxmox, поэтому в логах при попытке создатьконтейнер можно будет наблюдать такую ошибку:

2014-12-03T10:39:28+0800 vzctl: CT 100: Sample config /etc/pve/openvz/ve-basic.conf-sample not found: No such file or directory
2014-12-03T10:39:28+0800 vzctl: CT 100: Creation of container private area failed

Скачиваем пример конфигурационного файла для openvz с официального репозитория и помещаем в директорию, где он должен находиться:

# wget --no-check-certificate github.com/blueboxgroup/vzctl/blob/master/etc/conf/ve-basic.conf-sample -O /etc/pve/openvz/ve-basic.conf-sample

Хочу обратить на внимание на один момент при переносе. Существует вероятность того, что идентификационные номеры контейнров могут не совпасть.
В обоих случаях нумерация начинается с 100. Хотя в Proxmox можно выбрать произвольный ID для создаваемого контейнера, в VMmanager этот счетчик начинается с 100 и не сбрасывается, после удаления всех контейнеров, нумерация продолжается с того числа, которое является последующим для удаленных. На этот счет есть одно решение: нужно удалить все созданные ранее виртуальные серверы и аварийно завершить процесс vmmgr, тогда нумерация пойдет сначала.

Настройка параметров в VMmanager-OVZ

  • Создайте пользователя admin для управления контейнерами
  • Создайте пользователя — владельца контейнеров
  • Создайте адресное пространство, из которого будут выдаваться IP-адреса для создаваемых контейнеров. Настройки -> База IP-адресов
  • В примере я использую подсеть 192.168.0.0/24, так как контейнеры на Proxmox используют тот же диапазон адресов.
  • В “Настройках кластера” => “Шаблоны контейнеров” создайте шаблон, параметры из которого будут использоваться по умолчанию для всех создаваемых контейнеров.



Создание шаблона контейнера с параметрами по умолчанию.

В Proxmox отсутствуют такие понятия, как диапазон IP-адресов и шаблоны для создания контейнеров. При создании каждого нового контейнера, следует указывать вручную и IP-адрес, и ресурсы, доступные для нового контейнера.
В VMmanager эти действия стандартизированы и сделаны максимально удобными. Требуется один раз создать несколько шаблонов тарифов и диапазон IP-адресов. При создании контейнера IP-адрес назначается автоматически, а ресурсы указываются путем выбора соответствующего шаблона.


Создание контейнера в Proxmox


Создание контейнера в VMmanager

Перенос контейнеров затруднен тем, что оба менеджера виртуальных серверов используют разные методы хранения информации о ресурсах управляемых контейнеров.
Proxmox использует конфигурационные файлы openvz, VMmanager — хранит все в базе данных mysql, дублируя настройки в файлы для openvz. Поэтому схема усложняется тем, что потребуется создать контейнеры из VMmanager-OVZ и затем заменить этот контейнер на контейнер из Proxmox.

После произведенных настроек имеем на сервере рабочие экземпляры Proxmox и VMmanager-OVZ.
В остальном процесс миграции приводится к нескольким простым шагам:
  • Остановка контейнера, созданного в Proxmox
  • Создание дампа контейнера.
  • Переименование конфигурационного файла контейнера
  • Удаление или переименование файлов контейнера
  • Создание контейнера в VMmanager-OVZ с теми же параметрами, что и переносимый
  • Восстановление дампа в новый контейнер
  • Запуск нового контейнера


Чтобы упростить этот процесс, воспользуйтесь примером скрипта, который я прикладываю ниже.

#!/bin/bash
#
for i in `vzlist -Ha|awk '{print $1}'`
        do
                PASS=`pwgen 10 1`
                vzctl stop $i
                vzdump $i -dumpdir /vz-dump/
                mv /var/lib/vz/private/$i /var/lib/vz/private/$i.proxmox
                mv /var/lib/vz/root/$i /var/lib/vz/root/$i.proxmox
                mv /etc/vz/conf/$i.conf /etc/vz/conf/$i.conf.proxmox
                /usr/local/mgr/sbin/mgrctl -m vemgr vm.edit id=$i name=`grep HOSTNAME /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}'|awk -F. '{print $1}'` domain=`grep HOSTNAME /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}'`. iptype=public ip=`grep IP_ADDRESS /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}'` user=user1 mem=`grep PHYSPAGES  /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}' |awk -F: '{print $2}'|sed  -e 's/.$//'` hdd=`grep PHYSPAGES  /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}' |awk -F: '{print $2}'|sed  -e 's/.$//'` cpu=`grep CPUS /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}'` cpufreq=`grep CPUUNITS /etc/vz/conf/$i.conf.proxmox|awk -F'"' '{print $2}'` ostemplate=debian-6.0-i386-minimal password=$PASS confirm=$PASS preset=1 sok=ok;
                vzctl stop $i
                vzrestore /vz-dump/vzdump-openvz-$i-*.tar $i -force
                vzctl start $i
        done
#


Сделаю несколько комментариев относительно скрипта:
  1. Скрипт не учитывает статус контейнера и время активации. Ведь это пример, рассматриваемый в сферическом вакууме.
  2. Шаблон указан явно — debian-6.0-i386-minimal. Шаблоны контейнеров Proxmox и VMmanager-OVZ могут не совпадать. Но для создания контейнера следует использовать шаблон в качестве заглушки, в последствии все перезапишется данными из дампа, который был сделан со старого контейнера.
  3. Минимальное количество параметров, требуемое для создания контейнера в VMmanager-OVZ берется из конфигурационного файла контейнера, созданного в Proxmox. При желании конфигурационный файл можно будет вернуть обратно, если там использовались параметры, отличные от тех, что создаются по умолчанию.
  4. Все неуказанные параметры берутся из первого шаблона контейнера, созданного в VMmanager-OVZ =>Настройки кластера => Шаблоны контейнеров
  5. После проверки корректности работы перенесенных контейнеров, резервные копии файлов и дампы можно удалить.


Теперь перейдем к варианту миграции с Proxmox с виртуальными серверами на VMmanager-KVM.

Миграции виртуальных серверов с Proxmox на VMmanager-KVM.

К сожалению, здесь не все пойдет так же гладко, как в предыдущем случае.
Установить VMmanager-KVM в качестве основного узла на тот же сервер, где работает Proxmox не получится по причине проблем с зависимостью пакетов. Поэтому рассмотрим миграцию с использованием второго сервера.

Производим настройку VMmanager-KVM, не особо отличающуюся от той, что я описал выше для VMmanager-OVZ

И действуем по следующему алгоритму:

  • копируем с сервера Proxmox конфгурационный файл виртуальной машины
  • создаем на vmmgr идентичную виртуальную машину
  • останавливаем
  • останавливаем на сервере Proxmox
  • делаем копию файла образа vm
  • переносим с сервера Proxmox образ на сервер с VMmanager-KVM и подменяем старый образ
  • запускаем vm в VMmanager-KVM


Настройки виртуальных машин proxmox хранятся в файлах /etc/pve/qemu-server/.conf
Файлы образов виртуальных машин Proxmox хранятся в директориях /var/lib/vz/images/Чтобы каждый раз для соединения серверов не вводить авторизационные данные с помощью ssh-keygen создадим ключ-пару и отправим публичный ключ на сервер Proxmox.

cat .ssh/id_rsa.pub |ssh root@proxmox «cat >> /root/.ssh/authorized_keys»

И дальше уже все можно проделать с помощью этого скрипта.

#!/bin/bash
#
scp root@proxmox:/etc/pve/qemu-server/*.conf /root

for i in `ls *.conf|awk -F. '{print $1}'` 
        do
                PASS=`pwgen 10 1`
                /usr/local/mgr5/sbin/mgrctl -m vmmgr vm.edit id=$i mem=`grep memory /root/$i.conf|awk '{print $2}'` vcpu=`grep cores /root/$i.conf|awk '{print $2}'` cputune=1000 blkiotune=500 vsize=`grep size /root/$i.conf|awk -F= '{print $2}'| sed -e 's/.$//g'` name=`grep name /root/$i.conf|awk '{print $2}'` domain=`grep name /root/$i.conf|awk '{print $2}'`.`hostname` ip=  iptype=public preset=1 password=$PASS confirm=$PASS installtype=installtemplate vmi=CentOS-6-amd64 sok=ok
                virsh shutdown  `grep name /root/$i.conf|awk '{print $2}'`
                ssh root@proxmox “qm stop $i”
                ssh root@proxmox “cp /var/lib/vz/images/$i//vm-$i-disk-1.qcow2 /var/lib/vz/images/$i//vm-$i-disk-1.qcow2.bak”
                mv  /vm/`grep name /root/$i.conf|awk '{print $2}'`  /vm/`grep name /root/$i.conf|awk '{print $2}'`.old
                echo rsync -avz --partial root@proxmox:/var/lib/vz/images/100/vm-100-disk-1.qcow2 /vm/`grep name /root/$i.conf|awk '{print $2}'`
                virsh start `grep name /root/$i.conf|awk '{print $2}'`
        done
#



Оставлю пару комментариев по скрипту:
  • Сервер с Proxmox указан как “proxmox”.
  • Решил оперировать копиями конфигурационных файлов виртуальных машин от Proxmox на сервере с VMmanager, мне показалось это самым простым.
  • При создании каждой виртуальной машины с помощью API генерируется произвольный пароль.
  • В параметре ‘vmi=’ указан идентификатор шаблона, установленный и доступный для работы. Идентификаторы всех установленных шаблонов можно посмотреть запросом API через командную строку:
    /usr/local/mgr5/sbin/mgrctl -m vmmgr osmgr |grep 'installed=ok'|awk '{print $1}'|sed -e's/id=//'
  • Так же как и в прошлом скрипте не учитывается время развертывания сервера на VMmanager.
  • Файлы образов переносятся без какой-либо предварительной обработки. И Proxmox и VMmanager понимают формат qcow2.
  • Оригинальный файл-образ созданной VM на VMmanager переименовывается и располагается рядом)


При описании возможностей переноса контейнеров и виртуальных машин использовалась тестовая установка proxmox со значениями по умолчанию и ситуация с боевыми серверами может отличаться. Если у Вас есть опыт реального применения Proxmox и вы готовы поделиться им, то будет очень приятно увидеть ваши комментарии. Удачной миграции и максимальной автоматизации в сфере предоставления услуг хостинга!
Теги:
Хабы:
-2
Комментарии11

Публикации

Информация

Сайт
www.ispsystem.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
ISPsystem