В начале марта в моем зоопарке завелся первый настоящий сервер на Supermicro X7DB. Вообще мое руководство предпочитает особо не тратиться и собирать сервера из десктопного железа, поэтому первый свой настоящий сервер я покупал себе сам.
Ну и раз это моя машина, я могу делать на ней что угодно — я решил «пощупать» технологии виртуализации, конкретно xen.
Xen — это гипервизор, позволяющий распределять ресурсы между несколькими виртуальными машинами. По факту это линукс-ядро с драйверами, реализующими функции распределения ресурсов, запускающееся при старте компьютера и запускающее из-под себя управляющую виртуальную машину (в терминологии xen — домен).
Xen умеет работать в 2 режимах:
PV (паравиртуализация) — использует специально подготовленное для работы в виртуальной среде ядро ОС, позволяет достичь производительности, сопоставимой с работой на реальном железе. Подходит для большинства линукс-систем, богатые залежи модифицированных ядер есть здесь
HVM (аппаратная виртуализация) — с помощью QEMU эмулирует «железо», виртуальная машина «не знает», что она работает в виртуальной среде. Подходит для Windows — систем или линуксов, в которых по какой-то причине нельзя использовать модифицированное ядро.
Управляющий домен (dom0) — виртуальная машина, всегда стартующая при запуске xen, которая отличается от гостевых доменов (domU) наличием прав на управление гипервизором. В нашем случае Ubuntu, на которую мы устанавливали xen, является dom0, и именно в ней мы разворачиваем все средства управления гипервизором.
Собственно, управлять domU можно несколькими способами:
- С помощью toolstack-а XL
- С помощью утилит xen-tools
- С помощью библиотеки libvirt
Остальные способы (графический virt-manager, web-gui) так или иначе использует для работы libvirt.
Итак, исходная конфигурация платформы, на которой мы будем проводить опыты:
- MB: Supermicro X7DB
- CPU: 2x Intel Xeon E5320
- RAM: 4Gb PC-5300 ECC
- HDD: 6x SCSI Seagate Cheetah ST3300007LC
- RAID: Adaptec 2020zcr
Основную систему (dom0) решил устанавливать на RAID5 — «вдруг чего», чтобы при «выпадании» 1 из винтов система продолжала работать. По спецификации RAID5 требует 3 и более дисков, вот 3 ему и отдадим. Остальные разобьем (пока) как отдельные тома и даже создавать точки монтирования при установке dom0 не будем.
Разбивка производится через встроенную в контроллер утилиту (интерфейс интуитивно понятен, увидел — прослезился, уж очень он похож на Ontrack Disk Manager из моего сопливого детства)
При создании массива предпочтительно выбирать метод создания Build / Verify, будет быстрее (подробнее о методах создания массивов — здесь)
В качестве управляющего домена (dom0) использую Ubuntu server 14.04, описывать процесс ее установки не имеет смысла, инструкций вагон. Начнем с момента, когда у нас стоит «чистая» система, готовая к дальнейшим издевательствам.
Установка гипервизора.
В последних версиях убунты гипервизор устанавливается 1 коммандой:
apt-get install xen-hypervisor-amd64 xen-tools
Все, установили. Ксен прописался в grub и доступен при загрузке. НО, почему-то по дефолту загружается не он, а обычное ядро убунты.
Исправим эту досадную оплошность:
mv /etc/grub.d/10_linux /etc/grub.d/20_linux && mv /etc/grub.d/20_linux_xen /etc/grub.d/10_linux_xen
И обновим груб:
update-grub
Все, теперь xen запускается при загрузке автоматически.
Перезагружаемся, проверяем:
root@xen:/etc/archipel# xl list Name ID Mem VCPUs State Time(s) Domain-0 0 769 8 r----- 8871.3
Значит, все работает.
Замечание:
При установке из пакетов в Ubuntu 14.04 устанавливается Xen 4.4, утилитой управления в котором является xl, в то время как большинство манов (и как оказалось — приложений) написано под 4.1, где утилитой является xm. В 4.4 xm вроде как deprecated, однако если необходимо — можно вернуть его в качестве дефолтного тулстака. Для этого правим /etc/default/xen:
TOOLSTACK=xm
и перезагружаемся либо перезапускаем демон xen
/etc/init.d/xen restart
Установка и настройка libvirt
Сегодня в завтрашний день не все могут смотреть. Но мы-то можем, поэтому, заглянув немного вперед, мы сразу установим то, что нам пригодится в будущем — библиотеки Libvirt.
Libvirt — библиотека для управления виртуализацией, которая поддерживает большинство современных гипервизоров. Нам она пригодится в будущем для работы «обвеса» и свистоперделок в виде веб-интерфейса управления.
apt-get install python-libvirt libvirt-bin libvirt0 python-imaging python-numpy virtinst
Установка потянет за собой еще ряд зависимостей, установим, пригодятся в будущем.
Укажем libvirt на то, что по умолчанию он должен работать с xen:
mcedit /etc/libvirt/libvirt.conf
Раскомментируем строку uri_default и приведем его к следующему виду:
uri_default = "xen:///system"
Многие советуют добавить исключение в apparmor:
ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/ apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd /etc/init.d/apparmor restart
Можно перезапускать службу и начинать учится рулить
/etc/init.d/libvirt-bin restart
Проверяем:
virsh list ID Имя Статус ----------------------------------------------------
тут dom0 не отображается, так и надо
Предстартовая подготовка
Сеть
Чтобы иметь возможность пробрасывать сеть в гостевые ОС, необходимо настроить сетевой интерфейс на работу в режиме бриджа:
apt-get install bridge-utils
/etc/network/interfaces приводим к следующему виду:
auto lo eth0 xenbr0 iface lo inet loopback iface eth0 inet manual iface xenbr0 inet static bridge_ports eth0 bridge_maxwait 0 address xxx.xxx.xxx.xxx netmask 255.255.255.0 gateway xxx.xxx.xxx.xxx broadcast xxx.xxx.xxx.xxx dns-nameserver 8.8.8.8
После этого перезапускаем сервер, дабы убедиться что все работает корректно.
Можно и не перезапускать, а выполнить команду
ifdown eth0 && ifup xenbr0 && ifup eth0
но я рекомендую все же перезапустить машину — лучше определить наличие каких-либо граблей на этом этапе, чем позже.
Вот здесь пишут, что для вланов нужно отдельно прописывать бриджи, но у меня тегированый влан в гостевую ОС приехал без каких-либо дополнительных настроек.
Диски
Xen позволяет использовать в качестве дискового хранилища виртуальных машин как образы, так и lvm-разделы.
Что из них лучше — четкого ответа нет, по-моему, и по сей день. Тут как вам удобно — можно создат папку /vm и складывать туда образы, создавая их коммандой
dd if=/dev/zero of=/vm/domU-disk.img bs=1024k count=<размер_в_MB> mkfs.ext4 domU-disk.img
А можно как я -делать LVM-разделы.
1 из 3 оставшихся после создания RAID5 винтов я отвел под виртуальные машины, он у меня /dev/sdb. Создаю на нем LVM размером в 10 гиг:
lvs pvcreate /dev/sdb1 vgcreate vg /dev/sdb1 lvcreate -L10240M -n linux vg
Все, раздел для установки гостевой Linux-системы готов.
Больше информации по разбивке дисков и установке гостевых ОС можно добыть здесь.
На этом установка и предварительная настройка xen завершена, система готова принимать в себя гостевые виртуальные машины.
В следующей статье мы научимся создавать гостевые машины различными консольными утилитами, а в дальнейшем осилим и WEB-интерфейс.
Сцылки:
Установка xen 4.4 в ubuntu для любителей собирать самому
Если не стартует xen после установки
Libvirt. Установка и не только.