Добрый день.
Eucalyptus позиционируется как открытое (open source) решение для организации доступа к вычислительным ресурсам с возможностью динамического масштабирования системы и балансировки нагрузки. В данной статье мы рассмотрим архитектуру Eucalyptus, вопросы его установки и возможности использования в разработке программных продуктов и предоставлении услуг для пользователей.
Архитектура
Eucalyptus реализует схему IAAS (Infrastructure-as-a-Service), а именнно “нижний” уровень облака, позволяющий поднимать виртуальные машины по запросу вышестоящих приложений. Возможности Eucalyptus во многом позаимствованы из Amazon EC2, поэтому Eucalyptus c некими ограничениями и допущениями можно рассматривать как открытую альтернативу сервисам Amazon. Иерархическая структура Eucalyptus выглядит так:
Контроллер узла (Node Controller, NC) управляет запуском, работой и остановом виртуальных машин на подведомственном узле. Узел – это машина с работающим гипервизором (например, Xen), который осуществляет работу виртуальных машин (instances в терминологии Eucalyptus).
Контроллер кластера (Cluster Controller, CC) управляет подведомственными контроллерами узлов (NC): собирает информацию о загруженности узлов и принимает решения, на каких узлах будет выполнен запуск виртуальных машин.
Контроллер хранилища (Storage Controller) – место для хранения образов (image) виртуальных машин. В качестве хранилища выступает Walrus – сервис, подобный Amazon S3.
Контроллер облака (Cloud Controller, CLC) представляет собой точку входа. Со стороны конечного пользователя (или вышестоящего приложения) поступают запросы на запуск виртуальных машин. Со стороны контроллеров кластеров поступают данные о загруженности узлов облака.
Алгоритм работы
Владелец облака помещает в хранилище образы тех виртуальных машин, которые будут запускаться в облаке (например, Debian, CentOS, Ubuntu). Запрос на запуск виртуальных машин определяет, какие машины из списка возможных и в каком количестве будут подняты в облаке. Получив запрос, контроллер кластера решает, куда перенаправить этот запрос. У пользователя есть возможность указать, в каком кластере, или зоне (availability zone в терминологии Amazon) должны быть запущены машины. Соответствующий контроллер кластера получает запрос и принимает решение, на каких узлах будет выполнено задание. Запрос уходит либо первому из узлов с имеющимися свободными ресурсами до его полного заполнения (режим Greedy) либо поочередно каждому из них (RoundRobin). Получив задание, контроллер узла загружает соответствущий образ из хранилища (или своего локального кэша, если этот образ уже загружался) и запускает машины средствами гипервизора.
Установка Eucalyptus
Процесс установки описан в документации, поэтому мы лишь вкратце пройдемся по основным шагам и сделаем акцент на моментах, выявленных на практике. Далее представлена установка Eucalyptus для облака, реализованного на двух машинах. Первая машина: CLC, Walrus, CC, NC. Вторая машина: NC.
Eucalyptus можно самостоятельно собрать из исходного кода либо воспользоваться rpm/deb-пакетами, уже подготовленными для отдельных систем. Для работы облака нужен гипервизор, и в текущей версии Eucalyptus (1.5) поддерживаются Xen и KVM. В нашем случае выбор пал на OpenSUSE 11.1 и, соответственно, Xen, который идет в составе системы. Важно отметить, что для работы Xen нужен процессор, поддерживающий технологию IntelVT или AMD-V. Когда Xen установлен, в меню загрузчика Grub появляется пункт Xen — OpenSUSE 11.1, который надо выбрать при загрузке системы (либо сделать его выбором по умолчанию). Другие пакеты, которые нужно установить перед инсталляцией облака, представлены здесь. В случае OpenSUSE все пакеты достаточно просто устанавливаются запуском yast из командной строки.
Инсталляция выполняется по следующему сценарию: синхронизация времени, установка rpm-пакетов, запуск web-сервисов. После установки важно настроить зависимости между скриптами в /etc/init.d/ таким образом, чтобы в случае перезагрузки системы “облачные” сервисы на “основном” узле запускались в следующем порядке: eucalyptus-cloud, eucalyptus-cc, eucalyptus-nc. Помните о RUN_PARALLEL?
Для работы с облаком нужно скачать и установить Amazon EC2 tools (1, 2) либо Euca2ool (1). В нашем случае использовались Amazon EC2 tools, но, судя по их составу, они имеют сходную с Euca2ool функциональность. EC2 tools (или Euca200l), по сути, представляют собой клиентские инструменты для управления облаком.
Далее нужно зарегистрировать кластер в облаке и добавить в конфигурацию все узлы (в нашем случае, два). После этого по адресу https://your_cloud_host:8443 можно получить x509-сертификаты, которые понадобятся для работы с Amazon EC2 tools. Про сертификаты нужно “рассказать” системе с помощью скрипта eucarc, который идет в архиве.
Работа с Eucalyptus
Все, облако создано. Пришло время подумать о конфигурации сети. В настоящее время Eucalyptus предлагает 5 схем организации сети, различающиеся механизмом выделения IP-адресов. Наиболее простой способ – System (в облаке он задан по умолчанию). Гостевые виртуальные машины в режиме System получают IP-адреса от DHCP-сервера, который должен быть во внешней сети. Режим VNET_MODE меняется в файле eucalyptus.conf. В этом же файле нужно не забыть изменить значения параметра VNET_BRIDGE, который представляет собой имя сетевого моста (bridge), созданного для Xen. По умолчанию этот параметр равен “eth0″, но в случае OpenSUSE/Xen он должен соответствовать “br0″ (нужно проверить с помощью ifconfig).
Далее образы виртуальных машин нужно закачать в Walrus. Вот подробная инструкция. Eucalyptus предоставляет готовые x64-образы для Ubuntu, CentOS, Debian и Fedora. Если машины из списка неинтересны, то образы нужно готовить самим.
Отдельным абзацем стоит отметить создание пользователей облака (users). По умолчанию, в системе есть пользователь admin, который может создавать аккаунты через уже упомянутый web-интерфейс (https://your_cloud_host:8443). Каждый созданный пользователь получает письмо со ссылкой-подтверждением. Подтвердив свою идентичность, пользователь получает x509-сертификаты и возможность управлять облаком с помощью Amazon tools. В простейшем случае на этапе тестирования облака можно ограничиться админским аккаунтом (admin).
Настройка облака закончена. Можно приступать к запуску виртуальных машин. Список доступных образов доступен по команде ec2-describe-images. Перед запуском виртуальной машины нужно создать пару SSH-ключей (private/public). Запуск виртуальных машин выполняется с помощью ec2-run-instances, которая в качестве одного из параметров получает эти ключи и помимо всего прочего “внедряет” их в запускаемую машину. В случае VNET_MODE=”SYSTEM” каждая запущенная виртуальная машина получает IP-адрес от DHCP-сервера. Этот адрес можно узнать с помощью команды ec2-describe-instances. Соответственно, ssh-доступ к запущенной виртуальной машине (скажем, Debian) осуществляется с помощью созданного SSH-ключа, без пароля.
Несколько советов
1. Для управления облаком необходимо определенное окружение, поэтому в .bashrc можно добавить строки такого вида:
export EC2_AMITOOL_HOME=/your_dir/amazon/ec2-ami-tools-1.3-26357/ export EC2_HOME=/your_dir/amazon/ec2-api-tools-1.3-30349/ export PATH=$PATH:${EC2_HOME}/bin export PATH=$PATH:${EC2_AMITOOL_HOME}/bin source /your_dir/euca2-admin-x509/eucarc
2. На этапе тестирования лучше временно отключить AppArmor (или SELinux – в зависимости от дистрибутива Linux), чтобы избежать лишней суеты из-за нехватки прав. Когда облако заработает, все можно включить обратно. То же самое с правилами в iptables.
3. При старте NC в iptables добавляется такое правило (Chain FORWARD):
LOG udp -- anywhere anywhere udp spts:bootps:bootpc dpts:bootps:bootpc LOG level info
Его наличие необходимо для получения ip-адресов от DHCP-сервера. Если это правило не создается, можно рестартануть NC.
4. C первого раза все не заработает. К этому надо быть готовым и читать, что пишут в cc.log, nc.log (по умолчанию система логирования находится в режиме Debug).
5. Cледует отметить, что на узлах должно быть достаточно дискового пространства. По сути, каждый образ виртуальной машины (image) присутствует в нескольких экземплярах (в хранилище Walrus и в локальном кэше на каждом узле после того как данный узел хотя бы раз загрузил этот образ). Каждая запущенная виртуальная машина (instance) также занимает соответствующее место на жестком диске.
6. Особое внимание файлу eucalyptus.conf. Там есть много чего полезного. Например, параметр MAX_CORES определяет, сколько СPU cores могут задействовать запускаемые гостевые машины. Если в системе 4 физических процессора, то увеличение этого параметра до 8 позволит поднять большее количество виртуальных машин. По умолчанию, это значение равно количеству процессоров. Есть смысл разобраться с каждым подобным параметром.
Сферы применения Eucalyptus
В первую очередь, облако интересно конечным пользователям информационных систем. Простейший случай: есть web-сервис, обслуживающий запросы от пользователей. Сервис реализован в облаке. По мере того как количество запросов растет и сервис перестает справляться с нагрузкой, в систему можно добавить (динамически или по требованию) новые узлы и перераспределить нагрузку между ними. Важно отметить, что в настоящее время в Eucalyptus нет механизма балансировки входного трафика, подобного Elastic Load Balancing в Amazon, поэтому для отдельно взятого приложения распределение входящих запросов нужно организовывать самостоятельно. Иными словами, в Eucalyptus есть возможность балансировки нагрузки в контексте ресурсов облака, а балансировку на уровне приложения нужно реализовывать своими силами.
Во вторую очередь, Eucalyptus полезен в непосредственной разработке программных систем. В облаке можно объединить аппаратные ресурсы всех мастей и оттенков, удовлетворяющих требованиям Eucalyptus. Далее, если для сборки разноплатформных билдов или тестирования производительности требуется поднять N гостевых виртуальных машин, то не надо думать, где их поднимать. Нужно передать запрос облаку, и оно решит вопрос самостоятельно. В такой схеме очевидны преимущества облачных технологий над обычной виртуализацией. Облако использует виртуализацию для предоставления более интеллектуальных сервисов, беря на себя заботу о динамическом распределении нагрузки. Впрочем, следует отметить, что границы между облачными и виртуальными технологиями размыты, и потому описанную выше схему порой представляют как результат именно виртуальных технологий, а не облачных. Сами разработчики Eucalyptus на вопрос о сопоставлении облака и виртуализации отвечают, что разница в аутентификации доступа к ресурсам и предоставлении Service Level Agreements (SLAs) или Quality-of-Service (QoS), в соответствии с которыми осуществляется доступ к ресурсам облака. Облако позиционируется как надстройка над средствами виртуализации и более эффективный способ доступа к вычислительным мощностям.
Здесь же следует отметить ограничения Eucalyptus. В разработке ПО эта система не сможет заменить привычных средств виртуализации (скажем, продукты VMware), и, судя по всему, разработчики и не ставят такую задачу (по крайней мере, на текущий момент). Eucalyptus – это система выделения ресурсов. Есть образ (image), из него рождается нужное количество гостевых машин (instances). Машины поработали, выполнили свою задачу и после этого уничтожены, высвободив ресурсы для следующих задач. Для запущенной машины нет возможности сделать снапшот. Поэтому если нужна возможность сохранить гостевую машину или внести какие-то изменения в ее работу (типичные повседневные задачи), то выполняются они по-прежнему в среде, где есть возможности делать снапшоты и изменять конфигурацию. Иными словами, Eucalyptus – это новый инструмент, который привносит дополнительные возможности, поэтому полезен он будет в тех задачах, условия которых соответствуют его функциональности.
Eucalyptus и подобные системы довольно перспективны, поэтому за их развитием стоит следить, даже если на данный момент нет задач, которые им можно доверить. В будущем они обязательно появятся. Ну а если такие задачи есть сейчас, то в добрый путь! Eucalyptus – это интересное и захватывающие приключение с призом в виде работающего облака.
Оставайтесь с нами.
Что такое качество программного обеспечения и как его улучшить: теория и практика, задачи и решения, подводные камни и обходные пути.
Pingback : OpenQuality.ru | Eucalyptus: как управлять облаком | September 2, 2009
[…] конечного пользователя облако, реализованное на базе Eucalyptus, представляет собой аморфную сущность с […]
Pingback : OpenQuality.ru | Eucalyptus: поднятие гостевых Windows-машин | October 15, 2009
[…] пост для автоматизаторов, внедряющих Eucalyptus. Все примеры, представленные в документации Eucalyptus, все […]
Pingback : OpenQuality.ru | Кому в облаках жить хорошо? | January 17, 2010
[…] Подобную функциональность предлагает Eucalyptus, но при этом облако реализуется на вычислительных […]
Автор комментария : Капитан | February 9, 2013
Хороший обзор конкурента: http://www.opennet.ru/opennews/art.shtml?num=34317
[Ответить]