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








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

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

На главную -> MyLDP -> Тематический каталог -> Виртуализация и эмуляция в Linux

Анатомия облачных систем с открытым кодом

Оригинал: "Anatomy of an open source cloud"
Автор: M. Tim Jones
Дата публикации: 09 Mar 2010
Перевод: Н.Ромоданов
Дата перевода: 3 апреля 2010 г.

Краткое содержание: Облачные вычислительные системы уже не являются чем-то исключительным, это ценная и важная технология, которая коренным образом меняет способы использования и разработки приложений. Как и следовало ожидать, Linux и открытый исходный код обеспечивают фундамент для облачных систем (общедоступных и частных инфраструктур). Изучите анатомию облачных систем, их архитектуру и познакомьтесь с технологиями с открытым исходным кодом, которые используются при создания этих динамичных и масштабируемых вычислительных платформ и систем хранения данных.

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

Анатомия облачных вычислительных систем

Мы начнем с изучения базисных абстракций облачной архитектуры (инфраструктура рассматривается как сервис - Infrastructure as a Service [IaaS]), а затем акцент изучения смещается с отдельных строительных блоков к решениям с более высокой степенью интеграции.

Хотя виртуализация и не является обязательным требованием, она дает уникальные возможности при построении динамически масштабируемой архитектуры. В добавок к масштабируемости, виртуализация дает возможность переносить виртуальные машины (VM) с одного физического сервера на другой с тем, чтобы сбалансировать загрузку. На рис.1 видно, что виртуальный компонент реализуется с помощью слоя программного обеспечения, называемого гипервизором (иногда называемом монитором виртуальных машин [VMM]). Этот слой дает возможность одновременного выполнения нескольких операционных систем (и их приложений) на одной физической машине. Над гипервизором расположен объект, называемый виртуальной машиной, который включает в себя операционную систему, приложения и конфигурационные настройки. Если необходимо, то в гипервизоре или в виртуальной машине может быть реализована эмуляция устройств. Наконец, необходимы новые схемы управления, в которых учитывается подобная динамическая природа виртуализации и новые возможности, предоставляемые виртуализацией Такая система управления лучше всего реализуется в виде слоев, причем локальное управление осуществляется на сервере, а управление инфраструктурой, осуществляемое на более высоком уровне, предназначено для "дирижирования" всей виртуальной средой.

Общий принцип построения системы виртуальных машин

Рис.1. Основные элементы узла в облачной системе

Если вы возьмете большое количество узлов, подобных изображенным на рис. 1, разметите их на сети с совместно используемой памятью, организуете общее управление всей этой инфраструктурой, обеспечите входной интерфейс (front-end) с балансировкой нагрузки входящих подключений (независимо от того, частная ли это сеть или общедоступная), с кэшированием и фильтрацией, то вы получите виртуальную инфраструктуру, называемую облаком или облачной системой. Эта новая конструкция изображена на рис. 2. Можно отключать бездействующие машины до тех пор, пока не потребуется дополнительная вычислительная мощность (обеспечивается лучшая эффективность по потреблению питания), и на узлах можно осуществлять балансировку виртуальных машин (даже динамическую) в зависимости от их индивидуальной загрузки.

Виртуальная инфраструктура облака или облачной системы

Рис.2. Вычислительная инфраструктура облачной системы

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

Технологическая основа открытого исходного кода

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

Гипервизоры

Базисом облачной системы на уровне узла является гипервизор. Хотя виртуализация не является обязательной, она дает бесспорное преимущество для масштабируемой и энергоэффективной архитектуры. Существует целый ряд решений для виртуализации с использованием открытого кода, но двумя ключевыми являются те, благодаря которым операционная система Linux превращается в гипервизор: Linux Kernel Virtual Machine (KVM) и Lguest. KVM является официальным решением для реализации гипервизора, развертываемого в производственных условиях. Пакет Lguest является решением, ориентированным для Linux, которое запускает виртуальные машины только для Linux, но этот пакет встроен в ядро и используется очень широко.

Подход, преобразующий Linux в гипервизор, не единствен, есть и другие решения, ориентированные на использование гостевых виртуальных машин. Еще одним подходом является пользовательский режим в системе Linux (User-Mode Linux, UML), в котором ядро гостевой системы Linux модифицируется таким образом, чтобы система могла работать поверх другой операционной системы Linux (без использования гипервизора). Поскольку большинство пользователей хотят работать с немодифицированным ядром, более предпочтительны решения с полной виртуализацией (например, KVM).

