Xen

Материал из ALT Linux Wiki
42px-Wikitext-ru.svg.png
Эту статью следует викифицировать.
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Осторожно пока UNDERCONSTRUCTION

Введение

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

Hypervisor

Это собственно Xen - маленькое ядро (в разы меньше, чем ядро опероационной системы), загружаемое первым и управляющее работой виртуальных машин. Обычно находится в /boot/xen.gz. Гипервизор исполняется в нулевом круге защиты CPU. Гипервизор умеет управлять памятью, процессором и частично ACPI, а также предоставляет API гипервызовов (hypercall), с помощью которых ядра операционных систем в виртуальных машинах могут с ним общаться. Загрузившись, гипервизор загружает ядро dom0.

Domain 0

Он же dom0 - привилегированная виртуальная машина, имеющая доступ к практически всему железу и имеющая права давать гипервизору команду на запуск новых виртуальных машин. На практике это обычная Linux-система, единственное, чем она ограничена - это объёмом памяти. Обычно в такой системе установлен минимальный набор программ, демон управления xen, утилиты для управления xen, утилиты для создания виртуальных машин, и программный сетевой мост (bridge) который позволяет другим виртуальным машинам попадать в сеть. Виртуальные жесткие диски, предоставляемые Xen, также экспортируются из dom0. Обычно это файлы подключеные через loopback/blktap, либо LVM тома.

Domain U

domU - это собственно виртуальная машина, запускаемая dom0. Получает свой участок памяти, жёсткие диски и сетевой интерфейс. Может быть запущена, остановлена, приостановлена, перезагруженна, задамплена на диск, перемещена в том числе без остановки на другую машину (live migration).

Ядро xen-dom0 в ALT Linux

Ядро dom0 может работать как в dom0, так и в domU, собрано со всеми стандартными опциями наших ядер.

Установка

Установка загрузчика

Для загрузки Xen требуется использование загрузчика, поддерживающего multiboot (grub поддерживает, lilo - нет). Про настройку grub можно почитать тут: Grub#Как загрузить Xen?

Установка Xen

Установка самого XEN

# apt-get install xen-hypervisor xen-runtime xen-libs xen # update-kernel -t xen-dom0

Перезагружаемся в XEN, далее:

# service xend start

Проверим, что все в порядке:

[root@wintermute ~]# xm info
host                   : wintermute.tld
release                : 2.6.18-xen-dom0-alt6.M40.1
version                : #1 SMP Tue Mar 4 22:42:44 MSK 2008
machine                : i686
nr_cpus                : 4
nr_nodes               : 1
sockets_per_node       : 2
cores_per_socket       : 1
threads_per_core       : 2
cpu_mhz                : 2392
hw_caps                : bfebfbff:00000000:00000000:00000080:00004400
total_memory           : 4095
free_memory            : 3540
xen_major              : 3
xen_minor              : 1
xen_extra              : .2
xen_caps               : xen-3.0-x86_32p
xen_scheduler          : credit
xen_pagesize           : 4096
platform_params        : virt_start=0xf5800000
xen_changeset          : unavailable
cc_compiler            : gcc version 4.1.1 20070105 (ALT Linux, build 4.1.1-alt11)
cc_compile_by          : builder
cc_compile_domain      : rio.altlinux.org
cc_compile_date        : Tue Mar  4 23:38:33 MSK 2008
xend_config_format     : 4

Поставим xend в автозапуск:

# chkconfig xend on

Настройка сети в XEN

Ещё есть проблема актуальная для XEN начиная с версии 3.2.0 - там страшно кривой скрипт для запуска сетевого бриджа. Решается она переносом настройки бриджа в /etc/net.

Зачем нужен бридж?

В XEN сеть реализована так: для каждой(в том число dom0) виртуальной машины создаётся n виртуальных сетевых интерфейсов. Каждый представляет собой две виртуальные сетевые карты соединенный между собой одна находящаяся в DomX под названием ethY, а другая в Dom0 под названием vifX.Y (где X - номер виртуальной машины а Y больше или равно 0 и меньше n). На этом то, что предоставляет Xen сам по себе, заканчивается.

Далее вопрос: что с этим всем делать?

Вариант 1. присвоить каждому интерфейсу по ip адресу. так чтобы каждая пара была в своей сети. Поскольку в этом варианте данные ходят между dom0 и каждым доменом в отдельности, при этом домены не имею выхода во внешнюю сеть этот вариант используется редко.

Вариант 2. Продолжение первого, но при этом организовать например routing пакетов во внешнюю сеть и между виртуальными машинами. То есть dom0 становится роутером этой сети.

Вариант 3. Продолжение 2го но ещё включается NAT.

Вариант 4. Сделать bridge и объединить им реальную сетевую карту (она переименовывается в p<oldname>, интерфейс лишается ip и mac адресов) и коннекторы во все остальные виртуальные машины. то есть dom0 выполняет функцию свича. Любопытно что, в xen до 3.2 в dom0 ip и mac старой сетевухи присваивается интерфейсу ethY, а в 3.2 присваивается бриджу.

Таким образом bidge является самым удобным способом работы виртуальных машин с сетью, так как для сети машина с xen выглядит как свич на котором висят машины.

Для работы разных вариантов в xen есть скрипты по паре для разных вариантов, один (network-*) запускается при запуске системы и настраивает сеть в целом и vif-* который вызывается при старте каждого нового сетевого интерфейса в виртуальных машинах.

Собственно настройка бриджа

Стоит рассказать про настройку брижда подробнее, так как это самый удобный и востребованый вариант сети.

Установка виртуальной машины

Делаем образ машины. Я использовал один из собственноручно приготовленных openvz-темплейтов.

# mkdir -p /xen/alt
# dd if=/dev/zero of=/xen/alt.img bs=1M seek=10240 count=0 — создаем 10 ГБ «раздел» для машины
# mkfs.ext3 /xen/alt.img
# mount -o loop /xen/alt.img /xen/alt/
# cd /xen/alt && tar xf /altlinux-4.0.tar.gz

# chroot /xen/alt/ /bin/bash
# vim /etc/resolv.conf — установим нужный nameserver
# vim /etc/apt/sources.list — установим правильный репозиторий (можно пропустить, если устраивает тот, что преднастроен внутри контейнера)
# apt-get update && apt-get install kernel-image-xen-domu

Поправим /etc/fstab в чруте, чтобы выглядело примерно так:

/dev/hda1       /               ext3    defaults    0       1

Выходим из чрута:

# exit

Отмонтируем чрут: # umount /xen/alt

Пишем конфигурационный файл /etc/xen/alt:

kernel = "/boot/vmlinuz-2.6.32-xen-dom0-alt11"
memory = 256
name = "alt"
root = "/dev/hda1 ro"
extra = "xencons=tty"
disk = [ 'file:/xen/alt.img,hda1,w' ]

Пробуем запустить: # xm create -c alt

В конце концов должен выдать приглашение на логин, куда собственно и нужно логиниться.

Для выхода из консоли нажать Ctrl-].