Небольшой мануал по установке 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 с некоторыми изменениями.
Устанавливаем необходимые для сборки пакеты:
Т.к. я использую 64 битный Ubuntu, то мне также понадобились:
Скачиваем, распаковываем и переходим в директорию с исходниками Xen:
Собираем и устанавливаем:
В /boot должны появится файлы вида xen*.gz. Это ядро Xen.
Также нам понадобится собрать ядро с поддержкой Xen. Получаем исходники ядра из репозитария Xen:
Переключаемся на ветку 2.6.32:
Копируем настройки нашего текущего ядра, они будут нашим шаблоном:
Запускаем конфигуратор:
Заходим в меню:
Отключаем:
Выходим из конфигуратора. Для дальнейшей настройки гораздо проще отредактировать файл .config вручную. Ниже приведены мои настройки. Такое ядро может быть и dom0 и запускаться в виртуальных машинах в режиме паравиртуализации:
Собираем и устанавливаем новое ядро:
В директории /boot появятся следующие файлы:
В директории /lib/modules/ должна появится директория с новыми модулями ядра:
Создаем ramdrive для нового ядра и обновляем настройки grub2:
В /etc/xen/xend-config.sxp, раскомментируем:
Перезагружаемся чтобы проверить новое ядро. Если все в порядке, редактируем /etc/xen/xend-config.sxp:
Настраиваем grub2 /boot/grub/grub.cfg. Память для dom0 ограничим 1 Гб, также оставим только один процессор. Это нужно для оптимального быстродействия виртуальных машин:
Включаем запуск xend и xendomains при старте системы:
Перезагружаемся. Если система загрузилась, проверяем работает-ли Xen:
Проверяем сетевой мост:
Все в порядке. Делаем резервную копию grub.cfg — на всякий случай.
Про сборку ядра с поддержкой Xen можно почитать здесь:
wiki.xensource.com/xenwiki/XenParavirtOps
Ganeti может использовать DRBD — что-то вроде сетевого RAID 1. Желательно установить, чтобы не видеть постоянные сообщения об ошибках в логах Ganeti, связанные с отсутствием устройств DRBD в /dev, хотя вполне можно обойтись и без DRBD.
Установка DRBD:
Установка Ganeti 2.4.1:
Необходимо установить некоторые пакеты:
Скачиваем архив с исходным кодом отсюда:
code.google.com/p/ganeti/downloads/list
Распаковываем, конфигурируем, собираем, устанавливаем:
Копируем скрипт для запуска Ganeti в /etc/init.d, устанавливаем необходимые права, добавляем сервис в автозапуск:
Добавляем правила cron:
Создаем директории:
Для создания виртуальных машин также необходим debootstrap. Лучше использовать из репозитария Ubuntu, т.к. с debootstrap с сайта Ganeti у меня были проблемы. При создании виртуальных машин создается система Debian Lenny, даже несмотря на то, что пакет в репозитарии Ubuntu. Но это не страшно, потом можно доработать напильником и добавить другие варианты операционных систем:
Копируем скрипты debootstrap в /srv/ganeti/os:
Дополнительно понадобятся:
Для доступа к VNC нам нужно прописать пароль в /etc/ganeti/vnc-cluster-password (директорию /etc/ganeti/ необходимо создать).
Создаем символические ссылки на используемое нами ядро:
Также можно установить Ganeti Instance Image для поддержки образов операционных систем и iso образов, по образу и подобию темплейтов, например, в HyperVM:
Скачиваем исходный код здесь:
code.osuosl.org/projects/ganeti-image/files
Нам понадобятся некоторые утилиты qemu:
Скачиваем и распаковываем:
Конфигурируем, собираем, устанавливаем:
Создание кластера:
Создание и управление кластером, создание виртуальных машин и т.п. — все производится на мастер ноде:
Я не использую DRBD в данном примере. В команде можно также указать, например, количество ОЗУ для виртуальных машин по-умолчанию и прочее. Все это легко впоследствии изменить.
cluster1.domain.local должен быть прописан в /etc/hosts, иметь выделенный ip адрес. Все ноды (node), все виртуальные машины (instance) нужно прописывать в /etc/hosts. При создании кластера мастер нода, на которой создается кластер, также должна быть прописана в hosts. При выполнении команды на мастер ноде появляется интерфейс eth0:0 с IP адресом кластера (cluster1). В последствии, некоторые ноды (master candidate) могут заменить вышедушю из строя мастер ноду. Настройки hosts синхронизируются на всех нодах кластера.
Пример /etc/hosts:
Вполне можно использовать в качестве нод сервера не в локальной сети, а разбросанные в интернете — нужно просто прописать их IP адреса и имена хостов (как прописаны на этих машинах) в /etc/hosts. Конечно, использовать DRBD в таком случае нельзя из-за низкой скорости передачи данных, но использовать миграцию нод с сервера на сервер очень удобно.
Информацию о созданном кластере можно просмотреть с помощью команды:
Проверить настройки кластера (включая настройки нод, будет произведено подключение ко всем нодам и их проверка) можно командой:
Добавление нод в кластер:
Будет предложено ввести root пароль ssh, затем соединения будут устанавливаться с использованием ssh ключей.
Просмотреть список нод можно командой:
Создание виртуальных машин:
Для паравиртуализации можно создать так (диск располагается в LVM (plain), на ноде node1, имеет 2 диска — один на 10 Гб(основная система), один на 1 Гб (для swap — нужно подключать самостоятельно в виртуальной машине), все это располагается в группе томов xenvg (можно не указывать, т.к. имя стандартное для Ganeti), сеть работает в режиме моста через eth0, машина имеет 512 Мб ОЗУ):
Виртуальная машина запустится автоматически, подключиться к консоли можно так:
Для полной виртуализации с указанием образа установочного диска:
Подключиться через VNC можно по адресу, который можно найти в выводе команды:
В вышеприведенном примере, vnc работает на всех интерфейсах (vnc_bind_address: default (0.0.0.0)), использует пароль из /etc/ganeti/vnc-cluster-password.
Управление виртуальными машинами несложное. Вот некоторые примеры:
Просмотр состаяния виртуальных машин:
Меняем порядок загрузки для виртуальной машины на жесткий диск, затем cdrom:
Замена mac-адреса у сетевого адаптера виртуальной машины:
Перемещение ноды без использования DRBD:
Почитать:
Управление кластером Xen с помощью Ganeti на Debian Lenny
Установка Ganeti в CentOS
Сборка XEN в Ubuntu 10.04
Все нижеперечисленные инструкции необходимо выполнить на всех серверах (нодах) кластера, один из серверов будет главным (мастер). Там, где необходимо что-то настраивать на мастер-ноде будет отдельное примечание.
Также, для 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 свернуть / развернутьyababay
Sergei_T
yababay
Sergei_T
«Настраиваем grub2 /boot/grub/grub.cfg. Память для dom0 ограничим 1 Гб, также оставим только один процессор. Это нужно для оптимального быстродействия виртуальных машин:»
на
«Настраиваем grub2 /etc/grub.d/40_custom. Память для dom0 ограничим 1 Гб, также оставим только один процессор. Это нужно для оптимального быстродействия виртуальных машин:» — так как 2 граб берет настройки из своих конфигов и затрет новый элемент загрузки при обнолении граба
gridis
Sergei_T
gridis
gridis
отвечает:
Не подскажешь куда копать?
gridis
если /proc/xen/capabilities существует — осталось только запустить сервисы xend и xendomains
Sergei_T
gridis
Как у тебя здесь получилось 8 VCPUs если ты для Dom0 выделил 1 всего?
gridis
Sergei_T
gridis
Sergei_T
gridis
gridis
gridis
Проблема решена, внимательно надо читать документацию!
gridis
Sergei_T
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.