Глава 5. Масштабирование

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

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

 Отправной пункт

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

Предпочтения по умолчанию OpenStack показаны в Таблице 5.1, “ Предпочтения по умолчанию OpenStack”.

Таблица 5.1.  Предпочтения по умолчанию OpenStack
Название Виртуальные ядра Оперативная память Диск Эфемерное пространство

m1.tiny

1

512 МБ

1 ГБ

0 ГБ

m1.small

1

2 ГБ

10 ГБ

20 ГБ

m1.medium

2

4 ГБ

10 ГБ

40 ГБ

m1.large

4

8 ГБ

10 ГБ

80 ГБ

m1.xlarge

8

16 ГБ

10 ГБ

160 ГБ

Основной отправной точкой для большинства приложений является число ядер вашего облака. Применяя некоторые коэффициенты вы можете собрать информацию о:

  • Числе виртуальных машин (VMs), которое вы собираетесь запускать, ((соотношение перегрузки × число ядер) / виртуальных ядер на экземпляр)

  • Как много дисков требуется (предпочтение для размера диска × число экземпляров)

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

Вот пример использования соотношения для получения информации масштабирования для ожидаемого количества виртуальных машин , а также необходимого дискового пространства. Следующие значения поддерживают (200 / 2) × 16 = 1600 экземпляров виртуальных машин и требуют 80 ТБ дискового пространства для /var/lib/nova/instances:

  • 200 физических ядер.

  • БОльшинство экземпляров имеет размер m1.medium (два виртуальных ядра, 50 ГБ дискового пространства).

  • Значение по умолчанию соотношения перегрузки процессора (cpu_allocation_ratio в nova.conf) установлено 16:1.

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

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

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

После того, как вы учтете эти факторы, вы можете определить то, как много ядер потребуется контроллеру облака. Учитывая вышеперечисленные рассуждения, для стойки вычислительных узлов достаточно обычного сервера с 8ю ядрами и 8 ГБ ОЗУ.

Также вы должны проанализировать ключевые характеристики производительности для пользовательских виртуальных машин, а также вы должны принимать во внимание как бюджет, так и требования производительности, включающие производительность дисковой системы (шпиндели/ядра), доступность оперативной памяти (ОЗУ/ядра), пропускную способность сети (Gbps/ядра), а также общую производительность процессоров (ЦПУ/ядра).

[Совет] Совет

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

 Добавление узлов контроллера

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

Напомним, что узел контроллера облака выполняет несколько различных служб. Для целей расширения на новом сервере вы можете установить службы, которые будут взаимодействовать внутри исключительно с использованием очередей сообщений — nova-scheduler и nova-console. Тем не менее, другие составные части требуют большего внимания.

Вы должны осуществлять баланс нагрузки служб пользователя, таких как инструментальная панель (Dashboard), nova-api или прокси хранения объектов. Используйте любой стандартный метод балансировки нагрузки HTTP (круговой [round robin] DNS, аппаратная балансировка нагрузки или программное обеспечение, подобное Pound или HAProxy). Одно предостережение в отношении инструментально панели (Dashboard) касается прокси VNC, который использует протокол WebSocket — нечто, с чем может бороться балансировщик нагрузки L7. Ознакомьтесь также с Horizon session storage.

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

[Совет]Совет

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

 Разделение ваших облаков

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

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

Таблица 5.2, “Методы разделения OpenStack обеспечивает сравнительный обзор каждого метода разделения в настоящее время поддерживаемого вычислительной средой OpenStack.

Таблица 5.2. Методы разделения OpenStack
Ячейки Регионы Зоны доступности Объединения хостов

Используйте когда вам необходимо

Единый терминал API для вычислений или конечная точка API для вычислений, либо вам потребуется второй уровень планирования.

Дискретные регионы с отдельными терминалами API, а также без координации между регионами.

Логическое разделение в пределах вашего развертывания nova для физической изоляции или отказоустойчивости.

Для управления группой хостов с общими характеристиками.

Пример

Облако с множеством сайтов, в котором вы можете планировать ВМ "где угодно" или на определенном сайте.

Облако с множеством сайтов, в котором вы управляете ВМ определенного сайта и вам требуется общая инфраструктура.

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

Планирование для хостов с высоконадежной поддержкой аппаратных средств.

Накладные расходы

Рассматриваются экспериментально.

Новая служба, nova-cells.

Каждая ячейка имеет полную установку nova, за исключением nova-api.

Различные конечные точки API для каждой области.

Каждая область имеет полную установку nova.

Изменения настроек для nova.conf.

Изменения настроек для nova.conf.

Совместно используемые службы

Keystone

nova-api

Keystone

Keystone

Все службы nova

Keystone

Все службы nova

 Ячейки и области

