Глава 3. Проектирование контроллера облака и управления облаком

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

Контроллер облака обеспечивает централизованную систему управления для развертывания OpenStack с многими узлами. Обычно контроллер облака управляет аутентификацией и отсылкой сообщений всем системам с использованием очереди сообщений.

Для многих реализаций контроллер облака является отдельным узлом. Однако, для обеспечения высокой доступности, вы должны принять во внимание несколько соображений, о которых мы расскажем в данной главе.

Контроллер облака управляет следующими службами в облаке:

Базы данных

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

Службы очередей сообщений

Все AMQP—Advanced Message Queue Protocol—messages (очереди протоколов запросов расширенных сообщений) для служб принимаются и отсылаются соотвествующими агентами очереди.

Службы проводника

Запросы от прокси к базам данных

Аутентификация и авторизация для управления идентификацией

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

Службы управления образами

Хранят и обслуживают образы со связанными с ними метаданными для запуска в облаке

Службы планирования

Указывают, какие ресурсы использовать в первую очередь; например, распределят где запускать экземпляры на основе правил

Пользовательские инструментальные панели

Обеспечивают внешние интерфейсы для пользователей на основе веб- интерфейса для потребления услуг обака.

Терминалы API

Предоставляют доступ на основе REST API для каждой службы, причем каталог терминалов API управляется службой идентификации

В нашем примере контроллер облака имеет коллекцию компонентов nova-*, которая представляет глобальное состояние облака; общается со службами, такими как аутентификация, обработка информации об облаке в базе данных, с помощью очередей устанавливает связь со всеми вычислительными узлами и работающими устройствами ( worker) систем хранения, а также обеспечивает API. Каждая работающая на выделенном контроллере облака служба может быть разбита на отдельные узлы для масштабируемости или доступности.

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

  • Внешний веб-интерфейс для API запросов, планировщик для выбора какой вычислительный узел будет загружать экземпляр, служб идентификации и инструментальной панели

  • Сервер баз данных и очереди сообщений (например, MySQL, RabbitMQ)

  • Службаобразов для управления ими

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

 Анализ аппаратных средств

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

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

Таблица 3.1. “Анализ размеров оборудования контроллера облака” содержит общий анализ для рассмотрения подбора оборудования при проектировании контроллера облака.

Таблица 3.1. Анализ размеров оборудования контроллера облака
Анализ Результат

Как много экземпляров будет работать одновременно?

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

Сколько вычислительных узлов работает одновременно?

Убедитесь, что ваши очереди сообщений успешно обрабатывают запросы и имеют соответствующий размер.

Как много пользователей будут иметь API доступ?

Если много пользователей будет делать большое количество запросов, убедитесь, что нагружаемые ЦПУ контроллера облака смогут их обработать

Как много пользователей будет иметь доступ к инструментальной панели вместо прямого REST API доступа?

Инструментальная панель выполняет много запросов, даже больше, чем API доступ, следовательно, добавьте еще больше ЦПУ, если ваша инструментальная панель выступает в роли главного инструмента для ваших пользователей.

Сколько nova-api служб вы предполагаете использовать в своем облаке?

Вы должны подогнать контроллер по размеру ядер под службы.

Как продолжительно работает одна служба?

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

Выполняется ли вовне верификация вашей системы аутентификации?

Внешние системы, например, такие как LDAP или Active Directory требует сетевой связности между контроллером облака и системой аутентификации. Также убедитесь, что контроллер облака имеет достаточную мощность ЦПУ для выполнения запросов.

 Разделение служб

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

Таблица 3.2. Сценарии реализации
Сценарий Обоснование

Запуск серверов glance-* на сервере swift-proxy.

Подобная реализация получает достаточную дополнительную поддержку ввода/вывода прокси- сервера хранилища объектов (Object Storage proxy), к тому же часть Glance, отвечающая за доставку образов получает преимущества от физического размещения на аппаратных средствах хранилища объектов (Object Storage) и, следовательно, наличия хороших коммуникаций с ним.

Запуск центрального выделенного сервера базы данных.

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

Запуск одной VM на службу.

Подобное развертывание выполняет центральные службы на наборе серверов с запущенным KVM. Выделенная виртуальная машина создавалась для каждой службы (nova-scheduler, rabbitmq база данных и т.д.). Это помогает развертыванию при масштабировании, поскольку делает возможной настройку ресурсов для каждой виртуальной машины на основе полученной ими нагрузки (нечто не очень понятное в процессе установки).

Использование внешнего балансировщика нагрузки.

Подобная реализация использует дорогостоящее оборудование для балансировщика нагрузки в своей организации. В ней работает много серверов nova-api и swift-proxy на различных физических серверах и используется балансировщик нагрузки для переключения между ними.

