Время Xen: Виртуализируйте Linux, чтобы тестировать приложения (исходники)

Брайан Кларк,

Из-за постоянного потока обновлений и устранений ошибок в существующем программном обеспечении мир open source находится в постоянном движении. Попытки оставаться в курсе всех обновлений программного обеспечения могут отнять все рабочее время. Один из тонких моментов при обновлении вашего программного обеспечения -- это то, что вы никогда не знаете, будут ли работать ваши приложения после завершения обновления. Большинство систем управления пакетами предлагают возможность возврата к предыдущему состоянию, но этого зачастую недостаточно; в идеале, вы хотите поиграть с новыми обновлениями в тестовом режиме и опробовать их в таком окружении, где они не смогут ничему повредить.

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

Виртуализация часто используется для изоляции приложений и систем от всего остального на одном и том же аппаратном оборудовании (сродни игре в "песочнице"). Linux поддерживает много различных форм виртуализации, начиная от эмуляторов оборудования до полной виртуализации аппаратного обеспечения. Одно из последних достижений в списке технологий виртуализации -- это Xen, разработанный в Кембриджском университете (University of Cambridge). Xen заслуживает внимания благодаря своей беспрецедентной производительности и безопасности.

Что такое Xen

Разработанный в Кембриджском университете как исследовательский проект, Xen нашел большой отклик в сообществе open source. Xen -- это паравиртуализирующий монитор виртуальной машины (paravirtualizing VMM), то есть операционная система изменяется в определенных областях для выполнения запросов к гипервизору, тогда как приложения, запускаемые под управлением этой операционной системы остаются неизменны. Для сравнения, другие системы виртуализации, подобные VMWare, предлагают полную виртуализацию (что означает, что им не требуется модификация запускаемой операционной системы), но при этом им необходимо выполнять преобразование машинного кода в режиме реального времени, что не может не повлиять на производительность.

Так как Xen требует преобразования операционной системы, то вы не можете просто взять ядро Linux и запустить его под гипервизором Xen, пока ядро не портировано для архитектуры Xen. Однако, если система может использовать новое ядро Linux, которое портировано для архитектуры Xen, то вы можете запустить существующую систему без изменений.

Рисунок 1. Простая иллюстрация архитектуры Xen
Рисунок 1. Простая иллюстрация архитектуры  Xen

В поисках Xen

Исходный код Xen доступен на странице проекта (ищите ссылку в разделе Ресурсы), а если у вас уже установлен дистрибутив Linux, то возможно, вы сможете установить Xen при помощи установки/обновления пакетов. Вот основные дистрибутивы, в комплект которых входит Xen:

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

Использование Fedora Core

У меня есть работающая инсталляция Fedora Core 3, чтобы не раздувать статью, я расскажу, как запустить систему на Fedora Core.

Fedora уже привлекла внимание большого сообщества пользователей Xen, хотя пакеты только недавно были размещены на каналах разработки. Поскольку многие испытывают Xen на Fedora, вы, скорее всего, преуспеете в поиске интерактивной поддержки.

Инсталляция Xen

Для того чтобы помочь вам быстро и успешно начать работать с Xen, основное внимание в этом разделе уделено важным моментам руководства Quick Start Guide из раздела Ресурсы. Так как обновления Xen интегрированы в Fedora, то в Quick Start Guide скорее всего, со временем будут внесены изменения и, будем надеяться, эти изменения найдут свое отражение в Википедии.

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

Как только у вас будет запущена система, вам будет необходимо ее обновить до последней версии Fedora, называемой rawhide . Вы можете это сделать, задав для всех элементов каталога /etc/yum.repos.d/ enabled=0, кроме fedora-devel.repo, для которого должно быть enabled=1.

Теперь, после настройки вашего репозитория yum вам необходимо произвести обновление системы до rawhide, после чего вы можете запустить последний релиз Xen.

Листинг 1. Обновление FC3 для rawhide и инсталляция пакетов Xen

                
yum update  
yum install xen kernel-xen0 kernel-xenU

Затем создайте фиктивную файловую систему, с которой будете работать.

Листинг 2. Форматирование и настройка файловых систем Xen-сервера

                
mkdir -p /xen/base 
dd if=/dev/zero of=/root/base.img bs=1M count=1 seek=1024 
mkfs.ext3 /root/base.img 
mount -o loop /root/base.img /xen/base
			

После форматирования и монтирования файловых систем сервера Xen следующий шаг -- это инсталляция пакетов, необходимых для запуска чего бы то ни было на них. Для запуска Web-сервера на ваших Xen серверах вам необходимо инсталлировать набор пакетов Web-сервера. (Предупреждение: это может занять некоторое время . Запустите yum и отправляйтесь погулять.)

Листинг 3. Инсталляция пакетов Xen-сервера

                
yum --installroot=/xen/base -y groupinstall web-server \ 
		--enablerepo=base --disablerepo=development
			

(В это время стоит прогуляться.)

Вы инсталлировали все необходимые пакеты, и теперь вам нужно добавить простой файл fstab, который укажет серверам Xen, что в качестве корневого они будут использовать устройство sda1. Это корневое устройство на самом деле является виртуальным (предоставляемым гипервизором) устройством, но вряд ли ваши серверы об этом узнают.

