Ключевые слова:xen, virtual, emulator, linux, boot, (найти похожие документы)
From: Сгибнев Михаил <http://dreamcatcher.ru>
Date: Wed, 14 Apr 2006 18:21:07 +0000 (UTC)
Subject: Руководство по использованию монитора виртуальных машин Xen
Оригинал: http://dreamcatcher.ru/docs/xen_part1.html
Содержание
* 1 Введение и примеры
+ 1. Введение
o 1.1 Структура системы, базирующейся на Xen
o 1.2 Поддержка оборудования
o 1.3 История
+ 2. Установка
o 2.1 Требования
o 2.2 Установка из бинарных файлов
o 2.3 Установка из исходных текстов
o 2.4 Конфигурация
o 2.5 Загрузка Xen
+ 3. Запуск дополнительных доменов
o 3.1 Создание файла конфигурации домена
o 3.2 Загрузка домена
o 3.3 Пример: ttylinux
o 3.4 Автоматический старт/стоп домена
+ 4. Инструменты управления доменом
o 4.1 Управление из командной строки
o 4.2 Сохранение и восстановление домена
o 4.3 Миграция
o 4.4 Управление памятью домена
+ 5. Файловая система домена
o 5.1 Экспорт физических устройств как VBDs
o 5.2 Использование File-backed VBDs
o 5.3 Использование LVM-backed VBDs
o 5.4 Использование NFS Root
1. Введение
Xen является "паравиртуальным" монитором виртуальных
машин (VMM), другое его название, распространенное в основном на
архитектуре x86 - `гипервизор'. Xen способен поддерживать
одновременную работу большого числа виртуальных машин на одной
физической, при этом не тратя значительных вычислительных
ресурсов. Технология виртуальных машин позволяет расширить
функциональность оборудования следующими способами:
+ Виртуальная машина обладает производительностью, сравнимой с
реальной.
+ Возможность миграции запущенной виртуальной машины между
физическими машинами.
+ Превосходная поддержка оборудования (поддерживается
большинство драйверов устройств Linux)
+ Возможность создания песочницы, перезагружаемые драйверы
устройств.
Паравиртуализация позволяет достичь очень высокой
производительности даже на таких, очень тяжелых для виртуализации,
платформах, как x86. Недостатком такого подхода является
необходимость адаптации операционной системы перед помещением в
Xen. Процесс адаптации к Xen очень похож на портирование для новой
платформы, однако значительно проще ввиду похожести виртуального
оборудования на реальное. Даже с учетом того, что ядро
операционной системы явно должно поддерживать Xen,
пользовательские приложения и библиотеки остаются без изменения.
Xen с каждым днем поддерживает все больше и больше платформ. В
настоящее время поддерживается Linux 2.4, Linux 2.6 и NetBSD. Порт
для FreeBSD в настоящее время проходит тестирование и вскоре будет
официально выпущен. Порты других операционных систем, таких как
Plan 9 также находятся в работе. Мы надемся, что во всех этих
операционных системах будут выпущены официальные порты для Xen
(как это случилось для NetBSD)
Возможные сценарии использования Xen:
Разработка ядра.
Тестирование и отладка изменений в ядре -- нет
необходимости в выделенной машине.
Конфигурация с несколькими ОС.
Одновременная работа нескольких операционных систем.
Например для совместимости или целей QA.
Объединение серверов.
Перемещение нескольких серверов в одну физическую машину.
В результате виртуализации достигается изолирование
ошибок, происходящих в виртуальных машинах.
Кластерные вычисления.
Управление виртуальными машинами имеет большую степень
детализации и гибкости, чем для группы физических машин.
Становиться возможным живая миграция для обеспечения
балансировки нагрузки.
Поддержка оборудования.
Разработчикам новых ОС предоставляется возможность
изучать поддержку оборудования из существующих ОС, таких
как Linux.
1.1 Структура системы, базирующейся на Xen
Система имеет несколько уровней, самым низким и привилегированным
является непосредственно Xen. Xen, в свою очередь, является базой
для нескольких гостевых операционных систем, какжая из котох
выполняется в отдельной виртуальной машине (в терминологии Xen она
называется домен). Домены используются для повышения утилизации
физических CPU. Каждая гостевая ОС управляет собственными
приложениями.
Первый домен, domain 0, создается автоматически во время загрузки
и имеет специальные привилегии. В Domain 0 собираются прочие
домены и происходит управление их виртуальными устройствами. Также
он выполняет задачи по останову, запуску и миграции виртуальных
машин.
В пределах domain 0 работает процесс, называемый xend и
управляющий системой. Xend отвечает за доступность виртуальных
машин для управления и доступ к их консолям. Комады могут
посылаться Xend через командную строку или HTTP интерфейс.
1.2 Поддержка оборудования
Xen в настоящее время выполняется только на архитектуре x86,
требуя для работы 'P6' или более нового процессора (например
Pentium Pro, Celeron, Pentium II, Pentium III, Pentium IV, Xeon,
AMD Athlon, AMD Duron). Поддерживается многопроцессорность, так же
имеется базовая поддержка HyperThreading (SMT), хотя в настоящее
время идут дополнительные работы. Xen работает на платформа
x86/64, но в 32-разрядном режиме. Мы так же планируем поддержку
процессоров PPC и ARM.
Xen в настоящее время поддерживает 4GB оперативной памяти. Хотя
для платформы x86 возможна адресация до 64GB, работ по увеличению
поддерживаемой памяти проводиться не будет, в отличие от платформы
x86/64.
Xen переносит всю поддержку оборудования гостевой ОС на Domain 0.
Сам Xen содержит только код, отвечающий за определение и старт
дополнительных процессоров, управление прерываниями и нумерацией
шины PCI. Драйверы устройств работают в переделах гостевой ОС,
изолированно от самого процесса Xen.Этот подход обеспечивает
совместимость с большинством аппаратных средств, поддерживаемых
Linux. Имеющаяся сборка XenLinux обеспечивает поддержку большого
числа сетевых адаптеров серверного класса и дисковых массивов,
возможность работы с другим оборудованием достигается за счет
перекомпиляции ядра XenLinux.
1.3 История
Xen впервые был разработан Systems Research Group в компьютерной
лаборатории университета Кембридж как часть проекта XenoServers,
финансируемый UK-EPSRC. Целью XenoServers было "предоставить
общедоступную инфраструктуру для распределенных вычислений" и Xen
в этом проекте играл ключевую роль, позволяя эффективно делить
ресурсы одной физической машины между независимыми клиентами. При
этом необходимо обеспечить возможность запуска нескольких Ос и
различных приложений, ведя аккаунтинг и изолируя ресурсы. Вы
можете обратиться к странице этого проекта
http://www.cl.cam.ac.uk/xeno, для получения дополнительной
информации.
С тех пор Xen был выделен в самостоятельный проект, что позволило
произвести более полные исследования в области виртуализации.
настоящее время проект поддерживается Intel Research Cambridge и
HP Labs.
Впервые Xen был описан на SOSP в 20031.1 году и первая его
версия (1.0) была выпущена в октябре 2003 года. С тех пор Xen
значительно развился и в настоящее время используется в
промышленных системах.
В Xen 2.0 была расширена поддержка оборудования, удобство
конфигурирования и использования, увеличено количество
поддерживаемых систем. Этот релиз Xen стал очередным шагом к
становлению систем виртуализации с открытым исходным кодом.
2. Установка
Поставка Xen включает в себя три основных компонента: сам Xen,
версии операционных систем Linux 2.4, 2.6 и NetBSD для запуска Xen
и набор пользовательских утилит, необходимых для управления
системой. В этой главе описывается установка Xen 2.0 из исходных
текстов. Альтернативный вариант, состоит в том, чтобы
воспользоваться прекомпилированными пакетом из состава вашей
операционной системы.
2.1 Требования
Ниже перечисляется полный список требований, которые необходимо
выполнить для установки. Пункты, отмеченные The following is a
full list of prerequisites. Items marked ` $\dag $ ' необходимы
для инструментов управления xend и следовательно требуются, если
Вы хотите запустить больше, чем одну виртуальную машину, а
помеченные `*' требуются только для сборки из исходных текстов.
$$
Работающий дистрибутив Linux, использующий загрузчик GRUB
и выполняющийся на машине класса P6 или выше.
$\dag $
Пакетiproute2.
$\dag $
Linux bridge-utils2.1 (e.g., /sbin/brctl)
$\dag $
Установленный Twisted v1.3 или выше2.2, это может быть
бинарный пакет, доступный для вашего дистрибутива. Так же,
можно выполнить команду `make install-twisted' в каталоге
исходных текстов Xen.
*
Инструменты для сборки (gcc v3.2.x or v3.3.x, binutils,
GNU make).
*
Инструмент разработчика libcurl (e.g., libcurl-devel)
*
Инструмент разработчика zlib (e.g., zlib-dev).
*
Инструмент разработчика Python v2.2 или выше (e.g.,
python-dev).
*
LATEXand transfig требуется для сборки докуметации.
После удовлетворения всех требований, вы можете приступить к
установке Xen. из бинарного пакета или исходных текстов.
2.2 Установка из бинарных файлов
Прекомпилированный тарбол может быть скачан отсюда: http://xen.sf.net
После скачивания, просто распакуйте и установите его:
# tar zxvf xen-2.0-install.tgz
# cd xen-2.0-install
# sh ./install.sh
После установки бинарных файлов необходимо выполнить
конфигурирование вашей системы, как это описано в разделе 2.4.
2.3 Установка из исходных текстов
В этом разделе описывается получение, сборка и установка Xen из
исходных текстов.
2.3.1 Получение исходных текстов
Исходные тексты Xen доступны в виде сжатогого tar-архива или из
репозитория BitKeeper.
Получение тарбола исходных текстов
Стабильная версия (или ежедневный снимок) исходных
текстов Xen доступны на домашней странице Xen: http://xen.sf.net
Использование BitKeeper
Если вы хотите устанавливать Xen из репозитория
BitKeeper, необходимо установить необходимый
инструментарий. Посмотреть инструкцию по установке можно
по адресу: http://www.bitmover.com/cgi-bin/download.cgi
Публичный репозиторий находится по адресу: bk://xen.bkbits.net/xen-2.0.bk
Вы можете использовать BitKeeper для последующего
обновления Xen.
Перейдите в каталог, куда вы хотите установить исходные
тексты и выполните команду:
# bk clone bk://xen.bkbits.net/xen-2.0.bk
В результате, будет создан каталог xen-2.0.bk, содержащий
исходные тексты Xen, порты ОС и утилиты управления. Вы
можете обновлять репозиторий, получая последние
изменения, выполняя время от времени команду:
# cd xen-2.0.bk # to change into the local repository
# bk pull # to update the repository
2.3.2 Сборка из исходных текстов
Верхинй уровень Makefile включает цель `world' и отвечает за:
+ Сборка Xen
+ Сборка инструментов управления, включая xend
+ Скачивание (если необходимо) и распаковка исходных текстов
Linux 2.6 и наложение необходимых патчей для использования
Xen.
+ Сборка ядра Linux для использования в domain 0 и
дополнительных непривилегированных ядер, которые будут
использоваться в виртуальных машинах.
После того, как сборка завершилась, должен появиться каталог
dist/, содержащий сам дистрибутив. Практический интерес для нас
будут иметь два ядра XenLinux, одно из которых имеет расширение
`-xen0' и содержит драйверы устройств и драйверы виртуальных
устройств Xen. Второе ядро имеет расширение `-xenU' и применяется
в виртуальной машине. Найти их можно в dist/install/boot/, наряду
с образом самого Xen и конфигурационными файлами, используемых в
ходе установки.
Порт NetBSD может быть создан командой :
# make netbsd20
Порт NetBSD использует снимок ветви netbsd-2-0. Снимок может быть
скачан в процессе установки, если он не найден по пути,
определенной переменной NETBSD_SRC_PATH. В процессе сборки также
скачиваются утилиты, необходимые для сборки ядра NetBSD под Linux.
Для настройки параметров сборки ядра вам необходимо редактировать
Makefile верхнего уровня. Посмотрите эту строку:
KERNELS ?= mk.linux-2.6-xen0 mk.linux-2.6-xenU
Вы можете отредактировать эту строку, указав ядро любой
поддерживаемой операционной системы, которое имеет конфигурацию в
каталоге buildconfigs/. Для примера, параметр mk.linux-2.4-xenU
укажет на сборку ядра Linux 2.4, содержащего только драйверы
виртуальных устройств.
2.3.3 Сборка XenLinux
Если вы хотите собрать ядро XenLinux, включив в него собственные
параметры (например, поддержку дополнительных устройств), вы
можете использовать стандартный механизм конфигурации Linux,
указав, что целевой архитектурой является xen. Например:
# cd linux-2.6.9-xen0
# make ARCH=xen xconfig
# cd ..
# make
Вы также можете скопировать существующую конфигурацию (.config) в
linux-2.6.9-xen0 и выполнить:
# make ARCH=xen oldconfig
Утилита конфигурации может спросить вас о некоторых специфичных
для Xen параметрах. Мы рекомендуем оставить их по умолчанию.
Обратите внимание на отличие между двумя типами ядер: индекс "U"
(непривилегированная) версия ядра не содержит драйверов физических
устройств, что позволяет на 30% сократить его размер. Такие ядра
применяются в непривилегированных доменах. Ядро с индексом `0'
используется для загрузки системи и может использоваться как в
главном, так и в непривилигерованном доменах.
2.3.4 Установка бинарных файлов
Файлы, созданные в процессе сборки, по умолчанию сохраняются в
каталоге dist/install/. Для установки необходимо выполнить:
# make install
По желанию, пользователи самостоятельно могут скопировать файлы в
соответствующие каталоги.
Каталог dist/install/boot так же содержит файлы конфигурации,
используемые для сборки ядер XenLinux, версии ядер Xen и XenLinux,
используемые для отладки (xen-syms и vmlinux-syms-2.6.9-xen0).
Если вы будете обращаться в список рассылки, то вас могут
попросить предоставить дампы отказов, полученных с помощью этих
ядер.
2.4 Конфигурация
После сборки и установки Xen необходимо
подготовить машину для его загрузки и запуска.
2.4.1 Конфигурация GRUB
Необходимо добавить запись в grub.conf (он располагается обычно в
/boot/ или /boot/grub/) для обеспечения загрузки Xen / XenLinux.
Этот файл иногда может называться menu.lst, в зависимости от
вашего дистрибутива. Добавляемая строка будет выглядеть примерно
так:
title Xen 2.0 / XenLinux 2.6.9
kernel /boot/xen.gz dom0_mem=131072
module /boot/vmlinuz-2.6.9-xen0 root=/dev/sda4 ro console=tty0
Строка kernel указывает GRUB, где искать Xen и какие параметры
загрузки использовать. (в данном случае, казывается размер
отводимой для домена 0 памяти и устанавливаются параметры
последовательного порта). Для получения дополнительной информации
обратитесь к разделу 8.2.
Строка module указывает на местоположение ядра XenLinux,
используемого для старта Xen и передаваемые этому ядру параметры,
которые я вляются стандартными для Linux. Некоторые дистрибутивы,
такие как SUSE не требуют указания параметра ro.
Если вы хотите использовать initrd, то необходимо использовать
другую строку module:
module /boot/my_initrd.gz
Как и всегда после установки нового ядра, рекомендуется не удалять
старое из menu.lst -- возможно вы захотите загрузить старое ядро в
случае возникновения проблем.
2.4.2 Консоль на последовательном порту (опционально)
Для конфигурирования Xen на вывод данных через последовательный
порт, необходимо добавить следущую опцию в файл конфигурации GRUB:
kernel /boot/xen.gz dom0_mem=131072 com1=115200,8n1
В результате Xen будет осуществлять вывод в COM1 на скорости
115,200, по 8 бит, без контроля четности. Вы можете изменить эти
параметры по своему выбору.
XenLinux можно настроить и на использование последовательного
порта, для этого необходимо использовать ``console=ttyS0''.
Если вы хотите входить на машину с XenLinux через последовательный
порт, то необходимо добавить следущую строку в /etc/inittab:
c:2345:respawn:/sbin/mingetty ttyS0
Обратите внимание, на то, что в современных дистрибутивах для
возможности вхоа как root, необходимо добавить ttyS0 в
/etc/securetty.
2.4.3 Библиотеки TLS
Пользователи ядра XenLinux 2.6 должны отключить Thread Local
Storage (например сделать mv /lib/tls /lib/tls.disabled) перед
тем, как запускать ядро XenLinux2.3. Вы всегда можете вернуть
каталог на прежнее место (mv /lib/tls.disabled /lib/tls).
Причиной является то, что текущая реализация TLS использует
сегментацию, в настоящее время не поддерживаемую Xen. Если TLS не
выключена, то режим эмуляции резко снижает производительность
системы.
Мы надеемя, что эта проблема будет в скором времени устранена, так
как сейчас идет тесное сотрудничество с производителями
дистрибутивов Linux.
2.5 Загрузка Xen
Теперь мы перезагружаем машину и загружаемся, уже используя Xen.
Увидя приглашение GRUB, необходимо просто выбрать соответствующий
пункт меню.
Последущее должно напомнить обычную загрузку Linux. Инфирмацию
нижнего уровня о себе и имеющихся аппаратных средствах выдает Xen,
за все последущее отвечает XenLinux.
В течении начальной загрузки вы можете увидеть некоторые сообщения
об ошибках. Это не повод волноваться, скорее всего они возникают
из-за различий в конфигурации ядер (поддержке оорудования) между
тем ядром, которое вы использовали прежде и ядром XenLinux.
После завершения загрузки войдите в систему обычным порядком. Если
сделать это по какой-либо причине не получается, то загрузите
машину, используя ваше старое ядро.
3. Запуск дополнительных доменов
Первый шаг в создании нового домена заключается в том, что
необходимо подготовить корневую файловую систему к выгрузке.
Обычно, она сохраняется на нормальном разделе, LVM, или сервере
NFS. Самый простой путь состоит в том, чтобы загрузиться с
установочного CD для вашего дистрибутива и установить его в другой
раздел вашего диска.
Для запуска демона управления xend выполните:
# xend start
Если вы хотите запускать демона автоматически, смотрите инструкцию
в разделе 6.1. Как только демон будет запущен, вы можете
использовать утилиту xm для мониторинга и монтирования доменов к
вашей системе. В этой главе дается краткое объяснение работы с xm,
более детально эта тема рассмотрена в следующей главе.
3.1 Создание файла конфигурации домена
Прежде, чем запускать дополнительный домен, необходимо создать его
файл конфигурации. Мы создадим два таких файла, в последствии вы
можете их использовать в качестве отправной точки для своих
файлов:
+ /etc/xen/xmexample1 является простым шаблоном, служащим для
описания одной единственной VM.
+ /etc/xen/xmexample2 предназначен для многократного
использования на нескольких виртуальных машинах. В этом
шаблоне необходимо будет установить значение переменной vmid
в командной строке xm для каждой из VM.
Скопируйте один из этих файлов и отредактируйте его сообразно
собственным портебностям. Обычными параметрами, подвергающиеся
изменениям являются:
kernel
Путь до ядра, откомпилированного для использования с Xen
(например kernel = '/boot/vmlinuz-2.6.9-xenU')
memory
Размер выделяемой домену памяти в мегабайтах (например
memory = 64)
disk
Первым значением выставляется смещение относительно
корневого раздела домена, вычисляемое относительно
идентификатора домена. Вторым - размещение /usr, если вы
хотите сделать этот раздел общим для нескольких доменов
(например disk = ['phy:your_hard_drive%d,sda1,w' %
(base_partition_number + vmid),
'phy:your_usr_partition,sda6,r' ]
dhcp
Раскомментируйте эту строку, если домену должен
назначаться IP адрес от сервера DHCP (например
dhcp='dhcp')
Вы также можете отредактировать переменную vif для смены MAC
адреса виртуального сетевого интерфейса. Для примера:
vif = ['mac=00:06:AA:F6:BB:B3']
Если вы не установили эту переменную, то xend автоматически
сгенерирует случайный MAC из неиспользуемого диапазона.
3.2 Загрузка домена
Утилита xm реализует множество команд для управления доменом.
Используйте команду create для старта нового домена. Если принять,
что вы создали файл конфигурации myvmconf, базируясь на
/etc/xen/xmexample2, то запуск нового виртуального домена будет
выглядеть следующим образом:
# xm create -c myvmconf vmid=1
Флаг -c указывает xm подключиться к консоли домена после его
создания. vmid=1 устанавливает переменную vmid, используемую в
myvmconf.
Вы должны видеть процесс загрузки домена. Кульминацией должно
стать приглашение на вход в систему.
3.3 Пример: ttylinux
Ttylinux -- это очень маленький дистрибутив Linux, весьма
неприхотливый к ресурсам. Мы будем использовать его для наглядного
показа запуска нового домена. Большинство пользователей, вероятно,
захотят установить дистрибутив польностью, как только освоят
некоторые основы 3.1.
1. Скачайте и распакуйте образ диска ttylinux из репозитория на
SourceForge (см. http://sf.net/projects/xen/).
2. Создайте файл конфигурации подобный этому:
kernel = "/boot/vmlinuz-2.6.9-xenU"
memory = 64
name = "ttylinux"
nics = 1
ip = "1.2.3.4"
disk = ['file:/path/to/ttylinux/rootfs,sda1,w']
root = "/dev/sda1 ro"
3. Теперь запускайте домен и подключайтесь к его консоли:
xm create configfile -c
4. Имя пользователя -- root, пароль -- root.
3.4 Автоматический Запуск/Останов доменов
Имеется возможность автоматического запуска доменов во время
начальной загрузки и завершение работы dom0 только после останова
всех дочерних доменов.
Для задания списка доменов, стартующих во время начальной
загрузки, необходимо создать конфигурационный файл /etc/xen/auto/.
Для инициализационных скриптов типа Sys-V, дистрибутива RedHat и
систем LSB-compliant необходимый скрипт уже поставляется и
автоматически копируется в /etc/init.d/. Для своего дистрибутива
скрипт вы можете установить подобным образом.
Для примера, на дистрибутиве RedHat:
# chkconfig --add xendomains
По умолчанию, он будет стартовать на уровнях 3, 4, 5.
Так же, вы можете использовать команду service для запуска скрипта
вручную:
# service xendomains start
Запуск всех доменов, указанных в /etc/xen/auto/.
# service xendomains stop
Останов ВСЕХ запущеных доменов Xen.
4. Инструментарий управления доменами
В предыдущей главе мы рассмотрели простейший пример
конфигурирования и запуска домена. В этой главе мы рассмотрим
доступные инструменты для управления доменами.
4.1 Утилиты командной строки
Управление из командной строки возможно с помощью утилиты xm. Для
получения справки выполните команду:
# xm help
Для получения более подробной информации о какой-либо опции, можно
воспользоваться командой xm help <command>.
4.1.1 Базовые команды управления
Наиболее важными командами xm являются:
# xm list: Список запущенных доменов
# xm consoles : Получение информации о консоли домена.
# xm console: Открыть консоль домена (например # xm console myVM
4.1.2 xm list
Вывод xm list выглядит следующим образом:
name domid memory cpu state cputime console
name
Имя виртуальной машины.
domid
Идентификатор домена.
memory
Размер памяти в мегабайтах.
cpu
Загрузка CPU этого домена.
state
Возможно 5 состояний домена:
r
запущен
b
заблокирован
p
приостановлен
s
выключен
c
авария
cputime
Текущее использование CPU в секундах.
console
Порт TCP, к которому привязана консоль домена.
Команда xm list также поддерживает формат увеличенного вывода с
помощью ключа -l. Этот вывод содержит более детальную информацию о
запущенных доменах в формате xend SXP.
Предположим, что у нас запущен домен с ttylinux, как это описано
выше. Тогда мы в ответ на введенную команду должны получить нечто
подобное:
# xm list
Name Id Mem(MB) CPU State Time(s) Console
Domain-0 0 251 0 r---- 172.2
ttylinux 5 63 0 -b--- 3.0 9605
Здесь мы можем видеть подробный вывод для домена ttylinux и для
домена 0(который всегда запущен). Обратите внимание, что
консольный порт для ttylinux домена - 9605. На этот порт можно
подключиться любой терминальной программой (telnet или, что лучше,
xencons). Более простым способом будет использование xm console,
указав имя или идентификатор домена. Разные способы соединения с
доменом могут выглядеть так:
# xm console ttylinux
# xm console 5
# xencons localhost 9605
4.2 Сохранение и восстановление доменов
Администратор Xen может сохранить текущее состояние виртуальной
машины на диск домена 0, с последующим ее запуском в другое время.
Над доменом ttylinux такую операцию можно осуществить, выполнив
команду:
# xm save ttylinux ttylinux.xen
В результате домен `ttylinux' будет остановлен и его текущее
состояние будет сохранено в файле ttylinux.xen.
Для продолжения работы домена используйте команду xm restore:
# xm restore ttylinux.xen
Состояние домена будет восстановлено и он будет перезапущен.
Связаться с этим доменом можно используя команду xm console.
4.3 Миграция
Миграция используется для переноса доменов между физическими
хостами незаметно для пользователя.
Для осуществления живой миграции на обеих машинах должен быть
запущен Xen / xend и на машине назначения должны иметься требуемые
ресурсы(например, память) для запуска домена после миграции. Кроме
того, в настоящее время есть требование, что бы машина-источник и
целевая машина находились в одной сети L2.
В настоящее время нет инструментальных средств, обеспечивающих
автоматический доступ к файловой системе мигрирующего домена,
сохраненной на диск. Администраторы самостоятельно выбирают
систему хранения (SAN, NAS, etc.) для того, чтобы обеспечить
доступность файловой системы на машине назначения. Хорошим методом
экспорта томов с машины на машину является GNBD. iSCSI так же
подходит, но он более сложен в установке.
Поскольку при миграции MAC адрес и IP адрес остаются прежними, то
накладывается ограничение на перенос доменов в другие сети. Это
подразумевает необходимость ручной конфигурации сетевых настроек
домена 0 при миграции в другую сеть.
Миграция может осуществляться с помощью команды xm migrate. Для
миграции домена на другую машину выполните команду:
# xm migrate --live mydomain destination.ournetwork.com
Без использования флага -live xend просто остановит домен,
скопирует образ домена на новый узел и перезапустит домен. Так как
домены могут быть очень большими, то процесс переноса может
затянуться. При использовании флага -live домен переносится без
останова, что позволяет сократить время простоя до 60-300ms,
необходимое на перезапуск домена.
Необходимо будет заново открыть консольное соединение, если
таковое было. Если мигрирующий домен имел открытые сетевые
соединения (такие как SSH), то обрыва их не произойдет.
4.4 Управление памятью домена
Домены XenLinux могут освобождать/забирать физическую память по
указанию пользователя или администратора домена.
4.4.1 Установка занимаемой памяти из dom0
Администратор может указать домену изменить используемый обьем
памяти используя команду xm balloon. Например, мы можем указать
нашему домену ttylinux уменьшить объем оперативной памяти до 32
мегабайт.
# xm balloon ttylinux 32
Увидеть результат вы можете воспользовавшись командой xm list:
# xm list
Name Id Mem(MB) CPU State Time(s) Console
Domain-0 0 251 0 r---- 172.2
ttylinux 5 31 0 -b--- 4.3 9605
Как мы видим, домен ответил нам на команду, вернув память Xen. Мы
можем восстановить изначальный объем используя команду:
# xm balloon ttylinux 64
4.4.2 Установка занимаемой памяти из домена
Виртуальный файл /proc/xen/memory_target позволяет владельцу
домена изменять размер доступной памяти. При чтении этого файла мы
получим текущий объем памяти, при записи в него (например, echo
new_target > /proc/xen/memory_target) у ядра запрашивается
возможность изменить значение доступной памяти.
4.4.3 Установка лимита памяти
Xen позволяет установить лимит доступной памяти для каждого
домена. По умолчанию им является размер памяти, с которым был
запущен домен. Для изменения лимита необходимо воспользоваться
командой xm maxmem.
5. Файловая система домена
Есть возможность экспортировать любое блочное устройсво Linux,
находящееся в dom0, в другой домен или экспортировать файловую
систему/устройства вирткальной машины используя стандартные
сетевые протоколы (такие как NBD, iSCSI, NFS и т.д.). В этой главе
мы и рассмотрим эту возможность.
5.1 Экспорт физических устройств как VBDs
В одной из самых простых конфигураций мы просто экспортируем
отдельные разделы из домена 0 в другие домены. Достигается это с
помощью использования параметра phy: в файле конфигурации вашего
домена. Приведем пример:
disk = ['phy:hda3,sda1,w']
Здесь указывается, что раздел /dev/hda3 в домене 0 может быть
экспортирован для записи-чтения в новый домен как /dev/sda1.
В дополнение к локальным дискам и разделам, есть возможность
экспортировать любые устройства, которые Linux рассматривает так
же, как и диск. Для примера, это могут диски iSCSI или том GNBD,
импортированный в домен 0 и затем перенесенный в другой домен с
помощью указателя phy:. Рассмотрим такой вариант:
disk = ['phy:vg/lvm1,sda2,w']
\framebox{\bf Warning: Block device sharing}
Блочные устройства, обычно, между доменами передаются в режиме
только для чтения, так как файловые системы Linux черезвычайно
запутанны и их легко можно повредить (например, монтирование ext3 в
режиме rw несколькими доменами - верный путь к потере данных). Xend
постарается предотвратить такую ситуацию, указывая на монтирование
в режиме rw для домена 0 и экспорт в другой домен. Если вы все же
хотите использовать файловую систему в режиме чтения-записи, то ее
необходимо экспортировать с помощью NFS из domain0 (или используя
кластерную файловую систему, такую как GFS или ocfs2).
5.2 Использование File-backed VBDs
В качестве главного носителя виртуальной машины можно использовать
файл в домене 0. Преимущество данного подхода состоит в том, что
виртуальное блочное устройство способно растягиваться -- если
виртуальная машина занимает половину выделенного дискового
пространства, то и файл будет в половину меньше.
Создадим, для примера, виртуальное блочное устройство, размером в
2GB (фактически, будет использоваться 1 кб дискового
пространства).
# dd if=/dev/zero of=vm1disk bs=1k seek=2048k count=1
Создадим файловую систему на диске:
# mkfs -t ext3 vm1disk
(когда спросят подтверждение, отвечаем `y')
Заполняем файловую систему:
# mount -o loop vm1disk /mnt
# cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /mnt
# mkdir /mnt/{proc,sys,home,tmp}
Соответствующим образом необходимо отредактировать /etc/fstab,
/etc/hostname и т.д. (не забудьте, что редактировать надо в
примонтированной файловой системе, а не в домене 0). Для этого
примера указываем /dev/sda1 в fstab.
Теперь отмонтируем файловую систему (это важно!):
# umount /mnt
В конфигурационном файле устанавливаем:
disk = ['file:/full/path/to/vm1disk,sda1,w']
Поскольку в раздел виртуальной машины были добавлены данные, то
размер файла увеличится и впоследствии будет расти, пока не
достигнет 2 Гб.
Обратите внимание на то, что file-backed VBDs очень плохо работают
в доменах с интенсивным вводом/выводом. Поскольку доступ к
файловой системе домена в этом случае осуществляется через
петлевое блочное устройство, то значительно возрастает нагрузка на
dom0. Для повышения производительности операций ввода/вывода лучше
использовать LVM-backed VBDs (Раздел 5.3) или физическое
устройство в качестве VBDs (Раздел 5.1).
по умолчанию Linux поддерживает максимум восемь file-backed VBDs.
Это значение может быть увеличено с помощью модуля max_loop, если
CONFIG_BLK_DEV_LOOP представлен модулем ядра dom0, и ли используя
опцию загрузки max_loop=n, если CONFIG_BLK_DEV_LOOP
непосредственно вкомпилирован в ядро.
5.3 Использование LVM-backed VBDs
Самое привлекательное решение состоит в использовании томов LVM в
качестве файловой системы домена, так как есть возможность
динамического изменения размера тома и реализации некоторых
дополнительных возможностей.
Инициализировать раздел на поддержку томов LVM можно так:
# pvcreate /dev/sda10
Создадим группу под именем `vg' на физическом носителе:
# vgcreate vg /dev/sda10
Создаем логический том размером 4 Гб с именем `myvmdisk1':
# lvcreate -L4096M -n myvmdisk1 vg
Теперь вы должны увидеть /dev/vg/myvmdisk1. Создайте файловую
систему, примонтируйте и заполните ее:
# mkfs -t ext3 /dev/vg/myvmdisk1
# mount /dev/vg/myvmdisk1 /mnt
# cp -ax / /mnt
# umount /mnt
Теперь конфигурируем виртуальную машину на использование дисковой
конфигурации:
disk = [ 'phy:vg/myvmdisk1,sda1,w' ]
LVM позволяет динамически изменять размер логических дисков,
соответствующим образом изменяя размер файловых систем (если ФС
поддерживает такую опцию, как, например, ext3) на использование
дополнительного пространства. Для получения дополнительной
информации смотрите руководство по LVM.
Вы также можете использовать LVM для создания copy-on-write клонов
томов LVM (в терминологии LVM известных как writable persistent
snapshots). В Linux 2.6.8 эта возможность работает не слишком
надежно, в частности при использовании CoW LVM наблюдается слишком
большое потребление памяти доменом 0 и плохая обработка ошибок
исчерпания дискового пространства. Надеемся, что в будущем
поддержка LVM улучшится.
Для создания двух клонов copy-on-write вышеупомянутой файловой
системы выполним команды:
# lvcreate -s -L1024M -n myclonedisk1 /dev/vg/myvmdisk1
# lvcreate -s -L1024M -n myclonedisk2 /dev/vg/myvmdisk1
Каждый из клоном может расти на 1 Гб от оригинального обьема. Вы
можете выделить дополнительное пространство, для сохранения
изменений, используя команду lvextend:
# lvextend +100M /dev/vg/myclonedisk1
Не позволяйте тому переполнятся, так как это, скорее всего
приведет к потере данных. Автоматизировать этот процесс, вероятнее
всего, будет удобно, используя dmsetup wait для определения
состояния, близкого к критическому и затем выполнять lvextend.
В принципе, можно продолжить писать в клонированный том(эти
изменения могут быть не видны другим клонам), но мы бы этого не
рекомендовали, лучше иметь клонированный том не установленным ни в
одну из виртуальных машин. (Пр.п - что-то я мало что понял. Если
есть специалисты среди читателей - буду рад консультации по этому
вопросу и предложениям по внесению исправлений в перевод.)
5.4 Использование NFS Root
Сначала необходимо заполнить корневую файловую систему на машине,
выступающей в роли сервера. Сервер может быть как отдельной
машиной, так и виртуальным сервером в пределах одной физической
машины.
После этого, необходимо сконфигурировать NFS на экспорт файловой
системы по сети, добавив следущую строку в /etc/exports. Для
примера:
/export/vm1root 1.2.3.4/24 (rw,sync,no_root_squash)
В заключение, конфигурируем домен на использование NFS. В
дополнение к обычным настройкам, убедитесь, что установили
следующие переменные в конфигурационном файле домена:
root = '/dev/nfs'
nfs_server = '2.3.4.5' # substitute IP address of server
nfs_root = '/path/to/root' # path to root FS on the server
Во время начальной загрузки домену необходимо обеспечить доступ к
сети сконфигурировав статический IP адрес (используя переменные
ip, netmask, gateway, hostname) или используя DHCP (dhcp='dhcp').
Обратите внимание на то, что реализация NFS в Linux имеет проблемы
со стабильностью под большой нагрузкой (это не проблема Xen) и не
используйте такую конфигурацию в критичных серверах.