Ячейки OpenStack вычислительной среды разработаны для возможности работы облака в распределенном режиме без необходимости использования более сложных технологий, или для принуждения использования существующих установок nova. Хосты в облаке разбиваются на группы, называемые клетками (cells). Клетки настраиваются в дерево. Клетки верхнего уровня ("API cell") имеют хост, на котором выполняется служба nova-api, однако отсутствуют службы nova-compute. Каждая клетка потомка выполняет все другие типичные службы nova-*, найденные в обычной установке, за исключением службы nova-api. Каждая клетка имеет свою очередь сообщений и службу базы данных, а также выполняет nova-cells — который управляет взаимодействием между API клетки и клетками- потомками.

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

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

Инструментальная панель OpenStack (horizon) может быть настроена на использование множества регионов. Это может быть выполнено с использованием параметра AVAILABLE_REGIONS.

 Зоны доступности и объединения хостов

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

Зоны доступности реализуются и настраиваются аналогично объединениям хостов.

Однако, вы используете их по разным причинам.

 Зоны доступности

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

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

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

 Зоны объединения хостов

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

Широко применяемым использованием объединений хостов является предоставление информации для планировщика nova-scheduler. Например, вы можете использовать объединение хостов для объединения нескольких в группу, которая совместно использует определенные предпочтения(flavors) или образы.

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

Расширенное использование этой общей концепции позволяет различным типам предпочтений работать в различных соотношениях реализаций ЦПУ и ОЗУ, следовательно нагрузки с высокой интенсивностью вычислений и разработки с низкой интенсивностью, а также системы тестирования могут использовать совместно одно и то же облако без недостатка ресурсов для систем с высокой нагрузкой или потери ресурсов при низкой загруженности систем. Оно работает путем установки metadata в вашем объединении хостов и соответствующих ваших типах предпочтений extra_specs

.

Первым шагом является установка агрегированных значений ключей метаданных cpu_allocation_ratio и ram_allocation_ratio для значений с плавающей точкой. Планировщики фильтра AggregateCoreFilter и AggregateRamFilter будут использовать эти значения, а не глобальные значения по умолчанию в nova.conf при планировании хостов в объединении. Важно быть осторожным при использовании этой функции, поскольку каждый узел может находиться в нескольких объединениях, новой при этом должен иметьтолько один коэффициент распределения для каждого ресурса. Это может быть важным для вас не помещать хосты в различные объединения, которые определяют различные значения для одного ресурса.

Это только первая половина уравнения. Чтобыполучить тип предпочтения, который обеспечивает определенное отношение, вы должны установить extra_specs в типе предпочтения (flavor) для пары ключ-значение, которая должна соответствовать объединению. Например, если вы определите extra_specs cpu_allocation_ratio в значение "1.0", то экземпляр этого типа будет работать только в объединениях, где метаданные с ключом cpu_allocation_ratio также установлены в "1.0." На практике, лучше будет определить дополнительную пару ключ- значение для объединенных метаданных в соответствии с тем, чему они отвечают непосредственно для cpu_allocation_ratio или core_allocation_ratio. Это позволяет лучшую абстракцию. Напрмиер, путем определения ключа overcommit и установки значения "high", "medium" или "low", вы можете затем настраивать численные соотношения в объединениях без необходимости изменения всех типов предпочтений, относящихся к ним.

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

Ранее все службы имели зону доступности. В настоящее время свою собственную зону доступности имеют только службы nova-compute. Службы, подобные nova-scheduler, nova-network и nova-conductor всегда распространяются на все зоны доступности.

<Когда вы выполняете любую из следующих операций, соответствующие службы появляются в их собственных внутренних зонах доступности (CONF.internal_service_availability_zone):

  • nova host-list (os-hosts)

  • euca-describe-availability-zones verbose

  • nova-manage service list

Внутренняя зона доступности скрыта в euca-describe-availability_zones (nonverbose).

CONF.node_availability_zone была переименована в CONF.default_availability_zone и используется только в службах nova-api и nova-scheduler.

CONF.node_availability_zone все еще работает, но признана устаревшей.

 Масштабируемое оборудование

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

 Закупка оборудования

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

OpenStack может быть развернут на любом оборудовании, поддерживаемом OpenStack-совместимым дистрибутивом Linuх.

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

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

 Планирование емкости

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

Для вычислительных узлов, nova-scheduler будет заботиться о различиях в размерах для соблюдения требований к числу ядер и объему памяти; однако вы должны проанализировать изменения квалификации пользователей при различных скоростях процессоров. При добавлении узлов хранения объектов, должен быть указан вес должен быть описан для отображения емкости узла.

Мониторинг использования ресурса и роста числа пользователей позволит вам определить время новой закупки. Глава 13, Ведение журналов и мониторинг описывает некоторые полезные метрики.

 Нагрузочные испытания

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