Виртуализация с помощью Xen в Linux

Xen - достаточно новый продукт на рынке средств виртуализации, но прирост производительности Linux и Apache значительно превосходит все виденное ранее. В данной статье рассматривается процедура установки и создания вирутальных доменов.

[Kris Buytaert. Перевод: Сгибнев Михаил (www.dreamcatcher.ru)]

Виртуализация с помощью Xen в Linux


by Kris Buytaert 01/26/2006

Перевод: Сгибнев Михаил

Xen - достаточно новый продукт на рынке средств виртуализации, но прирост производительности Linux и Apache значительно превосходит все виденное ранее. Изначально Xen разрабатывался как составная часть платформы Xenoserver, преднозначенной для организации распределенных вычислений. Иан Пратт, основной исследователь проекта Xenoserver в компьютерной лаборатории Кембриджского Университета возглавляет команду разработчиков.

В настоящее время Xen уже является нечто большим, чем часть этого проекта. Теперь многие дистрибутивы Linux и производители оборудования включают поддержку Xen в свои изделия. Как и многие проеты с открытым исходным кодом, у Xen имеется своя компания Xensource, которая занимается поддержкой коммерческих версий и обслуживанием корпоративных клиентов. На сегодняшний день Xen имеет все шансы стать крупным игроком в промышленности.

В компании X-Tend основной проблемой был недостаток машин для проверки новых дистрибутивов и приложений. Из-за финансовых трудностей не было возможности обеспечить клиентов достаточным количеством испытательных стендов. Я склоняюсь к мысли, что половина человечества имеет такие пролемы.

Давным-давно, мы использовали UserModeLinux, но современные пользователи находят этот механизм слишком сложным. Затем мы загружали образы Qemu с центрального сервера. Это работало. Единственной сложностью было то, что в случае отключения питания терялись настройки и все приходилось начинать с начала. Необходимо было что-то до предела автоматизированное, скриптованное и без X.

Сейчас мы расскажем о том, как Xen изменил нашу жизнь.

Что такое Xen?

Xen является монитором виртуальных машин для платформы x86 и поддерживает одновременное выполнение нескольких гостевых операционных систем с высокой производительностью и изоляцией ресурсов. Xen является продуктом с отккрытым исходным кодом и распространяется по GNU General Public License.

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

Установив Xen вы из обычной x86 получите совершенно иную платформу. Это больше не x86. Это машина Xen. Имеющееся разнообразие операционных систем не будет работать с вашей x86, они должны работать именно с Xen, хотя для конечного пользователя и приложений, которые работают на платформе, портированной на Xen, нет почти никакого различия.

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

В пределах Domain0 управлением виртуальных машин занимается демон xend. В свою очередь, он управляется утилитой командной строки xm.

С помощью нее вы можете управлять виртуальными доменами и создавать новые.

Xen и различные дистрибутивы

Мы запускали Xen на различных дистрибутивах, начиная от "антикварной" Suse 8.2 с ядром 2.4, до Debian и Fedora Core 4 со свежим ядром 2.6. В отличие от некоторых других проектов, Xen в настоящее время позволяет работать и с ядрами 2.4 и ядрами версии 2.6. В будущем, очевидно, поддержка ядер 2.4 будет исключена. Хотя люди утверждают, что установка Xen сложна, это все относительно. Начать лучше всего с GetXen.org, там можно взять tarball с необходимыми бинарными файлами и инструментарием, демонстрационный CD и ссылки на исходный код. На момент написания статьи, стабильной версией Xen была 2.0.7, но большинство использует бета-версии 3.0.

Установка очень проста. Сейчас мы развернем ядро Debian на Fedora Core 4. FC4 была установлена в минимальной установке. Xen мы инсталлировали и обновили следующими нехитрыми командами:
    
    $ yum update
    $ yum install xen
    $ yum install kernel-xen0
    $ yum install kernel-xenU
    
Разве можно сделать более просто? Теперь просмотрите файл конфигурации grub.conf на предмет наличия строк типа:
    
    title Xen 2.0 / XenLinux 2.6.9
      kernel /boot/xen.gz dom0_mem=131072
      module /boot/vmlinuz-2.6.9-xen0 root=/dev/hda1 ro console=tty0
    