Один из выборов который всегда возникает, использовать виртуализацию или нет. Некоторые службы, такие как серверы nova-compute, swift-proxy и swift-object, не подлежат виртуализации. Однако, серверы управления часто могут быть успешно виртуализованы -падение производительности часто может быть компенсировано простым запуском большего числа служб.

 Очередь сообщений

Большинство служб OpenStack Compute общаются друг с другом с использованием очередей сообщений. Например, вычислительные службы взаимодействуют с службами хранения и сетевыми службами через очереди сообщений для выполнения блокировки. Кроме того, вы можете включить уведомления для любой службы. RabbitMQ, Qpid и 0mq, все они являются популярным выбором для службы очереди сообщений. Обычно при отказе очереди сообщений или возникновении ее недоступности кластер медленно деградирует и полностью останавливается в состоянии "доступен только для чтения" с зависшей информацией в точке, в которой было отправлено последнее сообщение. Соответственно, мы рекомендуем, чтобы вы создавали кластерную очередь сообщений. Помните, что кластерные очереди сообщений могут стать болезненной точкой для многих реализаций. Вто время как RabbitMQ имеет встроенную кластерную поддержку, появлялись сообщения о проблемах при работе с большими масштабами. В то время как доступны другие решения для очередей, такие как 0mq и Qpid, 0mq не предлагает отслеживание очереди. Qpid является системой сообщений по выбору для Red Hat и его производных. Qpid не имеет встроенной поддержки кластеризации и требует дополнительной службы, такой как Pacemaker или Corsync. Для своей очереди сообщений вы должны определиться с тем, какой уровень потери данных будет еще допустим для вас и стоит ли вам использовать поддержку проекта OpenStack повторного выполнения множества хостов MQ в случае отказа, например, с использованием возможности вычислительной службы делать это.

 Службы проводника

В предыдущей версии OpenStack все службы nova-compute требовали прямой доступ к базе данных, размещенной в контроллере облака. Это создавало проблемы по двум причинам: безопасности и производительности. Что касается безопасности, если вычислительный узел был скомпроментирован, злоумышленник по определению имеет доступ к базе данных. Относительно производительности, обращения nova-compute к базе данных являются однопоточными и блокируемыми. Это создает узкое место для производительности, поскольку запросы к базе данных выполняются последовательно, а не параллельно.

Служба проводника (прим. пер. или дирижера: conductor) разрешает обе эти проблемы выступая в качестве прокси для службы nova-compute. Теперь вместо того, чтобы nova-compute напрямую обращалась к базе данных, она взаимодействует со службой nova-conductor, а nova-conductor осуществляет доступ к базе данных в интересах nova-compute. Поскольку nova-compute больше не осуществляет прямой доступ к базе данных, проблема безопасности решена. Дополнительно nova-conductor является неблокирующей службой, следовательно, запросы от всех вычислительных узлов выолняются параллельно.

[Note] Замечание

Если вы все еще используете nova-network и сетевые службы с множеством хостов в своей облачной среде, nova-compute все еще требует прямого доступа кбазе данных.

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

 Интерфейс прикладного программирования (API)

Весь открытый доступ, будь то прямой доступ, доступ с использованием командной строки или через инструментальную панель на основе веб- интерфейса использует службу API. Справочные материалы по API вы найдете по адресу http://api.openstack.org/.

Вы можете выбрать между Amazon EC2 совместимым API или прямым OpenStack API. Одна из проблем, которая может возникнуть при работе сразу с двумя API, заключается в несовместимости при обращении к образам и экземплярам.

Например, EC2 API обращается к экземпляру с использованием шестнадцатиричного ID, в то время как OpenStack API использует имена и числа. Аналогично, EC2 API, как правило, полагается на псевдонимы DNS для соединения с виртуальными машинами, в отличие от OpenStack, который обычно перечисляет IP адреса.

Если OpenStack не установлен надлежащим образом, элементарно получить ситуацию, при которой пользователи не смогут связаться со своими экземплярами просто из-за неправильных псевдонимов DNS. Несмотря на это, EC2- совместимость может помочь пользователям мигрировать на ваше облако.

Как и в случае с базой данных, и с очередями сообщений, наличие более одного API сервера может оказаться полезным. Для достижения высокой доступности служб nova-api могут быть использованы традиционные методы балансировки нагрузки HTTP.

 Расширения

Спецификация API определяет основные операции, совместимости и типы носителей OpenStack API. Клиент всегда может зависеть от доступности этого ядра API и разработчиков реализации всегда требуется поддерживать его в полном объеме. Требование строгого соответствия ядра API дает возможность клиентам полагаться на минимальный уровень функциональности при взаимодействии с различными реализациями одного и того же API.

OpenStack Compute API является расширяемым. Расширение добавляет возможности к API поверх уже определенных в ядре. Внедрение новых функций, типов MIME, действий, состояний, заголовков, параметров и ресурсов могут быть выполнены с помощью расширений в ядре API. Это позволяет введение новых функций в API, не требуя изменения версии и позволяет введения ниши функциональности конкретного производителя.

 Scheduling

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