Подход UML также популярен, но он требует специального виртуализованного аппаратного обеспечения (такого, как консоль, виртуальный диск и сеть).

Эмуляция устройств

Гипервизор позволяет нескольким операционным системам совместно использовать процессоры (виртуализация CPU), но для того, чтобы достичь полной виртуализации, нужно виртуализировать всю среду виртуальных машин. Машинную (или платформенную) эмуляцию можно выполнить несколькими способами, однако наиболее популярным пакетом с открытым исходным кодом, который поддерживается рядом гипервизоров, является пакет, называемый QEMU. QEMU является полным эмулятором и гипервизором. KVM позволяет использовать QEMU при эмуляции устройств как отдельный процесс пользовательского пространства (см. рис.1). Одной интересной особенностью QEMU является то, что QEMU не только эмулирует диск (в формате QCOW), но также предоставляет и другие расширенные возможности, такие как моментальные снимки системы и "живая" миграция виртуальных машин.

В KVM, начиная с ядра 2.6.25, в качестве средства оптимизации характеристик виртуального ввода/вывода используется библиотека virtio. Это делается с помощью добавления в гипервизор драйверов паравиртуализации, которые вызываются из гостевой системы со скоростью, почти равной "родной" скорости системы. Такой подход возможен только тогда, когда операционную систему можно для этого модифицировать, поэтому он применяется в гостевых системах Linux, работающих по сценарию Linux гипервизора.

В настоящее время virtio и QEMU используются совместно с тем, чтобы при выполнении транзакций с эмулируемыми устройствами распределение нагрузки между гостевой системой Linux и эмулятором QEMU, работающим в пользовательском пространстве, было оптимальным.

Виртуальная сеть

Поскольку виртуальные машины размещаются на физических серверах, требуется сеть для того, чтобы интенсифицировать работу с платформой. Но вместо того, чтобы объединить все виртуальные машины сетью на физическом уровне, можно виртуализировать сами локальные взаимодействия между виртуальными машинами. Для оптимизации взаимодействия виртуальных машин используется виртуальный коммутатор (virtual switch). Виртуальный коммутатор vSwitch ведет себя точно так, как и физический коммутатор, но он в платформе виртуальный (см. рис.3). На этом рисунке видно, что виртуальные интерфейсы (VIFs), используемые при взаимодействии между виртуальными машинами, взаимодействуют с физическими интерфейсами (PIF) через виртуальный коммутатор.

Общая схема использования Open vSwitch с виртуальными и физическими интерфейсами

Рис.3. Общая схема использования Open vSwitch с виртуальными и физическими интерфейсами

В рамках отрытого кода эта проблема хорошо решается с помощью одного очень интересного продукта, называемого Open vSwitch. С его помощью не только реализуется виртуальный коммутатор в виртуальной среде, но также может происходить взаимодействие с физической платформой и реализовываться такие возможности уровня предприятия (enterprise), как виртуальные локальные сети (VLAN), обслуживание с приоритетом качества (QoS), реализация коммуникационных групповых каналов, а также поддержка аппаратного ускорения (например, виртуализации ввода/вывода сетевых адаптеров - single-root I/O virtualization [IOV] network adapters). В настоящее время доступна версия Open vSwitch для ядра 2.6.15, которая позволяет применять в Linux различные виртуальные решения (Xen, KVM, VirtualBox) и использовать различные управляющие стандарты (Remote Switched Port Analyzer [RSPAN], NetFlow и т.д.).

Инструментальные средства и технологии для виртуальных машин

Поскольку виртуальные машины представляют собой комплект из операционной системы, корневой файловой системы и конфигурационных параметров, то есть необходимость в разработке инструментальных средств. Но чтобы можно было реализовать весь потенциал виртуальных машин и инструментальных средств, нужно обеспечить портабельность виртуальных машин. В настоящее время при создании виртуальных машин используется формат Open Virtualization Format (OVF), что позволяет создавать виртуальные машины гибкими, эффективными и портабельными. Согласно OVF вокруг образа виртуального диска создается в формате XML специальная обвертка (wrapper), в которой определяется конфигурация виртуальной машины, в том числе и сетевая конфигурация, указываются требования к процессору и памяти, а также задаются различные дополнительные метаданные, которые определяют образ и его требования к платформе. Ключевым фактором, обеспечиваемым OVF, является портабельность, в результате виртуальные машины можно переносить на любую платформу независимо от того, какой используется гипервизор.