Листинг 4. Файл fstab сервера Xen

                
/dev/sda1		/		ext3	defaults	1 1
none			/dev/pts	devpts  gid=5,mode=620	0 0
none                    /dev/shm        tmpfs   defaults	0 0
none                    /proc           proc    defaults	0 0
none                    /sys            sysfs   defaults	0 0

Сохраните этот файл как /xen/base/etc/fstab. Без нормальной инсталляции Fedora файл fstab не создастся. Скорее всего, в будущие версии Fedora будет включен инструмент для разрешения этой проблемы.

Наконец, вам необходимо выполнить рутинные действия для корректного запуска системы. На данный момент Xen имеет некоторые разногласия с initrd, поэтому, если вы хотите, чтобы система загрузилась, вам необходимо самостоятельно создать несколько устройств. Затем, чтобы все сработало гладко, будет полезно переместить библиотеки TLS; в данный момент они плохо взаимодействуют с Xen. Выполнив это, вы можете отмонтировать файловую систему.

Листинг 5. Последняя доработка перед запуском

                
for i in console null zero ; do MAKEDEV -d /xen/base/dev -x $i ; done  
mv /lib/tls /lib/tls.disabled 
mv /xen/base/lib/tls /xeb/base/lib/tls.disabled  
umount /xen/base/

Запуск Xen

Теперь, когда вы с трудом вручную настроили ваши гостевые системы, вы можете перегрузить машину и стартовать, используя ядро Xen. Вы, вероятно, увидите гораздо больше информации чем обычно выводится на экран, а также получите ужасное сообщение о библиотеке TLS (которую вы, согласно предыдущему разделу, переместили в недоступное место).

Xen требует конфигурационных файлов для каждого запускаемого сервера. Хотя вы можете создать один динамический конфигурационный файл для всех ваших серверов, я рекомендую создать два статических конфигурационных файла, по одному на каждый сервер. Как вы можете видеть, метка диска указывает серверам, что ваш образ -- это устройство sda1.

Листинг 6. Конфигурационные файлы сервера Xen

                
                /etc/xen/base
kernel ="/boot/vmlinuz-2.6.10-1.1141_FC4xenU"
memory = 64
name = "BaseServer"
nics = 1
disk = ['file:/root/base.img,sda1,w']
root = "/dev/sda1 ro"

/etc/xen/test
kernel ="/boot/vmlinuz-2.6.10-1.1141_FC4xenU"
memory = 64
name = "TestServer"
nics = 1
disk = ['file:/root/test.img,sda1,w']
root = "/dev/sda1 ro"

Для запуска серверов с помощью команды xend start запустите службу Xen и затем, с помощью команды xm create base создайте ваш BaseServer из конфигурационного файла base. После этих действий вы попадете в гостевую консоль Xen и сможете отследить процесс загрузки. Если в какой-то момент вы захотите выйти из гостевой консоли и вернуться обратно в консоль гипервизора, нажмите Ctrl-].

Использование Xen

Вы потратили некоторое время на изменение конфигураций и настройку вашей системы для запуска пары Xen серверов. И что же вы имеете после всей этой тяжелой работы?

Теперь у вас есть две копии системы с одинаковыми ядрами, виртуализированные на одной машине. Если ваш BaseServer представляет из себя устойчивое окружение, в котором вы будете запускать вашу Web службу в штатном режиме, то TestSever может обеспечивать последние обновления, предоставляемые Fedora rawhide. Вы можете по желанию обновлять вашу систему TestSever, пробуя все новые версии обновлений программного обеспечения -- и затем, когда вы почувствуете, что все достаточно стабильно, вы можете запустить TestSever как BaseServer.

Настройка BaseServer

Работа BaseServer -- это подходящий момент изменить конфигурацию службы apache httpd, которую вы будете запускать. Вы, возможно, захотите отключить ssl, удалив файл ssl.conf из папки /etc/httpd/conf.d/; в противном случае, вам придется генерировать сертификаты для серверов. Также вам может потребоваться добавить в систему пользователя apache.

Гипервизор Xen автоматически предоставляет вам для работы виртуальное сетевое устройство. Если вы можете запустить dhcp на этом устройстве, просто запустите dhclient eth0, после чего вы получите IP адрес для вашего BaseServer.

Настройка TestServer

После того как вы сконфигурировали BaseServer, выключите его, запустив poweroff из консоли BaseServer. Если вы уже вышли из консоли BaseServer, восстановите доступ к ней, используя xm console BaseServer.

Теперь скопируйте базовый файл образа, используя cp /root/base.img /root/test.img, тем самым вы получите дубликат копии файловой системы. Команда xm create -c test запустит такой же сервер, как и BaseServer, но под названием TestServer. Войдите в TestServer и активируйте поддержку rawhide так, как вы делали в разделе Installing Xen, затем запустите yum update.

Ваш TestServer сконфигурирован так же как и ваш BaseServer, но вы его обновили последними пакетами, предлагаемыми Fedora rawhide. Самое время развлечься тем, что посмотреть, работает ли еще ваш Web сайт.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=6344