Миграция виртуальных машин с Xen 3.2 на XenServer 6.2 в Hetzner

Немного предыстории

В 2010 году для частного проекта я завел себе небольшой выделенный сервер на hezner.de. Время шло, железо совершенствовалось, дистрибутивы Linux снимались с тех. поддержки, появлялись новые задачи и возможности, а ресурсов для полного апгрейда софта на сервере катастрофически не хватало.

Так как старый сервер был виртуализован, появилась мысль взять новый сервер и смигрировать всё старое хозяйство на него, тем более, что у hetzner появился сервер EX40 по интересной цене. По сравнению со старым X3 стоимость аренды вырастала незначительно (около 8 евро, если платить без VAT), но в плане производительности это был огромный прорыв. Заняться миграцией мешало отсутствие большого кол-ва свободного времени и немного стоимость инсталляции (Setup fee) за сервер.

Пару недель назад я случайно обнаружил, что Hetzner в июле проводит акцию и отдает данные железки без Setup fee. Лень и жаба были побеждены, да и появилось немного свободного времени, чтобы осуществить сабжевый процесс.

Акция проводится только в июле, так что, кому нужно – налетай, не скупись, покупай живопись!

Установка XenServer

Про установку и настройку XenServer написано много, поэтому данный момент можно опустить. Подробная инструкция по установке и настройке приведена также в Wiki у hetzner.

Дистрибутив XenServer и файл ответов я разместил на старом сервере, со скоростью установки проблем не было.

Сразу после установки XenServer, я рекомендую добавить непривилегированного пользователя и закрыть доступ пользователю root к ssh, а также закрыть доступ к серверу для всех сетей кроме своих (если это, конечно, возможно). В дальнейшем можно на одну из виртуалок установить OpenVPN и использовать все преимущества управления через VPN. После настройки этих простейших механизмов защиты сервера можно спокойно приступать к препарации пациента.

Диски (кстати, мне достались новые) рекомендую объединить в RAID и разбить с таким учетом, чтобы оставалось ещё немного места для подключения к dom0 в качестве хранилища ISO образов, бэкапов, заливки обновлений ПО и тд.

За прошедший год, с момента релиза 6.2, вышло много обновлений, поэтому сразу после установки XenServer крайне рекомендуется обновить ПО и установить все патчи. Начинать лучше с SP1, после установки которого cписок патчей можно посмотреть через XenCenter и скачать с web по указанным ссылкам (меню Tools/Check for Updates).
Автоматическое обновление, если Вы не купили ТП, через XenCenter невозможно. Необходимо использовать CLI.
Для обновления ПО нужно скопировать все патчи в dom0, распаковать и последовательно для каждого патча выполнить следующие команды:

xe patch-upload file-name=/mnt/disk/ПАТЧ1.xsupdate
xe patch-pool-apply uuid=UUID_вывод_предудущей_команды

После установки обновлений требуется перезапустить сервисы командой:

xe-toolstack-restart

Список установленных патчей можно проверить командой:

xe patch-list

Версия XenServer 6.2 по умолчанию использует Open vSwitch, поэтому 99% статей и комментариев по настройке сетевого окружения не полностью подходят (часть про настройку сетевого интерфейса xebr0:1, хотя, наверное, можно жить с dummy интерфейсом). Обходится эта проблема достаточно просто: в XenCenter можно добавить дополнительные локальные сети и интерфейсы (необходимо выбрать сервер и открыть вкладку Networking).
После настройки дополнительной сети не забудьте настроить iptables (Firewall и NAT) для общения с внешним миром (если используются приватные сети).

Миграция виртуальных машин

На момент появления идеи миграции виртуальных машин, мой склероз помнил, что я виртуализовал свои серверы с использованием LVM (почти угадал :). К счастью, зайдя на машину я обнаружил, что у меня установлен Xen 3.2 (использовалась паравиртуализация), и это значительно упрощало задачу.

Для импорта виртуальных машин я воспользовался скриптом xva.py, который можно скачать тут.
На сервере Xen 3.2 для каждой виртуальной машины, необходимо выполнить команду:

python xva.py -c /etc/xen/VM.cfg -n –sparse -s IP_XenServer –username=root –password=”Password”

Виртуальная машина автоматически будет перенесена на новый сервер за несколько минут. Экспорт через файл происходил во много раз дольше (точно время не замерял, но VM с диском на 32Gb экспортировалась более часа).
Если сразу после запуска скрипт вываливается с сообщением

Unauthorised response from server. Exiting

проверьте, не намудрили ли Вы с паролем. У меня была проблема с точкой (“.”).

Если после успешного завершения экспорта/импорта вы получили сообщение приведенное ниже, то нужно будет ещё кое-что подкрутить на dom0 и в виртуальной машине.

VM Successfully streamed
With the options you supplied, you will need to SFTP/SCP the kernel/initrd to the server manually
Create the /boot/guest/208f7a74-126e-11e4-8a8c-002185153241 directory
Copy /boot/vmlinuz-2.6.26-2-xen-amd64 to /boot/guest/208f7a74-126e-11e4-8a8c-002185153241/vmlinuz
and copy /boot/initrd.img-2.6.26-2-xen-amd64 to /boot/guest/208f7a74-126e-11e4-8a8c-002185153241/initrd
Copy these to _all_ the nodes in the pool

А именно, скопировать файлы vmlinuz-* и initrd-* из dom0 Xen 3.2 на dom0 XenServer.
Так как мне нужно было перенести 3 виртуальных машины с одним ядром, то я не стал создавать для них отдельные каталоги (может быть и зря), а создал один каталог /boot/guest/lenny в который и поместил указанные файлы.

Для того, чтобы данные виртуальные машины могли грузиться, необходимо правильно настроить параметры PV-kernel, PV-ramdisk. В моем случае пришлось ещё очистить параметр PV-bootloader, который мешал работе.
Для настройки параметров виртуальных машин необходимо выполнить следующие команды:

xe vm-param-set uuid=UUID_VM PV-bootloader
xe vm-param-set uuid=UUID_VM PV-kernel=”/boot/guest/lenny/vmlinuz”
xe vm-param-set uuid=UUID_VM PV-ramdisk=”/boot/guest/lenny/initrd”

UUID_VM – идентификатор виртуальной машины (можно посмотреть командой xe vm-list)

Теперь можно пытаться загрузиться. В случае неудачи не выключайте виртуальную машину, а посмотрите путь к корневому устройству, под которыми видны диски/разделы в вашей виртуальной машине (в XenCenter вкладка Storage, параметр “Device Path”). Необходимо отредактировать параметр PV-args или через CLI или XenCenter. Я установил следующие параметры:

root=/dev/xvda ro clocksource=jiffies

Пытаемся грузиться ещё раз.
После успешной загрузки ОС не забудьте поправить файл /etc/fstab (указать правильное расположение swap), а также установить XenServer Tools. Для Debian Lenny подходит пакет xe-guest-utilities_6.2.0-1137_amd64.deb.

Вроде бы всё. Осталось только до конца месяца забэкапить старый сервер и отдать обратно Hetzner.
(c) Vadim Pavlov

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.