Для чего используется HAProxy?

«Для чего используется HAProxy?» — вопрос из категории Веб-серверы и балансировка, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Балансировка нагрузки (Load Balancing): Распределение входящего трафика между несколькими бэкенд-серверами (например, между экземплярами веб-приложения). Это повышает доступность и отказоустойчивость. Я чаще всего применял алгоритмы roundrobin и leastconn.
  2. Терминирование SSL/TLS: Приём HTTPS-трафика, расшифровка на уровне HAProxy и передача чистого HTTP на бэкенд-серверы. Это снимает с них нагрузку по шифрованию и позволяет централизованно управлять сертификатами.
  3. Маршрутизация на уровне приложения (L7): Направление запросов на разные группы серверов в зависимости от пути URL (/api/, /static/), доменного имени или заголовков HTTP.
  4. Обеспечение отказоустойчивости: Регулярные health checks (check в конфигурации) для автоматического исключения неработающих серверов из ротации и возврата их при восстановлении.
  5. Ограничение скорости (Rate Limiting) и защита от DDoS: Настройка лимитов на количество соединений с одного IP-адреса.

Пример базовой конфигурации для балансировки HTTP:

frontend web_frontend
    bind *:80
    mode http
    default_backend web_servers

backend web_servers
    mode http
    balance roundrobin
    option httpchk GET /health
    server web1 10.0.1.10:80 check maxconn 100
    server web2 10.0.1.11:80 check maxconn 100

В продакшене я обычно разворачиваю HAProxy в паре (активный-пассивный) с использованием keepalived для обеспечения высокой доступности самого балансировщика.