Есть ряд утилит для управления образами виртуальных машин (образы VMI), а также для их конвертирования из одних форматов в другие. Утилита ovftool фирмы VMware является полезным инструментом, который можно использовать для преобразования образов VMI (например, из формата VMware Virtual Disk Development Kit [VMDK] в формат OVF). Эта и другие утилиты полезны поскольку мы используем образы VMI, но что делать, если у вас есть физический сервер, который вы хотите конвертировать в VMI? Для этих целей вы можете воспользоваться полезным инструментальным средством, называемым Clonezilla. Хотя оно первоначально было разработано как средство клонирования дисков для аварийного восстановления данных, вы можете использовать его и для преобразования экземпляра физического сервера в виртуальную машину и упростить его перенос в виртуальную инфраструктуру. Уже есть много других инструментальных средств (например, утилиты, созданные с использованием libvirt) и много средств находятся в стадии разработки, в которых используется формат OVF и которые предназначения для преобразования образов дисков и управлении ими.

Локальное управление

В настоящей статье управление рассматривается с двух точек зрения. В данном разделе обсуждается управление на уровне платформы, а в следующем разделе будет рассмотрено управление на уровне инфраструктуры.

Фирма Red Hat в качестве API для управления платформенной виртуализацией (гипервизоры и виртуальные машины) предложила библиотеку libvirt. Эта библиотека интересна тем, что в ней поддерживается целый ряд гипервизорных решений (два из которых - KVM и Xen) и в ее составе есть API для привязки к ряду языков программирования (например, C, Python и Ruby). Она обеспечивает "последнюю милю" управления, взаимодействуя непосредственно с гипервизором, реализующим платформу, и расширяя API до решений, предназначенных для управления большими инфраструктурами. Библиотека libvirt делает простым запуск и остановку виртуальных машин, в ней есть API для более сложных операций управления, таких как миграция виртуальных машин с одной платформы на другую. Когда используется библиотека libvirt, то можно воспользоваться ее шелл оболочкой (созданной над libvirt), называемой virsh.

Инфраструктурные технологии с открытым кодом

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

Технологии ввода/вывода

Построение масштабируемой и сбалансированной веб архитектуры зависит от возможности балансировать веб-трафик по серверам, на которых выполняется вся конкретная обработка. Существует ряд решений, связанных с балансировкой нагрузки, но недавно Yahoo! открыла исходные коды решения, называемого Traffic Server (Сервер трафика). Traffic Server интересен тем, что в нем собрано большое количество возможностей, предназначенных для работы с облачными инфраструктурами, в том числе управление сессиями, аутентификация, фильтрация, балансировка нагрузки и маршрутизация. Yahoo! первоначально приобрела этот пакет у фирмы Inktomi, но теперь он расширен и представлен как продукт с открытым исходным кодом.

Управление инфраструктурой

Управлять крупномасштабными инфраструктурами (большим количеством гипервизоров и еще большим количеством виртуальных машин) можно различными способами. Два из наиболее распространенных решений созданы на одной и той же платформе (libvirt). Пакет oVirt является открытым инструментальным средством для управления виртуальными машинами, который предназначен для систем различного размера — от систем с небольшим числом виртуальных машин и до систем с тысячами виртуальных машин, работающих на сотнях хостов. Пакет oVirt, разработанный Red Hat, представляет собой управляющую веб-консоль, которая, в добавок к традиционным способам управления, поддерживает также автоматическую кластеризацию и балансировку нагрузки. Пакет oVirt написан на языке Python. Пакет VirtManager, который также базируется на библиотеке libvirt и создан Red Hat, является приложением с графическим интерфейсом GTK + (вместо веб интерфейса, как это в пакете oVirt). VirtManager выводит на экран очень большое количество графических данных (для оперативной оценки производительности и использования ресурсов), в его состав входит клиент VNC, который можно использовать как графическую консоль для доступа к удаленным виртуальным машинам

