Xen - довольно распространённая и хорошо зарекомендовавшая себя система виртуализации. В ней можно выделить три главных компонента:
dom0, как и гипервизор, в системе может быть только один. domU может быть несколько. Для простоты в статье будем называть dom0 хост-системой, а domU - гостевыми системами, хотя строго говоря - они оба скорее гости, просто один из них имеет право управлять гипервизором.
Сервисы Xen, работающие в dom0 и осуществляющие управление гипервизором, написаны на Python. Соответственно, файлы конфигурации являются фактически исходными текстами на языке Python.
Ниже собран мой небольшой опыт работы с этой системой виртуализации. Не описываются настройка репозиториев, настройка сети, фаерволла и другого базового ПО. Описано только то, что имеет непосредственное отношение к настройке виртуализации.
Устанавливаем пакет xen-linux-system:
# apt-get install xen-linux-system
Выставляем приоритет загрузки гипервизора Xen из GRUB:
# dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen
Для отмены приоритета загрузки Xen из GRUB можно выполнить следующую команду:
# dpkg-divert --rename --remove /etc/grub.d/20_linux_xen
Чтобы настройки GRUB вступили в силу, запустим обновление конфигурации GRUB:
# update-grub
Образы гостевых систем будем размещать на логических томах LVM2, поэтому сначала установим утилиты для управления логическими томами:
# apt-get install lvm2
Создадим новый физический том на специально выделенном для этого разделе:
# vgcreate vg0 /dev/sda3
Установим инструменты для создания образов и управления гостевыми системами:
# apt-get install xen-tools
Пропишем в файле /etc/xen-tools/xen-tools.cfg опции, задающие настройки создаваемой по умолчанию виртуальной машины:
# Использовать для образов гостевых систем физический том VG0 lvm = vg0 # Использовать debootstrap для установки системы на гостевой том install-method = debootstrap # Выделить для вновь создаваемой гостевой системы 10 гигабайт на логическом томе size = 10Gb # По умолчанию создавать гостевую систему, которой выделено 2 гигибайта оперативной памяти memory = 2Gb # По умолчанию создавать гостевую систему, которой выделен 1 гигабайт раздела подкачки #noswap = 0 swap = 1Gb # По умолчанию использовать файловую систему ext4 fs = ext4 # Настройки монтирования раздела ext4 ext4_options = noatime,nodiratime,errors=remount-ro # Настройки задают ветку дистрибутива, версию ядра и загрузочного образа dist = `xt-guess-suite-and-mirror --suite` image = sparse kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` pygrub = 1 mirror = `xt-guess-suite-and-mirror --mirror`
Все гостевые системы будут подключаться к виртуальному сетевому мосту, соединённому с физической сетевой картой. На самом деле сетевой мост является по сути виртуальным коммутатором, поддерживающим протокол STP, но по сложившейся традиции называется сетевым мостом. Установим утилиты для управления сетевым мостом:
# apt-get install bridge-utils
Настроим интерфейс xenbr0, подсоединив его к физическому сетевому интерфейсу eth0. Для этого впишем в файл /etc/network/interfaces следующие настройки:
auto xenbr0 iface xenbr0 inet static address 10.0.0.1 netmask 255.255.255.0 bridge_ports eth0 bridge_maxwait 0
Для создания образа новой гостевой системы с именем ns, настройками по умолчанию, но с двумя выделенными системе ядрами процессора, введём на хост-системе следующую команду:
# xen-create-image --hostname ns --ip 10.0.0.2 --netmask 255.255.255.0 --gateway 10.0.0.1 --vcpus 2 --dist wheezy
После создания образа будет выведен пароль пользователя root в только что созданной системе. Его необходимо запомнить или записать и поменять при первом запуске созданного образа.
Теперь можно отредактировать конфигурацию только что созданной гостевой машины /etc/xen/ns.cfg:
vif = [ 'script=vif-bridge, bridge=xenbr0' ]
При запуске гостевой машины её первый интерфейс будет подключен к мосту хост-машины xenbr0. Если необходимо создать несколько сетевых интерфейсов, можно перечислить их внутри квадратных скобок через запятую.
Запуск гостевой машины:
# xm create /etc/xen/ns.cfg
Просмотр списка активных гостевых машин:
# xm list
Просмотра потребления ресурсов внутри каждой гостевой машины:
# xm top
Остановка гостевой машины:
# xm shutdown ns
Вход на консоль гостевой машины:
# xm console ns
Для отключения от консоли можно нажать Ctrl и ] К сожалению, эта же комбинация клавиш используется в telnet, поэтому я предпочитаю сразу настроить сеть и SSH, а дальнейшую настройку гостевой системы осуществлять уже через SSH.
Файл конфигурации гостевой системы может выглядеть примерно следующим образом:
# Загрузчик pygrub позволяет передавать в ядро настройки, # подобно тому как это делается при использовании GRUB bootloader = '/usr/lib/xen-4.1/bin/pygrub' # Количество процессорных ядер и объём памяти, выделяемый гостевой системе vcpus = '2' memory = '2048' root = '/dev/xvda2 ro' disk = [ 'phy:/dev/vg0/ns-disk,xvda2,w', # Образ диска находится на томе LVM2 'phy:/dev/sda3,xvda3,w' ] # Том хост-системы монтируется внутри гостевой системы # Имя гостевой системы name = 'ns' # На гостевой системе будут созданы интерфейсы eth0 и eth1, подключенные # соответственно к сетевым мостам хост-системы xenbr0 и xenbr1 vif = [ 'script=vif-bridge, bridge=xenbr0', 'script=vif-bridge, bridge=xenbr1' ] # Что делать с гостевой системой, если она решила выключиться или перезагрузиться on_poweroff = 'destroy' on_reboot = 'restart' # Что делать с гостевой системой, если произошла ошибка на хост-системе on_crash = 'restart' # Отдельно задаём поведение гостевых систем при перезапуске сервиса управления on_xend_start = 'ignore' on_xend_stop = 'ignore'
Я для себя сформировал следующий контрольный список:
# apt-get install vim less apt-file resolvconf binutils screen rsync # apt-get install sysstat tcpdump file dnsutils telnet psmisc # apt-get install openntpd sudo postfix bsd-mailx logwatch
Не всё из этого необходимо, поэтому вы можете оставить из этого списка то, что вам нужно и дополнить его пакетами по своему вкусу. При установке openntpd и postfix стоит подумать об их настройке.
Если вам когда-нибудь понадобится воспользоваться консолью гостевой системы, стоит установить пакеты, ответственные за консоль, клавиатуру и локаль:
# apt-get install console-setup keyboard-configuration
Соответственно, можно задать их настройки при помощи следующих команд:
# dpkg-reconfigure console-setup # dpkg-reconfigure keyboard-configuration # dpkg-reconfigure locales
Ниже приведены пункты конфигурирования, отличающиеся от значений по умолчанию, которые я обычно выбираю для настройки этих пакетов:
Keyboard layout: Other Country of origin for the keyboard: Russian Keyboard layout: Russian Encoding to use on the console: UTF-8 Character set to support: Cyrillic - KOI8-R and KOI8-U Default locale for the systemm environment: ru_RU.UTF-8
При остановке демона xen, а также при выключении и перезагрузке системы, демон по умолчанию пытается сохранить состояние всех гостевых систем в каталог /var/lib/xend/storage, из-за чего может закончиться всё место на диске.
Изменить это поведение можно в файле /etc/default/xendomains настройкой значения XENDOMAINS_SAVE. Можно указать другой каталог, в котором есть достаточно места для сохранения образов оперативной памяти гостевых систем, а можно полностью отключить сохранение, указав пустое значение:
XENDOMAINS_SAVE=
Чтобы удалить сохранённые образы памяти гостевых систем, можно воспользоваться следующими командами:
# cd /var/lib/xen # find . -type f -delete
По умолчанию при перезагрузке хост-системы восстанавливается сохранённое состояние гостевых систем. Если мы отключили сохранение и восстановление гостевых систем, то гостевые системы запущены не будут. Чтобы гостевые системы автоматически загружались при загрузке хост-системы, нужно создать каталог автозапуска и поместить внутрь него символические ссылки на конфигурации необходимых гостевых систем:
# mkdir /etc/xen/auto # cd /etc/xen/auto # ln -s /etc/xen/ns.cfg .
Гостевая система долго запускается, а затем выдаёт ошибку настройки сети:
"Error: Device 0 (vif) could not be connected. Could not find bridge, and none was specified".
В этом случае нужно просто отключить скрипт настройки сети, который запускается для всех гостевых систем. Для этого нужно закомментировать строку в файле /etc/xen/xend-config.sxp на хост-системе:
#(vif-script vif-bridge)
Если команда xm list выдаёт ошибку:
Error: Unable to connect to xend: No such file or directory. Is xend running?
При запуске демонов xen при помощи команды /etc/init.d/xen start выводится ошибка:
[FAIL] Starting Xen daemons: xenstored xenconsoled xend failed!
И в журнале /var/log/xen/xend.log имеется запись вида:
[2013-12-06 09:21:27 4789] ERROR (SrvDaemon:349) Exception starting xend (unclosed token: line 1282, column 32)
Значит повреждено содержимое хранилища xen в каталоге /var/lib/xend и для запуска демонов xen его необходимо очистить при помощи команд:
# cd /var/lib/xend # find . -type f -delete