Это руководство поможет вам развернуть сервис 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. Действия и настройки

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




В этом блоке вы можете выбрать какие домены использовать, изменить режим и конфиг HAProxy. Нажмите на кнопку «Generate new config» для того, чтобы внести изменения в конфиг.
Возможно вам будет полезны наши статьи по поводу конфигурирования HAProxy (Часть первая и Часть вторая).
Действия и конфигурирование почти такие же как и в NGINX. Различия следующие:
- HAProxy может обслуживать только один сервис (NGINX может обслуживать любое количество сервисов)
- В HAProxy есть режим Sticky sessions. Он может ограничить количество соединений и это один из путей предоставления работы WebSockets на нескольких серверах. Когда вы его включаете пользователь всегда соединяется с одним и тем же сервером:

Обслуживание сервиса HAProxy. Логи
System (deploy) logs

Container logs



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