В настоящее время существуют два типа планировщиков: nova-scheduler для виртуальных машин и cinder-scheduler для томов блочных хранилищ. Оба планировщика способны масштабироваться горизонтально, следовательно, для целей высокой доступности или при очень высокой частоте запросов планирования установки, вы должны рассматривать работу множества экземпляров каждого планировщика. Все планировщики прослушивают совместно используемую очередь сообщений, следовательно никакой специализированный балансировщик нагрузки не требуется.

 Образы

Служба образов OpenStack состоит из двух частей - glance-api и glance-registry. Первая отвечает за доставку образов; вычислительные узлы используют их для загрузки образов с серверов баз данных. Последняя поддерживает информацию метаданных, связанную с образами виртуальных машин и необходимыми серверами хранения.

Часть glance-api является уровнем абстракции, допускающим выбор сервера образов (back-end). В настоящее время, он поддерживает:

Хранилище объектов OpenStack

Позволяет вам хранить образы в качестве объектов.

Файловая система

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

S3

Позволяет вам осуществлять выборку образов из Amazon S3.

HTTP

Позволяет вам осуществлять выборку образов с веб- сервера. При использовании данного режима вы не можете записывать образы.

Если у вас есть служба хранения объектов OpenStack (OpenStack Object Storage), мы рекомендуем использовать ее как масштабируемое пространство для хранения ваших образов. Вы также можете использовать файловую систему с достаточной производительностью или Amazon S3 - если вы не нуждаетесь в возможности загрузки новых образов с помощью OpenStack.

 Инструментальная панель

Инструментальная панель OpenStack (horizon) обеспечивает пользовательский интерфейс на веб- основе к различным компонентам OpenStack. Интсрументальная панель содержит область конечных пользователей для управления пользователями своей виртуальной инфраструктурой и область администратора для управления средой OpenStack оператором облака в целом.

Инструментальная панель реализована в виде веб приложения Python запущенного на Apache httpd. Таким образом, вы можете рассматривать его аналогичным любому другому веб- приложению, при условии, что ему доступны API серверы (включая его административные конечные приложения) с использованием через сеть.

 Аутентификация и авторизация

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

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

Служба идентификации OpenStack (Keystone) является пунктом, который обеспечивает решения об аутентификации и предоставляет информацию об атрибутах пользователя, которые затем используются другими службами OpenStack для выполнения авторизации. Политики устанавливаются в файле policy.json. Для информации об их настройке, см. Главу 9, Управление проектами и пользователями.

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

  • Хранимые в памяти значения ключей (упрощенная внутренняя структура хранения)

  • база данных SQL (такая как MySQL или PostgreSQL)

  • PAM (Подключаемый модуль аутентификации)

  • LDAP (такой как OpenLDAP или Microsoft's Active Directory)

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

 Анализ сети

Поскольку контроллер облака поддерживает очень много различных служб, он должен быть в состоянии обрабатывать бьющий по нему объем трафика. Например, если вы решите принимать на контроллере облака службу образов OpenStack (OpenStack Imaging), контроллер облака должен обеспечивать передачу этих образов с приемлемой скоростью.

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

Мы рекомендуем вам использовать быстрые NIC, например, 10 Gb. Вы также можете выбрать использование двух сетевых карт 10 Gb и объединить их вместе. Хотя вы не можете получить всю объединенную скорость 20 Gb, различные потоки используют различные сетевые адаптеры. Например, если контроллер облака передает два образа, каждый образ использует отличную сетевую карту и получает полную пропускную способность 10 Gb.

{Прим. пер.: изменено используемое в оригинале сокращение GB на правильное по контексту Gb (Гигабит).
Также рекомендуем обратить внимание на возможность использования Infiniband 56Gb/100Gb из-за их существенно большей пропускной способности, большей гибкости и мультипротокольной поддержки, возможности разделения канала между службами и т.п. К тому же, он может оказаться экономически более оправдан.
На наш взгляд представляет большой интерес совместная разработка Intel и Fujitsu
PRIMERGY RSA 0.5, позволяющая строить решения дезинтегрированных серверов на базе интерфейса PCI Express v.3 с использованием технологии Intel® Silicon Photonics. Данная разработка позволяет создавать единое мощное ядро вычислительной системы с динамически подгружаемыми по запросу приложения аппаратных ресурсов из имеющихся в наличии пулов аппаратных средств (ускорителей вычислений, систем хранения, средств сетевой маршрутизации и т.п.).
Фактически, концепция подгружаемых по запросу программных ресурсов OpenStack находит свое продолжение уже на аппаратном уровне при беспрецедентных пропускных способностях (до 128Gbps) и временах латентности, сопоставимых с задержками во внутренних шинах обычного сервера.
Подробности и более современные предложения вы можете получить у нас e-mail по запросу.
}