Небольшой мануал по установке Ganeti 2.4.1 и Xen 4.0.1 в Ubuntu 10.04

Ganeti — это программное обеспечение для управления кластером Xen или KVM серверов. Проект очень хорошего качества, но хотел-бы предупредить — пока нет смысла пытаться использовать веб интерфейс для Ganeti Ganeti Web Manager, проект очень сырой (версия 0.6, возможно в будущем будет лучше).

Все нижеперечисленные инструкции необходимо выполнить на всех серверах (нодах) кластера, один из серверов будет главным (мастер). Там, где необходимо что-то настраивать на мастер-ноде будет отдельное примечание.

Также, для Ganeti желательно использовать LVM (хотя диски виртуальных машин могут храниться и в виде файлов). Группа томов должна называться xenvg, тогда не нужно будет все время указывать название.

Начнем конечно-же с установки Xen в Ubuntu 10.04…

Установка XEN 4.0.1 в Ubuntu 10.04:

Основано на данном wiki с некоторыми изменениями.

Устанавливаем необходимые для сборки пакеты:

apt-get install bcc bin86 gawk bridge-utils iproute libcurl3 libcurl4-openssl-dev bzip2 module-init-tools transfig tgif texinfo texlive-latex-base texlive-latex-recommended texlive-fonts-extra texlive-fonts-recommended pciutils-dev mercurial build-essential make gcc libc6-dev zlib1g-dev python python-dev python-twisted libncurses5-dev patch libvncserver-dev libsdl1.2-dev libjpeg62-dev iasl libbz2-dev e2fslibs-dev git-core uuid-dev ocaml libx11-dev bison flex


Т.к. я использую 64 битный Ubuntu, то мне также понадобились:

apt-get install gcc-multilib xz-utils


Скачиваем, распаковываем и переходим в директорию с исходниками Xen:

wget http://bits.xensource.com/oss-xen/release/4.0.1/xen-4.0.1.tar.gz
tar -xzvf xen-4.0.1.tar.gz
cd ./xen-4.0.1


Собираем и устанавливаем:

make xen
make tools
make stubdom
make install-xen
make install-tools PYTHON_PREFIX_ARG=
make install-stubdom


В /boot должны появится файлы вида xen*.gz. Это ядро Xen.

Также нам понадобится собрать ядро с поддержкой Xen. Получаем исходники ядра из репозитария Xen:

cd /usr/src
git clone git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen


Переключаемся на ветку 2.6.32:

cd linux-2.6-xen
git reset --hard
git checkout -b xen/stable-2.6.32.x origin/xen/stable-2.6.32.x


Branch xen/stable-2.6.32.x set up to track remote branch refs/remotes/origin/xen/stable-2.6.32.x.
Switched to a new branch «xen/stable-2.6.32.x»

git pull
git log | less


Копируем настройки нашего текущего ядра, они будут нашим шаблоном:

cp /boot/config-2.6.32-31-server .config


Запускаем конфигуратор:

make menuconfig


Заходим в меню:



Отключаем:



Выходим из конфигуратора. Для дальнейшей настройки гораздо проще отредактировать файл .config вручную. Ниже приведены мои настройки. Такое ядро может быть и dom0 и запускаться в виртуальных машинах в режиме паравиртуализации:

CONFIG_XEN=y
CONFIG_XEN_PVHVM=y
CONFIG_XEN_MAX_DOMAIN_MEMORY=128
CONFIG_XEN_SAVE_RESTORE=y
# CONFIG_XEN_DEBUG_FS is not set
CONFIG_SWIOTLB_XEN=y
CONFIG_MICROCODE_XEN=y
CONFIG_XEN_DOM0=y
CONFIG_XEN_PRIVILEGED_GUEST=y
CONFIG_XEN_DOM0_PCI=y
# CONFIG_XEN_PCI_PASSTHROUGH is not set
CONFIG_PCI_XEN=y
CONFIG_XEN_PCIDEV_FRONTEND=y
CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_NETXEN_NIC=y
CONFIG_XEN_NETDEV_FRONTEND=y
CONFIG_XEN_KBDDEV_FRONTEND=y
CONFIG_HVC_XEN=y
# CONFIG_XEN_WDT is not set
CONFIG_XEN_FBDEV_FRONTEND=y
CONFIG_XEN_BALLOON=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XEN_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=y
CONFIG_XEN_BLKDEV_BACKEND=y
# CONFIG_XEN_BLKDEV_TAP is not set
CONFIG_XEN_PCIDEV_BACKEND=y
CONFIG_XEN_PCIDEV_BACKEND_VPCI=y
# CONFIG_XEN_PCIDEV_BACKEND_PASS is not set
# CONFIG_XEN_PCIDEV_BACKEND_SLOT is not set
# CONFIG_XEN_PCIDEV_BACKEND_CONTROLLER is not set
# CONFIG_XEN_PCIDEV_BE_DEBUG is not set
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_MCE=y
CONFIG_XEN_XENBUS_FRONTEND=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_S3=y
CONFIG_ACPI_PROCESSOR_XEN=y
CONFIG_XEN_PLATFORM_PCI=y


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

