Загрузка...

HAProxy – что это и зачем нужен?

HAProxy

🔥 HAProxy – что это и зачем?

HAProxy (High Availability Proxy) — это мощный, быстрый и надежный балансировщик нагрузки и прокси-сервер. Он часто используется для распределения трафика между серверами, улучшения доступности и масштабирования веб-приложений.

👉 Подходит для:
Балансировки нагрузки (например, между несколькими backend-серверами).
Реверс-прокси (перенаправление запросов от клиента к нужному сервису).
SSL-терминации (шифрование и дешифрование трафика).
Failover и высокая доступность (если один сервер падает, запросы перенаправляются на другой).


⚙️ 1. Как работает HAProxy?

HAProxy принимает запросы от пользователей и распределяет их между backend-серверами по заданным правилам.

🔹 Схема работы HAProxy

+-------------+       +-------------------+
|   Клиент    | --->  |     HAProxy       | --->  [Server 1]
|  (User)     |       |  (Load Balancer)  | --->  [Server 2]
+-------------+       +-------------------+

📌 Пример: если у нас есть 3 Laravel-сервера, HAProxy равномерно распределит нагрузку между ними.


🛠 2. Установка HAProxy (Linux/Docker)

🔹 На Ubuntu/Debian

sudo apt update && sudo apt install haproxy -y

🔹 Через Docker

docker run -d --name haproxy -p 80:80 -p 443:443 haproxy:latest

📄 3. Базовая конфигурация HAProxy

Файл конфигурации: /etc/haproxy/haproxy.cfg

🔹 Пример: балансировка нагрузки между тремя серверами

defaults
    log global
    timeout connect 5s
    timeout client  30s
    timeout server  30s

frontend http_front
    bind *:80
    default_backend web_servers

backend web_servers
    balance roundrobin
    server web1 192.168.1.10:80 check
    server web2 192.168.1.11:80 check
    server web3 192.168.1.12:80 check

📌 Что здесь происходит?

  1. frontend http_front → HAProxy слушает порт 80.
  2. backend web_servers → Запросы идут на 3 сервера (192.168.1.10, 192.168.1.11, 192.168.1.12).
  3. balance roundrobin → Запросы равномерно распределяются по серверам (Round Robin).

💡 Другие методы балансировки:

  • roundrobin – циклически (по кругу).
  • leastconn – отправляет запрос на сервер с наименьшей нагрузкой.
  • source – запросы от одного IP всегда идут на один и тот же сервер.

🔐 4. Настроим SSL-терминацию (HTTPS)

Можно настроить HAProxy, чтобы он принимал HTTPS-запросы и расшифровывал их, передавая на backend через HTTP.

📌 Пример HTTPS + балансировки нагрузки:

frontend https_front
    bind *:443 ssl crt /etc/haproxy/certs/mydomain.pem
    default_backend web_servers

backend web_servers
    balance leastconn
    server web1 192.168.1.10:80 check
    server web2 192.168.1.11:80 check

Что делает этот конфиг?
✅ HAProxy принимает HTTPS-запросы на 443 порту и расшифровывает их.
✅ Перенаправляет трафик на backend-серверы через HTTP.
Использует балансировку leastconn (сервер с наименьшей нагрузкой).

🔹 Где взять SSL-сертификат?
Можно использовать Let’s Encrypt:

sudo certbot certonly --standalone -d mydomain.com

Затем объединить файлы сертификата и ключа:

cat /etc/letsencrypt/live/mydomain.com/fullchain.pem /etc/letsencrypt/live/mydomain.com/privkey.pem > /etc/haproxy/certs/mydomain.pem

🔄 5. Запуск и перезапуск HAProxy

После изменений в haproxy.cfg нужно перезапустить HAProxy:

sudo systemctl restart haproxy

Проверить статус:

sudo systemctl status haproxy

🚀 6. Использование HAProxy в Docker Compose

Если у вас Laravel + Docker, можно добавить HAProxy в docker-compose.yml.

📌 Пример docker-compose.yml с HAProxy:

version: '3.8'

services:
    haproxy:
        image: haproxy:latest
        container_name: haproxy
        volumes:
            - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
        ports:
            - "80:80"
            - "443:443"
        depends_on:
            - app1
            - app2

    app1:
        image: laravel-app
        container_name: laravel1
        environment:
            APP_ENV: production

    app2:
        image: laravel-app
        container_name: laravel2
        environment:
            APP_ENV: production

Что здесь происходит?
✔ HAProxy принимает запросы на 80/443 портах.
✔ Балансирует трафик между app1 и app2 (двумя Laravel-контейнерами).


🎯 Вывод

HAProxy – мощный балансировщик нагрузки и реверс-прокси.
✅ Можно использовать с Laravel, Docker, Kubernetes.
✅ Поддерживает SSL, Sticky Sessions, Health Checks.
✅ Легко масштабирует приложение, улучшает доступность.

📌 Где применяют HAProxy?

  • Масштабирование Laravel-приложений.
  • Разгрузка серверов (нагрузка распределяется между разными инстансами).
  • API Gateway (прокси для API).
  • Резервирование серверов (если один упал, трафик идет на другие).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *