Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Приемы работы в Ubuntu.
Глава 9: Виртуализация и эмуляция

Оригинал: "Ubuntu Hacks: Chapter 9 - Virtualization and Emulation"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: октябрь 2010 г.

Совет # 90: Используем Xen в качестве хоста виртуальных машин

Используйте Ubuntu в качестве платформы для развертывания нескольких виртуальных машин.

Виртуальная машина (VM) является эмуляцией компьютера в компьютере, что позволяет вам загружать внутри вашей основной операционной среды целиком дополнительную операционную систему. Возможно, вы уже знакомы с концепцией эмуляции: с помощью VMware [Совет # 92] внутри вашей машины Linux загружается Microsoft Windows, на вашем компьютере запускается эмулятор аркадной игры, например, MAME, для того, чтобы вы могли на вашем компьютере играть в старые консольные игры, либо с помощью Virtual PC на Macintosh обеспечивается возможность выполнения программ Windows.

Эти системы работают, как правило, за счет использования программного обеспечение, которое выступает в роли аппаратного обеспечения (эмуляция), и программного обеспечения, с помощью которого инкапсулируется и предоставляется доступ к физическим устройствам (виртуализация). Таким образом, то, что мы часто на практике считаем эмулятором, фактически является комбинацией эмуляции и виртуализации. Например, если вы используете эмулятор x86 на системе x86, процессор, конечно же, эмулировать не нужно (поскольку он виртуализирован), но могут эмулироваться другие устройства, такие как сетевые адаптеры. По соображениям производительности среда виртуализации, например, VMware, эмулирует как можно меньше устройств и, по возможности, виртуализирует почти все, что возможно.

Такая схема позволяет приложению, которое предназначено для целевого аппаратного обеспечения, работать без всякой модификации. Само приложение, вероятно, не сможет обнаружить отличие: оно просто считает, что работает на том аппаратном обеспечении, которое эмулируется или виртуализируется хостовой системой.

Хотя такой подход может быть применим к отдельному приложению, его можно также применять к целым операционным системам: можно целиком загружать дополнительную копию Ubuntu, например, прямо в копию, которая уже работает. Дополнительная копия является полным самодостаточным виртуальным компьютером с собственным адресом IP, ядром, пользователями и приложениями. Это делалось на протяжении десятилетий на больших компьютерах, которые занимали целые залы, на которых несколько виртуальных машин работало одновременно под управлением гипервизора. Когда использовался такой подход, основная операционная система, работающая непосредственно на аппаратном обеспечении, могла быть относительно простой, поскольку ей не нужно было обеспечивать сервисы для конечных пользователей или для самих приложений. Все, что нужно было сделать, это запустить гипервизор, который управлял дочерними операционными системами и обеспечивал стабильную среду, в которых они могли работать.

Преимуществом этого подхода является то, что основная система сама по себе могла быть весьма стабильной, безопасной и надежной, что позволяло работать большим машинам без выключений в течение лет или даже десятилетий. После того, как основная ОС устанавливалась и настраивалась, она могла оставаться в таком состоянии в течение неопределенно долгого срока и, поскольку она была полностью отделена от сети, ее работа была практически застрахована от атак хакеров и других внешних угроз. В подобных случаях любые приложения или сервисы, которые должны предоставляться конечным пользователям, устанавливались внутри виртуальной машины, для которой было легко сделать резервные копии и которую можно было легко "перезагрузить" в любое время без ущерба для основного аппаратного обеспечения или любых других виртуальных машин, работающих рядом . Разделение сервисов по различным виртуальным машинам, является отличным способом ограничить влияние проблем, связанных с безопасностью, поскольку взломанный веб сервер, работающий на одной виртуальной машине, не сможет использоваться атакующими для доступа к почтовым сервисам, работающим на другой виртуальной машине, даже если они находятся на одном и том же физическом сервере.

К другим преимуществам подобной настройки относятся быстрое резервное копирование, управление версиями и откатами; живая миграции на другой хост работающих сервисов; быстрое предоставления новых услуг; раздельное администрирование системы, а также поддержка нескольких сред исполнения, работающих одновременно на одном сервере.

Эта технология в настоящее время начала проникать в Linux в различных формах, в том числе в виде UML (User Mode Linux — Пользовательский режим Linux), VMware и Xen. В этом совете мы сосредоточимся на Xen — проекте, в котором стиль управления с помощью гипервизора реализуется в среде Linux, предоставляя Linux мощность и гибкость старых систем Unix, которые вдохновили его создание. Подходом к виртуализации, используемым в Xen, является реализация виртуальной архитектуры, в которую может быть портировано ядро Linux. Почти тем же самым образом, как Linux поддерживается на таких вариантах архитектуры, как ia32 (386), ia64, PowerPC, AMD64 и других, в Xen определяется архитектура, для которой можно скомпилировать ядро. Виртуальная архитектура реализуется с помощью специального ядра, которое работает на хостовой машине, а выполняемые на ней виртуальные машины, которые были собраны для архитектуры Xen, наоборот, выполняются с использованием немодифицированного ядра.

Хостовая машине, как правило, называется dom0, а гостевые виртуальные машины, которые на ней работают, называются машинами DomU.

Первоначальная установка хоста

Вся идея виртуализации состоит в запуске базовой системы dom0 с настолько урезанными возможностями, насколько это возможно. Чем меньше у вас возможностей в базовой системе, тем меньше шансов, что-то может пойти не так, как надо. Чтобы получить исключительно стабильную базовую систему, вы можете запускать все службы в виртуальных машинах.

Начните с установки Ubuntu с самого начала в режиме сервера [Совет # 93] так, чтобы у вас в системе, насколько это возможно, не было ничего лишнего

Базовые пакеты, необходимые для Xen

Для того, чтобы запустить Xen и обеспечить сетевыми сервисами виртуальные машины, вам нужно установить несколько пакетов:

$ sudo apt-get install grub bridge-utils iproute python \\
                 python-twisted gcc libcurl3 libcurl3-dev zlib1g zlib1g-dev

Получение двоичного дистрибутива Xen3

Хотя вы можете использовать патчи Xen и собрать ядро [Совет # 78], более простым подходом в настоящий момент будет получение последних двоичных файлов из проекта Xen и установка их с помощью прилагаемых к ним инсталляторов. Чтобы снизить нагрузку на инфраструктуру проекта Xen, разработчики просят везде, где это возможно, использовать для получения двоичных файлов системы P2P, такие как BitTorrent, но если вы подпишетесь и укажите свой адрес электронной почты, они также предоставят вам, если вы пожелаете, прямую ссылку. Посетите http://www.xensource.com/xen/downloads для получения дополнительной информации. То, что вам нужно загрузить для Ubuntu, это заархивированный файл Xen 3.0 Даже если у вас однопроцессорная система, то просто загрузите файл, отмеченный как 32-bit SMP.

Распаковываем бинарный дистрибутив

После того, как вы загрузите двоичный дистрибутив, просто распакуйте его и запустите прилагаемый к нему установочный скрипт:

$ tar zxf xen-3.0.1-install-[arch].tgz
$ cd xen-3.0.1-install
$ sudo ./install.sh

Инсталляционный скрипт разместит в директории /boot несколько специальных ядер и образов initrd, поэтому, если предположить, что все прошло так, как надо, у вас в меню начального загрузчика должно появиться несколько дополнительных пунктов.

Конфигурируем загрузчик GRUB

GRUB предназначен для автоматического обнаружения новых ядер и их автоконфигурирования, но, к сожалению, ему не удается управляться с ядрами Xen так, как надо, так что вам придется сделать некоторые корректировки вручную. Начните с обновления автоматически генерируемого списка ядер:

$ sudo update-grub

Вы должны увидеть сообщение GRUB о новых ядрах Xen в дополнение к тем ядрам, который были установлены ранее. Теперь откройте в вашем любимом редакторе конфигурационный файл GRUB(/boot/grub/menu.lst) и перейдите к концу файла, где приведены все автоматически сгенерированные определения ядер. Вы должны найти одно из них, который выглядит примерно так:

title           Ubuntu, kernel 2.6-xen0
root            (hd0,0)
kernel          /boot/vmlinuz-2.6-xen0 root=/dev/hda1 ro quiet splash
boot

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

### BEGIN AUTOMAGIC KERNELS LIST

и как раз перед ней разместите точно такую же конфигурационную запись, которая была сгенерирована автоматически, но добавьте строку module и измените строку kernel так, как показано ниже:

title           Ubuntu, kernel 2.6-xen0 static
root            (hd0,0)
kernel          /boot/xen-3.0.1.gz console=vga
module          /boot/vmlinuz-2.6-xen0 root=/dev/hda1 ro console=tty0
boot

Элемент static в названии является просто ярлыком, так что, когда GRUB отображает список доступных ядер, вы можете сказать, какие из них были добавлены автоматически, а какое из них является статически определенным ядром.

А теперь скажите GRUB еще раз обновить список ядер просто для того, чтобы убедиться, что вы не сделали никаких ошибок:

$ sudo update-grub 

Сервисы Xen

Xen во время загрузки должен запустить целый ряд сервисов, поэтому установите соответствующие символические ссылки уровней исполнения:

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

Подключаем сеть

Виртуальным машинам, которые вы запустите на вашем хосте, скорее всего, потребуются сетевые подключения. Очевидно, что в их виртуальных материнских платах отсутствуют реальные карты Ethernet, поэтому обычным решением могла бы быть реализация виртуального "моста" из собственного сетевого стека хостовой машины в гостевую систему. Затем каждой гостевой виртуальной машине может быть назначен свой собственный адрес IP, и даже виртуальный адрес MAC, при этом пакеты будут проходить через виртуальный мост в сетевой стек хоста, а затем через карту Ethernet хоста в реальную сеть.

Чтобы поддерживать безопасность настолько, насколько это возможно, также неплохо на хосте dom0 организовать межсетевой экран, который защитит гостевые системы domU от атак внешних машин.

Устанавливаем пакеты, необходимые для сетевых подключений и сетевых сервисов, управляющих подключением гостевых операционных систем:

$ sudo apt-get install iproute bridge-utils screen ssh

Отключаем библиотеки TLS

Стандартная библиотека Thread Local Storage (TLS) несовместима с ядром Xen, так что прежде, чем перезагружаться с ядром Xen, необходимо либо отключить эту библиотеку, либо заменить ее на специальную версию, дружественную к Xen. В противном случае в Xen будет использоваться режим эмуляции, что значительно снижает производительность.

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

$ sudo mv /lib/tls /lib/tls.disabled

При необходимости, вы всегда сможете позже вернуть ее обратно, если она потребуется для ядра, не используемого с Xen.

Для запуска многопоточного кода с большим количеством потоков, вы можете предпочесть установить версию nosegneg этой библиотеки (без сегментации взаимодействия потоков).

Перезагрузка

Теперь вы готовы перезагрузить ваш хост dom0 с ядром Xen, так что наберите команду sudo reboot и убедитесь, что GRUB при перезагрузке загружает нужную версию ядра. После того, как машина закончит загрузку, вы можете выполнить также дополнительную проверку версии ядра:

$ uname -r
2.6.12.6-xen0

Теперь ваша машина dom0 готова принять у себя гостевые виртуальные машины DomU, так что либо скачайте заранее подготовленный образ, либо создайте свой собственный образ [Совет # 91].


Назад Оглавление Вперед