make
make modules_install install


В директории /boot появятся следующие файлы:

ls /boot -lt


-rw-r--r-- 1 root root   109399 2011-05-02 21:57 config-2.6.32.39
-rw-r--r-- 1 root root  2163371 2011-05-02 21:57 System.map-2.6.32.39
-rw-r--r-- 1 root root  4198208 2011-05-02 21:57 vmlinuz-2.6.32.39


В директории /lib/modules/ должна появится директория с новыми модулями ядра:

ls /lib/modules/ -lt


drwxr-xr-x 3 root root 4096 2011-05-02 21:57 2.6.32.39


Создаем ramdrive для нового ядра и обновляем настройки grub2:

cd /boot
update-initramfs -c -k 2.6.32.39
update-grub


В /etc/xen/xend-config.sxp, раскомментируем:

(xend-unix-server yes)


Перезагружаемся чтобы проверить новое ядро. Если все в порядке, редактируем /etc/xen/xend-config.sxp:

(xend-unix-server yes)
(dom0-min-mem 0)
(xend-relocation-server yes)
(xend-relocation-port 8002)
(xend-relocation-hosts-allow '')


Настраиваем grub2 /boot/grub/grub.cfg. Память для dom0 ограничим 1 Гб, также оставим только один процессор. Это нужно для оптимального быстродействия виртуальных машин:

menuentry 'xen 4.0.1 2.6.32.39' {
        insmod raid
        insmod mdraid
        insmod ext2
        set root='(md1)'
        search --no-floppy --fs-uuid --set e373e426-096e-4f20-a74d-66a05d5635a2
        multiboot /xen.gz dummy=dummy dom0_mem=1024M dom0_max_vcpus=1 
        module    /vmlinuz-2.6.32.39 dummy=dummy root=UUID=1e366d40-26d7-4cb1-8c1c-0fd2a0f98ee8 ro nomodeset
        module    /initrd.img-2.6.32.39
}


Включаем запуск xend и xendomains при старте системы:

sudo update-rc.d xend defaults 20 21
sudo update-rc.d xendomains defaults 21 20


Перезагружаемся. Если система загрузилась, проверяем работает-ли Xen:

cat /proc/xen/capabilities

control_d

xm list

xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  6940     8     r-----      9.5


Проверяем сетевой мост:

brctl show

bridge name	bridge id		STP enabled	interfaces
eth0		8000.001b21a32b6e	no		peth0


Все в порядке. Делаем резервную копию grub.cfg — на всякий случай.

cp /boot/grub/grub.cfg /boot/grub/grub.cfg.backup


Про сборку ядра с поддержкой Xen можно почитать здесь:

wiki.xensource.com/xenwiki/XenParavirtOps

Ganeti может использовать DRBD — что-то вроде сетевого RAID 1. Желательно установить, чтобы не видеть постоянные сообщения об ошибках в логах Ganeti, связанные с отсутствием устройств DRBD в /dev, хотя вполне можно обойтись и без DRBD.

Установка DRBD:

apt-get install drbd8-utils module-assistant
m-a update
m-a -f get drbd8-module-source
echo drbd minor_count=128 usermode_helper=/bin/true >> /etc/modules
depmod -a
modprobe drbd minor_count=128 usermode_helper=/bin/true


Установка Ganeti 2.4.1:

Необходимо установить некоторые пакеты:

apt-get install python-openssl python-simplejson python-pyparsing python-pyinotify python-pycurl python-paramiko pandoc pylint socat


Скачиваем архив с исходным кодом отсюда:

code.google.com/p/ganeti/downloads/list

Распаковываем, конфигурируем, собираем, устанавливаем:

tar xvfz ./ganeti-2.4.1.tar.gz
cd ./ganeti-2.4.1
./configure --localstatedir=/var --sysconfdir=/etc
make && make install


Копируем скрипт для запуска Ganeti в /etc/init.d, устанавливаем необходимые права, добавляем сервис в автозапуск:

cp ./doc/examples/ganeti.initd /etc/init.d/ganeti
chown root:root /etc/init.d/ganeti
chmod 755 /etc/init.d/ganeti
update-rc.d ganeti defaults 20 80


Добавляем правила cron:

cp ./doc/examples/ganeti.cron /etc/cron.d/ganeti.cron
chown root:root /etc/cron.d/ganeti.cron
chmod 644 /etc/cron.d/ganeti.cron


Создаем директории:

mkdir /srv/ganeti/ /srv/ganeti/os /srv/ganeti/export


Для создания виртуальных машин также необходим debootstrap. Лучше использовать из репозитария Ubuntu, т.к. с debootstrap с сайта Ganeti у меня были проблемы. При создании виртуальных машин создается система Debian Lenny, даже несмотря на то, что пакет в репозитарии Ubuntu. Но это не страшно, потом можно доработать напильником и добавить другие варианты операционных систем:

apt-get install ganeti-instance-debootstrap


Копируем скрипты debootstrap в /srv/ganeti/os:

cd /usr/share/ganeti/os
cp -r ./debootstrap/ /srv/ganeti/os/


Дополнительно понадобятся:

apt-get install debootstrap dump kpartx


Для доступа к VNC нам нужно прописать пароль в /etc/ganeti/vnc-cluster-password (директорию /etc/ganeti/ необходимо создать).

Создаем символические ссылки на используемое нами ядро:

cd /boot
ln -s vmlinuz-`uname -r` vmlinuz-2.6-xenU
ln -s initrd.img-`uname -r` initrd-2.6-xenU


Также можно установить Ganeti Instance Image для поддержки образов операционных систем и iso образов, по образу и подобию темплейтов, например, в HyperVM:

Скачиваем исходный код здесь:

code.osuosl.org/projects/ganeti-image/files

Нам понадобятся некоторые утилиты qemu:

apt-get install qemu


Скачиваем и распаковываем:

wget http://code.osuosl.org/attachments/download/1893/ganeti-instance-image-0.5.tar.gz
tar xvfz ./ganeti-instance-image-0.5.tar.gz
cd ./ganeti-instance-image-0.5


Конфигурируем, собираем, устанавливаем:

./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-os-dir=/srv/ganeti/os
make && make install


Создание кластера:

Создание и управление кластером, создание виртуальных машин и т.п. — все производится на мастер ноде:

gnt-cluster init --no-drbd-storage --master-netdev eth0 --enabled-hypervisors=xen-hvm,xen-pvm cluster1.domain.local


Я не использую DRBD в данном примере. В команде можно также указать, например, количество ОЗУ для виртуальных машин по-умолчанию и прочее. Все это легко впоследствии изменить.

cluster1.domain.local должен быть прописан в /etc/hosts, иметь выделенный ip адрес. Все ноды (node), все виртуальные машины (instance) нужно прописывать в /etc/hosts. При создании кластера мастер нода, на которой создается кластер, также должна быть прописана в hosts. При выполнении команды на мастер ноде появляется интерфейс eth0:0 с IP адресом кластера (cluster1). В последствии, некоторые ноды (master candidate) могут заменить вышедушю из строя мастер ноду. Настройки hosts синхронизируются на всех нодах кластера.

Пример /etc/hosts:

192.168.0.1  cluster1.domain.local  cluster1
192.168.0.10 node1.domain.local     node1
192.168.0.11 node2.domain.local     node2
192.168.0.50 instance1.domain.local instance1
192.168.0.51 instance2.domain.local instance2


Вполне можно использовать в качестве нод сервера не в локальной сети, а разбросанные в интернете — нужно просто прописать их IP адреса и имена хостов (как прописаны на этих машинах) в /etc/hosts. Конечно, использовать DRBD в таком случае нельзя из-за низкой скорости передачи данных, но использовать миграцию нод с сервера на сервер очень удобно.

Информацию о созданном кластере можно просмотреть с помощью команды:

gnt-cluster info


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

gnt-cluster verify


Добавление нод в кластер:

gnt-node add node2


Будет предложено ввести root пароль ssh, затем соединения будут устанавливаться с использованием ssh ключей.

Просмотреть список нод можно командой:

gnt-node list


Node               DTotal  DFree MTotal MNode MFree  Pinst Sinst
node1.domain.local 639.6G 639.6G  24.0G  1.0G  22.7G     0     0
node2.domain.local 639.6G 629.6G   8.0G  1.0G  6.9G      1     0


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