У вас номер версии может отличаться. Если такие строки вы обнаружили, то самое время перезагрузиться. Вуаля, первая виртуальная машина загружена и прекрасно работает. Хотя вам кажется, что вы работаете на обычной машине x86, управляет всеми делами именно Xen.

Если xend стартовал во время начальной загрузки, то вы можете воспользоваться командой xm list:
    
    HOSTA:/etc/xen/scripts # xm list
    Name              Id  Mem(MB)  CPU  State  Time(s)  Console
    Domain-0           0      123    0  r----     41.2
    

Создание виртуальных доменов

Наш следующий шаг заключается в создании виртуальной машины. Самый простой способ сделать это состоит в том, чтобы или загрузить в сушествующий chroot образ существующего дистрибутива или собрать его самостоятельно. Xen поддерживает виртуальные блочные устройства (file-backed virtual block devices) (dd if=/dev/zero of=vmdisk bs=1k seek 2048k count=1), физические устройства (такие как /dev/hda9), LVM тома (phy:VolumeGroup/root_volume) или NFS root для ваших виртуальных машин. Я предпочитаю использовать логические тома, так как они предоставляют большую гибкость. На существующем у меня диске /dev/sda5 я создал логические тома для последующего их использования под разделы виртуальных машин:
    
    $ pvcreate /dev/sda5
    $ vgcreate vm_volumes /dev/sda5
    $ vgchange -a y vm_volumes
    $ lvcreate -L4096 -nroot.dokeos vm_volumes
    $ lvcreate -L2048 -nvar.dokeos vm_volumes
    $ lvcreate -L256 -nswap.dokeos vm_volumes
    $ lvcreate -L1024 -nwww.dokeos vm_volumes
    
Обычно, я в своем dom0 создаю каталог /vhosts, где я монтирую мои разделы. Оттуда, я устанавливаю первые пакеты ядра FC4 в chroot на фактическом будущем устройство root.
    
    $ yum --installroot=/vhosts/root.dokeos/ -y groupinstall Base
    
Сделаем несколько маленьких исправлений:
    
    $ MAKEDEV -d /path/dev -x console
    $ MAKEDEV -d /path/dev -x null
    $ MAKEDEV -d /path/dev -x zer
    
Почти все готово. Теперь необходимо создать файл конфигурации виртуальной машины. Большинство конфигурационных файлов Xen находится в каталоге /etc/xen, причем каждый виртуальный домен нуждается в собственном файле конфигурации. Выглядят они примерно следующим образом:
    
    [root@xen xen]# cat dokeos.x-tend.be
    kernel = "/boot/vmlinuz-2.6.11-1.1366_FC4xenU"
    memory = 128
    name   = "dokeos.x-tend.be"
    nics   = 1
    extra  = "selinux=0  3"
    
    vif    = ['ip = "10.0.11.13", bridge=xen-br0']
    
    disk   = ['phy:vm_volumes/root.dokeos,sda1,w'
             ,'phy:vm_volumes/var.dokeos,sda3,w'
             ,'phy:vm_volumes/www.dokeos,sda4,w'
             ,'phy:vm_volumes/swap.dokeos,sda2,w'
             ]
    
    root   = "/dev/sda1 ro"
    
дистрибутив Xen содержит файлы примеров, поэтому для вас не должно составить большого труда изменить конфигурацию "под себя". Теперь запустите вашу виртуальную машину командой xm create config_file_name. Если есть желание, добавьте параметр -c, для того, чтобы подключиться к консоли этого гостевого домена. Через несколько секунд вы должны будете получить приглашение системы на вход.

Если вы сделаете символическую ссылку на /etc/xen/auto, то виртуальная машина будет стартовать во время начальной загрузки (при условии, что выполняется скрипт xendomains)

Самостоятельная сборка виртуального домена

