Разворачивание балансировщика (HAProxy) в D2C.io

 

Это руководство поможет вам развернуть сервис HAProxy в Docker контейнере. Это edge сервис, который как и NGINX может обслуживать HTTP и HTTPS, а также является балансировщиком нагрузки. Данное руководство может быть полезно как начинающим, так и продвинутым разработчикам. 

Denis Zaripov

Product manager

 
 

Почему Docker?

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

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

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

Подготовка

Я хочу начать с проектом, в котором уже развернут сервис приложения. О том как его развернуть я писал в этом руководстве. Вы можете начать с любым сервисом приложения (application service). В моем случае — это приложение на Python, развернутое на трех серверах.

 

Создание сервиса HAProxy

Для начала, требуется открыть сервис, который вы хотите балансировать/обслуживать с помощью HAProxy и нажать на кнопку «+Add load balancer«. 

Создание сервиса HAProxy. Режим

По умолчанию, D2C генерирует публичный домен вида [servicename-www].[accountID].[at].d2c.ioДля начала лучше использовать режим HTTP или TCP. Вы сможете изменить режим на HTTPS и добавить свой домен после разворачивания сериса. Мы поговорим об этом ниже.

Создание сервиса HAProxy. Порты

Доступ из Интернета (Access from the Internet) в HAProxy включен по умолчанию. Вы можете отлючить доступ во время создания или последующего редактирования сервиса.

Создание сервиса HAProxy. Выбор сервера

Есть одна особенность, которую необходимо понимать на этом шаге. В HAPproxy по умолчанию включен доступ из интернета (access from the Internet). 80 и 443 порты должны быть свободны на сервере, который вы планируете использовать для разворачивания HAProxy. Если вы используете облачные сервера от поддерживаемых облачных провайдеров — занятые порты показываются на карточке сервера:

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

Поскольку приложение на Python было развернуто с использованием D2C Hello world тестового приложения мы можем проверить работает балансировка или нет:

Обслуживание сервиса HAProxy. Действия и настройки

Давайте откроем сервис HAProxy и посмотрим какие действия у настройки здесь есть.

Стандартные действия:

  • Update HAProxy. Это действие отправит запрос на обновление сервиса до последней доступной версии.
  • Restart. Перезапустит контейнер
  • Stop. Остановит контейнер
  • Move. Вы можете переместить сервис в любой другой из ваших проектов в аккаунте. Нажмите на иконку с выпадающим списком и выберите существующий проект или создайте новый
  • Destroy. Удаление всех контейнеров сервиса. Может быть выполнено с Force. Нажмите на иконку с выпадающим списком для удаления сервиса с Force.

Edit settings

Как и у любого другого сервиса в HAProxy есть стандартные блоки, такие как: Service settings, Persistent data volumes, Ports, Custom configs
Самый важный блок — Обслуживание сервисов (Configure services).

В этом блоке вы можете выбрать какие домены использовать, изменить режим и конфиг HAProxy. Нажмите на кнопку «Generate new config» для того, чтобы внести изменения в конфиг. 
Возможно вам будет полезны наши статьи по поводу конфигурирования HAProxy (Часть первая и Часть вторая).

Действия и конфигурирование почти такие же как и в NGINX. Различия следующие:

  • HAProxy может обслуживать только один сервис (NGINX может обслуживать любое количество сервисов)
  • В HAProxy есть режим Sticky sessions. Он может ограничить количество соединений и это один из путей предоставления работы WebSockets на нескольких серверах. Когда вы его включаете пользователь всегда соединяется с одним и тем же сервером:

Обслуживание сервиса HAProxy. Логи

System (deploy) logs

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

Container logs

Логи контейнера можно найти на странице контейнера.
Нажмите на вкладку «Logs«
Вы увидите логи приложения. Их также можно фильтровать по дате и отображть только ошибки.

Что дальше?

Посмотрите на предыдущие инструкции, если пропустили: