Как запустить балансировку HAProxy в Docker на AstraLinux
Установка Docker
Для начала установим Docker на AstraLinux:
sudo apt update sudo apt install docker.io sudo usermod -aG docker $USER
После этого перезапустите все терминальные сессии, чтобы изменения вступили в силу.
Подробнее об установке Docker можно прочитать в официальной документации AstraLinux.
Запуск HAProxy в Docker
Можно ли запускать HAProxy в Docker? Конечно! Docker сегодня используется повсеместно, и многие приложения, включая HAProxy, доступны в виде контейнеров.
Преимущества Docker
- Простота развертывания – не нужно компилировать HAProxy или устанавливать зависимости.
- Изоляция – сервис работает в контейнере, не затрагивая основную систему.
- Управление жизненным циклом – запуск, остановка и обновление происходят через стандартные команды Docker.
Производительность
Docker практически не нагружает CPU, так как контейнеры работают напрямую через ядро ОС. Однако сетевые задержки могут увеличиться из-за NAT (примерно до 70 мкс для небольших запросов). Если критична минимальная задержка, можно использовать сетевой режим host.
Безопасность
HAProxy внутри Docker запускается от root, но после инициализации переключается на непривилегированного пользователя. Рекомендуется использовать официальные образы от HAProxy Technologies, чтобы избежать рисков.
Практический пример: балансировка нагрузки
Создадим сеть Docker и три контейнера с тестовым веб-приложением:
sudo docker network create --driver=bridge mynetwork sudo docker run -d --name web1 --net mynetwork jmalloc/echo-server:latest sudo docker run -d --name web2 --net mynetwork jmalloc/echo-server:latest sudo docker run -d --name web3 --net mynetwork jmalloc/echo-server:latest
Проверим, что контейнеры запущены:
sudo docker ps
Настройка HAProxy
Создадим конфигурационный файл haproxy.cfg:
global stats socket /var/run/api.sock user haproxy group haproxy mode 660 level admin expose-fd listeners log stdout format raw local0 info defaults mode http timeout client 10s timeout connect 5s timeout server 10s timeout http-request 10s log global frontend stats bind *:8404 stats enable stats uri / stats refresh 10s frontend myfrontend bind :80 default_backend webservers backend webservers server s1 web1:8080 check server s2 web2:8080 check server s3 web3:8080 check
Запуск HAProxy
sudo docker run -d \ --name haproxy \ --net mynetwork \ -v $(pwd)/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro \ -p 80:80 \ -p 8404:8404 \ haproxytech/haproxy-alpine:latest
- Веб-приложение доступно на
http://localhost(запросы балансируются междуweb1,web2,web3). - Статистика HAProxy – на
http://localhost:8404.
Перезагрузка конфигурации без остановки
sudo docker kill -s HUP haproxy
Остановка и удаление
sudo docker stop web1 web2 web3 haproxy sudo docker rm web1 web2 web3 haproxy sudo docker network rm mynetwork
Заключение
Запуск HAProxy в Docker упрощает развертывание и управление балансировщиком нагрузки. Оригинал исходной статьи: https://www.haproxy.com/blog/how-to-run-haproxy-with-docker