четверг, 31 марта 2011 г.

Перенос виртуальных серверов VMware на XenServer для Linux guest



Как я уже писал в предыдущей статье мне придется переезжать с VMware. А что делать с виртуалками? Не переставлять же все - у меня их десятки, я полгода переносить буду (с учетом того, что их еще проверить нужно после переинсталляции).

Более логичным и правильным было бы перенести виртуалки через экспорт-импорт. Следует обратить внимание, что, если не соблюдать процедуру, а попытаться просто сделать экпорт виртуалки а потом ее импорт через XenConvert, виртуалка запуститься в HVM-режиме (полная виртуализация). Это-во-первых, замедлит работу виртуальной машины. Во-вторых, у меня обнаружилась бага - если на эту виртуалку подать сеть, подключенную через транк (VLAN) то внутри виртуалки сетевой интерфейс работает некорректно и пользоваться им невозможно.
Поэтому категорически рекомендую использовать паравиртуализацию.

Решение задачи есть на форуме Citrix, я воспользовался именно им, с небольшим уточнением.

Итак, приступим.

Я подразумеваю, что, раз уж админ пользовался VMware, то у него обязательно есть установленный Windows-хост, расположенный где-то рядом с гипервизорами. Тем более, что для CitrixXen понадобится XenCenter, который тоже написан под Windows.

Перво-наперво нам понадобиться пойти на сайт Citrix и вытащить свежую версию XenConvert. Нюанс заключается в том, что только самая последняя версия умеет корректно импортировать виртуалки с гостевой OS Linux (да и то - там все равно нужно делять ряд действий). Подходящая версия - на ниже 2.3.1.2654. Именно эта версия позволила мне произвести конвертацию.



Сначала нам нужно подготовить виртуальный хост к переносу. Рекомендую на всякий случай сделать снапшот этого хоста, т.к. дальнейшие действия сделают невозможным нормальную загрузку гостя под гипервизором VMware. Также следует учитывать, что описанная ниже технология подходит для RHEL 5.4 или выше.


  • Подключаемся к консоли гостевой ОС. Устанавливаем ядро с поддержкой xen:
    # yum install kernel-xen
    В процессе установки обращаем внимание на версию ядра. Это понадобится нам в дальнейшем.

  • После установки, для облегчения дальнейших действий, временно заводим переменную окружения:
    # export kv=<kernel version>.el5xen

  • пересоздаем загрузочный образ initrd, выкинув заодно оттуда поддержку SCSI (Xen все равно не использует):
    # mkinitrd --omit-scsi-modules --with=xennet --with=xenblk --preload=xenblk \
    /boot/initrd-$kv-mod.img $kv
    .
    Образ будет создан в каталоге /boot

  • проверяем fstab. Если там имеются упоминания в явном виде дисковых устройств (например, /dev/sdb1, etc) меняем имена устройств. Принцип замены: /dev/sdXXX на /dev/xvXXX. Например, /dev/sdb1 -> /dev/xvdb1

  • правим /boot/grub/menu.lst. Нужно создать после строчки hiddenmenu и перед первой title что-то вида:
    title RedHat Enterprise Linux Server (2.6.18-238.5.1.0.1.el5xen)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-238.5.1.0.1.el5xen ro root=LABEL=/ rhgb quiet numa=off
    initrd /initrd-2.6.18-238.5.1.0.1.el5xen-mod.img

    Следует учитывать, что в параметрах ядра указывается root. Если root прописан как LABEL - можно ничего не менять. Если прописано явно дисковое устройство (к примеру, /dev/sda3), то нужно внести исправления, как описано выше (например, поправить на /dev/xvda3).
    Также нужно обратить особое внимание на наименование файлов (initrd) и не забыть выставить дефолтовую загрузку на новое ядро (строка default)

  • Если были установлены VMware Tools, удаляем:
    # vmware-uninstall-tools.pl

Первый этап (подготовка VM) закончен, останавливаем виртуальную машину. Теперь ее нужно экспортировать в OVF формате. Я использую в работе просто гипервизоры, поэтому в VMware Infrastructure Client нужно выбрать виртуальную машину, потом File->Virtual Appliance->Export , заполнить поля (там все просто) и нажать OK. Для VMware vSphere это делается чуть по-другому (по ссылке на форум Citrix, приведенной выше, это есть).
Теперь остается ждать. Экспорт идет очень долго! Чем больше размер виртуального диска, тем дольше.

Когда экспорт закончится, можно приступать к третьему этапу - импорту.


  • делаем через XenCenter сторадж, куда должен проводиться импорт, дефолтовым. Это важный момент - XenConvert не предлагает выбрать, куда конвертить, а заливает на дефолтовый сторадж!

  • запускаем XenConvert, выбираем экспорт из OVF на XenServer, заполняем поля (хост-мастер в пуле, логин-пароль). Запускаем процедуру импорта. Через некоторое время (намного, значительно быстрее, чем экспорт в VMware!) импорт завершиться. Будет сообщение о предупреждениях (warning), смело игнорируем.

  • НЕ СПЕШИМ ЗАПУСКАТЬ VM!!!!

  • в XenCenter проверяем настройки свежесозданной виртуальной машины. Меняем имя (по вкусу), проверяем память, CPU, настройки сети (мне пришлось править). Маленькая подсказка: если выставить MAC адреса виртуальных карточек те же, что и для VMware, потом будет меньше настраивать :)

  • логинимся на консоль XenServer'а. Находим uuid новой виртуалки:
    xe vm-list name-label=<vm name> params=uuid

  • очищаем в настройках VM параметр HVM boot:
    # xe vm-param-set uuid=<vm uuid> HVM-boot-policy=

  • переключаемся на использование pygrub:
    # xe vm-param-set uuid= PV-bootloader=pygrub

  • устанавливаем параметры загрузки:
    xe vm-param-set uuid= PV-args="graphical utf8"

  • в статье на форуме Citrix далее делают диск загрузочным. У меня все было сделано XenConvert, этот этап не нужен

Пора запускать VM. Осталось совсем чуть-чуть.
После загрузки виртуальной машины логинимся на консоль. Правим сетку - в /etc/sysconfig/network-scripting после старта слишком умный kudzu переименует ifcfg-ethX в ifcfg-ethX.bak. Останавливаем сетку:

# service network stop

и переименовываем назад :). После чего сеть можно запустить и она должна заработать. Если же меня не послушались и не установили вручную в настройках VM MAC адреса те же, что были настроены в VMware, то придется перенастроить сеть.

И последний этап - установка xen-tools. В XenCenter подключаем виртуальный DVD к VM, монтируем привод (имя устройства можно посмотреть справа от ссылки Eject) и из каталога Linux запускаем install.sh.

Все, финальная перезагрузка VM (чтобы стартовал xen-tools и для контроля) - и наша виртуалка готова к использованию!

1 комментарий:

  1. Небольшое дополнение-поправка: XenServer заставляет Linux работать в паравиртуальном режиме, если заставить стартануть в полной виртуализации — достаточно просто перенести образ (преобразовать) и сохранить MAC сетевух. Правда, я это делал в обычном CentOS 5 + Xen 3.4. Миграция проводилась вообще через промежуточный этам в виде KVM: VMware -> KVM ->Xen.

    А, ну и конечно же kudzu давно пора внести в кикстарт как "-kudzu" ;)

    ОтветитьУдалить