Для паравиртуализации можно создать так (диск располагается в LVM (plain), на ноде node1, имеет 2 диска — один на 10 Гб(основная система), один на 1 Гб (для swap — нужно подключать самостоятельно в виртуальной машине), все это располагается в группе томов xenvg (можно не указывать, т.к. имя стандартное для Ganeti), сеть работает в режиме моста через eth0, машина имеет 512 Мб ОЗУ):

gnt-instance add -t plain -n node1 -o debootstrap+default --disk=0:size=10g,vg=xenvg --disk=1:size=1g,vg=xenvg --net 0:mode=bridged,link=eth0 -B memory=512 -H xen-pvm:kernel_path=/boot/vmlinuz-2.6-xenU,initrd_path=/boot/initrd-2.6-xenU,root_path=/dev/xvde1 имя-instance


Виртуальная машина запустится автоматически, подключиться к консоли можно так:

gnt-instance console имя-instance


Для полной виртуализации с указанием образа установочного диска:

gnt-instance add -t plain -n node1 -o debootstrap+default --disk=0:size=10g,vg=xenvg --net 0:mode=bridged,link=eth0 -B memory=512 -H xen-hvm:boot_order=dc,cdrom_image_path=/srv/iso/CentOS-5.6-x86_64-bin-1of8.iso имя-instance


Подключиться через VNC можно по адресу, который можно найти в выводе команды:

gnt-instance info имя-instance | grep vnc


— console connection: vnc to xxxxxxxxx:11003 (display 5103)
— vnc_bind_address: default (0.0.0.0)
— vnc_password_file: default (/etc/ganeti/vnc-cluster-password)



В вышеприведенном примере, vnc работает на всех интерфейсах (vnc_bind_address: default (0.0.0.0)), использует пароль из /etc/ganeti/vnc-cluster-password.

Управление виртуальными машинами несложное. Вот некоторые примеры:

Просмотр состаяния виртуальных машин:

gnt-instance list



Instance               Hypervisor OS                  Primary_node       Status  Memory
instance1.domain.local xen-hvm    debootstrap+default node1.domain.local running   512M
instance2.domain.local xen-pvm    debootstrap+default node1.domain.local running   512M


Меняем порядок загрузки для виртуальной машины на жесткий диск, затем cdrom:

gnt-instance modify -H boot_order=cd имя-instance


Замена mac-адреса у сетевого адаптера виртуальной машины:

gnt-instance modify --net 0:mac=00:50:56:00:05:39 имя-instance


Перемещение ноды без использования DRBD:

gnt-instance move -n новая-нода имя-instance


Почитать:

Управление кластером Xen с помощью Ganeti на Debian Lenny
Установка Ganeti в CentOS
Сборка XEN в Ubuntu 10.04

Комментарии (21)

RSS свернуть / развернуть
+
0
Роскошный топик .
avatar

yababay

  • 07 мая 2011, 23:05
+
0
Спасибо. Ganeti действительно очень мощная штука, но вот Web Manager — пока полный хлам.
avatar

Sergei_T

  • 08 мая 2011, 08:43
+
0
Странно, что такой инструмент появился только сейчас, причем, насколько я понимаю, от сторонних разработчиков. В VirtualBox VBoxManager существовал изначально.
avatar

yababay

  • 08 мая 2011, 09:08
комментарий был удален

+
0
Ну это немного разные вещи, VBoxManaget это скорее VirtManager если сравнивать с Xen, а Ganeti может не просто создавать и управлять виртуальными машинами Xen и KVM, но и централизованно управлять целым кластером серверов на которых работают виртуальные машины.
avatar

Sergei_T

  • 08 мая 2011, 18:05
+
0
Поправь:
«Настраиваем grub2 /boot/grub/grub.cfg. Память для dom0 ограничим 1 Гб, также оставим только один процессор. Это нужно для оптимального быстродействия виртуальных машин:»

на
«Настраиваем grub2 /etc/grub.d/40_custom. Память для dom0 ограничим 1 Гб, также оставим только один процессор. Это нужно для оптимального быстродействия виртуальных машин:» — так как 2 граб берет настройки из своих конфигов и затрет новый элемент загрузки при обнолении граба
avatar

gridis

  • 31 мая 2011, 16:11
+
0
Это понятно, я просто не использую авто примочки grub2
avatar

Sergei_T

  • 31 мая 2011, 16:28
+
0
update-grub это автоматом сделает… ты же в начале поста не удаляшь скипты
avatar

gridis

  • 31 мая 2011, 16:35