Пакет Puppet - еще один пакет с открытым исходным кодом, который спроектирован для инфраструктуры дата-центов (облачных систем). Хотя этот пакет не предназначен исключительно для виртуализированных инфраструктур, он упрощает управление крупными инфраструктурами за счет абстрагирования от деталей клиентских операционных систем. Это делается с помощью языка Puppet. Язык Puppet идеален для автоматизации административных задач, выполняемых на большом количестве серверов, и он широко используется в настоящее время.

Интегрированные решения IaaS (инфраструктура как сервис)

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

Eucalyptus

Одним из самых популярных пакетов с открытым исходным кодом, предназначенным для создания инфраструктур облачных вычислений, является пакет Eucalyptus (Эвкалипт; сокращение Elastic Utility Computing Architecture for Linking Your Programs to Useful Systems). Уникальным его делает то, что он совместим с технологией Amazon Elastic Compute Cloud (Amazon EC2 – интерфейс облачных вычислительных систем фирмы Amazon). Кроме того, в состав Eucalyptus входит пакет Walrus - приложение для облачного хранения данных, совместимое с технологией Amazon Simple Storage Service (Amazon S3 – интерфейс облачных систем хранения данных фирмы Amazon).

Пакет Eucalyptus поддерживает KVM/Linux и Xen в качестве гипервизора и включает в себя дистрибутив кластера Rocks, предназначенного для управления кластерами.

OpenNebula

Пакет OpenNebula - это еще одно интересное приложение с открытым исходным кодом (распространяется под лицензией Apache), разработанное в Мадридском университете Universidad Complutense de Madrid. Кроме поддержки создания частных облачных систем, пакет OpenNebula поддерживает идею создания гибридных облачных систем. Гибридные облачные системы позволяют сочетать в себе как частные облачные инфраструктуры, так и общедоступные облачные инфраструктуры (например, Amazon), что позволяет достичь еще больше степени масштабирования.

Пакет OpenNebula поддерживает Xen, KVM/Linux и Vmware, а для управления и аналитики в нем используются такие компоненты, как библиотека libvirt.

Nimbus

Пакет Nimbus - другое решение IaaS, ориентированное на научные вычисления. С помощью Nimbus вы можете арендовать удаленные ресурсы (например, те, что предлагаются Amazon EC2) и управлять ими локально (конфигурирование, развертывание виртуальных машин, мониторинг и т.д.). Nimbus был преобразован из проекта Workspace Service (часть Globus.org). Будучи зависимым от Amazon EC2, пакет Nimbus поддерживает использование Xen и KVM / Linux.

Облачная платформа Xen

Фирма Citrix интегрировала пакет Xen в платформу IaaS, где Xen используется как гипервизор, и внедрены другие компоненты с открытым исходным кодом, такие как Open vSwitch. Интересным преимуществом Xen является то, что управление взято из проекта Kensho и базируется на стандартах (в том числе OVF, Distributed Management Task Force [DTMF], общей информационной моделью Common Information Model [CIM] и Virtualization Management Initiative [VMAN]). Стек управления Xen соответствует требованиям SLA, а для обратной связи используются подробные метрики.

OpenQRM

Последним в списке, но не по своим возможностям укажем пакет OpenQRM, который является платформой для управления центром обработки данных. В OpenQRM предлагается единая консоль для управления всем виртуальным центром обработки данных, и, с точки зрения его архитектуры, есть возможность подключать к пакету инструментальные средства сторонних разработчиков. Пакет OpenQRM обеспечивает высокую готовность системы (за счет избыточности компонентов) и поддерживает использование различных гипервизоров, в том числе KVM / Linux, Xen, VMware и Linux VServer.

Двигаемся дальше

Можно написать целые тома о той важной роли, которую играет открытый код в облачных вычислительных системах и в системах виртуализации, но в настоящей статье представлено краткое введение в некоторые из популярных и доступных к настоящему моменту решений. Независимо от того, собираетесь ли вы строить облачную систему исходя из собственных требований к ее отдельным частям, или вам нужно просто уже готовое решение, которое работает "из коробки", вы сможете подобрать вариант, имеющий открытый исходный код. Более подробную информацию смотрите в разделе "Ресурсы" в оригинале статьи.