Ранее мы сделали гостевой домен Fedora на корневом домене Fedora, а сейчас займемся водружением Debian на Fedora. Для этого нам понадобится debootstrap, который можно найти в RPM, но если вы хотите произветси установку корректно, то вам понадобится обновленный сценарий конфигурации для Sarge. Теперь выполним настройку тома LVM, монтирования и использование debootstrap для установки Debian:
    
    $ debootstrap --arch i386 sarge root.hope/ http://ftp.be.debian.org/debian
    
Файл конфигурации для Debian выглядит следующим образом:

Примечание переводчика: в оригинале, мне кажется, ошибка - имя ядра и для FC4 и для Debian вряд ли будет одинаковое.
    
    kernel = "/boot/vmlinuz-2.6.11-1.1366_FC4xenU"
    
    memory = 128
    name   = "newhope.x=tend.be"
    nics   = 1
    
    vif    = ['ip = "10.0.11.14", bridge=xen-br0']
    
    disk   = ['phy:vm_volumes/root.hope,sda1,w'
             ,'phy:vm_volumes/var.hope,sda3,w'
             ,'phy:vm_volumes/cvsroot.hope,sda4,w'
             ,'phy:vm_volumes/swap.hope,sda2,w'
             ,'phy:vm_volumes/home.hope,sda5,w'
             ,'phy:vm_volumes/svnroot.hope,sda6,w'
             ]
    
    root   = "/dev/sda1 ro"
    
Поле этого выполните команду xm create newhope и просмотрите список выполняемых виртуальных машин:
    
    [root@xen xen]# xm list
    Name              Id  Mem(MB)  CPU  State  Time(s)  Console
    Domain-0           0      891    0  r----     62.3
    dokeos.x-tend.be   1      127    1  -b---     24.6    9601
    newhope.x-tend.be   2      127    1  -b---    177.2    9602
    
Управление виртуальными машинами Xen осуществляется довольно просто. Для корректного выключения или немедленной остановки используйте команды xm shutdown и xm destroy соответственно, а для доступа к консоли:
    
    $ xm console $id
    
и
    
    $ xencons localhost $port
    
Лучше пользоваться этими утилитами, чем telnet localhost $port. (Где порт 9600 + $id виртуальной машины)

Работа с сетью в виртуальном домене

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

Для каждого интерфейса, определяемого в виртуальной машине, Xen создаст интерфейс vifx.y, где x - идентификатор домена, а y - номер интерфейса в вашей виртуальной машине. Например, vif1.1 обращается к eth1 в домене с идентификатором 1.

Есть несколько способов поднять сеть, но мы сейчас разберем только один. Предположим, что у нас имеется сеть 192.168.11.0, а ваша физическая машина имеет адрес 192.168.11.2. Первой виртуальной машине мы присвоим адрес 192.168.11.3. Для этого необходимо войти на виртуальную машину и настроить eth0 так, как обычно вы это делаете.

Тепрь необходимо создать мост между реальным сетевым интерфейсом корневого домена и интерфейсом виртуального домена (vifx.y). Если вы еще не создали xen-br0, используете команду brctl addbr xen-br0. В данном примере, vif1.0 - имя первого Ethernet адаптера в первом виртуальном домене:
    
    $ brctl addif xenbr0 eth0
    $ brctl addif vif1.0
    
    HOSTA:~ # brctl show
    bridge name     bridge id               STP enabled     interfaces
    xen-br0         8000.000bdb90c517       no              eth0
                                                            vif1.0
    
Ваши интерфейсы eth0 и vif1.0 не нуждаются в IP адресе. Вы можете назначить адрес 192.168.11.2 на xen-br0 и маршрутизировать весь трафик для сети 192.168.11.0 на интерфейсе xen-br0.

Планы на будущее

В связи со скорым анонсом Intel микропроцессоров VT CPU, в окружении Xen станет возможным выполнение пропиетарных операционных систем. Включение Xen в свои дистрибутивы планируют многие компании, причем Red Hat хочет видеть его в ядре, а Suse уже добавила необходимые опции в Yast.

Статья взята с сайта DreamCatcher.

[ опубликовано 01/03/2006 ]

Kris Buytaert. Перевод: Сгибнев Михаил (www.dreamcatcher.ru) - Виртуализация с помощью Xen в Linux   Версия для печати