+
0
и у меня вопрос, куда Xen при загрузки пишет логи, у меня syslog пустой…
avatar

gridis

  • 31 мая 2011, 16:34
+
0
странно:
xm list

отвечает:
Error: Unable to connect to xend: No such file or directory. Is xend running?


Не подскажешь куда копать?
avatar

gridis

  • 31 мая 2011, 16:38
+
0
вот это было сделано?

sudo update-rc.d xend defaults 20 21
sudo update-rc.d xendomains defaults 21 20


если /proc/xen/capabilities существует — осталось только запустить сервисы xend и xendomains
avatar

Sergei_T

  • 31 мая 2011, 16:42
+
0
Конечно, правда при пребуте на экран куча ошибок Xen`овских вылетает, а где он логи держит не могу найти
avatar

gridis

  • 31 мая 2011, 16:43
+
0
и потом:
xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  6940     8     r-----      9.5


Как у тебя здесь получилось 8 VCPUs если ты для Dom0 выделил 1 всего?
avatar

gridis

  • 31 мая 2011, 16:41
+
0
Так работает xen, для dom0 не обязательно выделять все ресурсы
avatar

Sergei_T

  • 31 мая 2011, 16:43
+
0
Нет, это то я с тобой согласен, но тогда просто информация из поста противоречит друг другу, ты запускаешь ядро на 1 процессоре а линкуешь что запущено на 8
avatar

gridis

  • 31 мая 2011, 16:45
+
0
Все верно показывает
avatar

Sergei_T

  • 31 мая 2011, 16:47
+
0
ну ладно, допустим что там… просто я этой таблички не вижу, я лиш комментирую слова с других ресурсов, где выделение памяти и процессора под dom0 описывается
avatar

gridis

  • 31 мая 2011, 16:50
+
0
Тогда подскажешь по ошибке которую я сверху описал....?
avatar

gridis

  • 31 мая 2011, 16:52
+
0
Нашел лог ошибки почему не запускается:
xen.lowlevel.xc.Error: (1, 'Internal error', 'xc_interface_open failed: No such file or directory')
.xc: error: Could not obtain handle on privileged command interface (2 = No such file or directory): Internal error
Traceback (most recent call last):
  File "/usr/sbin/xend", line 36, in <module>
    from xen.xend.server import SrvDaemon
  File "/usr/local/lib/python2.6/dist-packages/xen/xend/server/SrvDaemon.py", line 26, in <module>
    import relocate
  File "/usr/local/lib/python2.6/dist-packages/xen/xend/server/relocate.py", line 28, in <module>
    from xen.xend import XendDomain
  File "/usr/local/lib/python2.6/dist-packages/xen/xend/XendDomain.py", line 36, in <module>
    from xen.xend import XendOptions, XendCheckpoint, XendDomainInfo
  File "/usr/local/lib/python2.6/dist-packages/xen/xend/XendCheckpoint.py", line 20, in <module>
    from xen.xend import balloon, sxp, image
  File "/usr/local/lib/python2.6/dist-packages/xen/xend/image.py", line 46, in <module>
    xc = xen.lowlevel.xc.xc()
xen.lowlevel.xc.Error: (1, 'Internal error', 'xc_interface_open failed: No such file or directory')
.xc: error: Could not obtain handle on privileged command interface (2 = No such file or directory): Internal error
Traceback (most recent call last):
  File "/usr/sbin/xend", line 36, in <module>
    from xen.xend.server import SrvDaemon
  File "/usr/local/lib/python2.6/dist-packages/xen/xend/server/SrvDaemon.py", line 26, in <module>
    import relocate
  File "/usr/local/lib/python2.6/dist-packages/xen/xend/server/relocate.py", line 28, in <module>
    from xen.xend import XendDomain
  File "/usr/local/lib/python2.6/dist-packages/xen/xend/XendDomain.py", line 36, in <module>
    from xen.xend import XendOptions, XendCheckpoint, XendDomainInfo
  File "/usr/local/lib/python2.6/dist-packages/xen/xend/XendCheckpoint.py", line 20, in <module>
    from xen.xend import balloon, sxp, image
  File "/usr/local/lib/python2.6/dist-packages/xen/xend/image.py", line 46, in <module>
    xc = xen.lowlevel.xc.xc()
avatar

gridis

  • 31 мая 2011, 16:55
+
+1
Спасибо!
Проблема решена, внимательно надо читать документацию!
avatar

gridis

  • 31 мая 2011, 20:07
+
0
avatar

Sergei_T

  • 01 июня 2011, 09:35

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.