HAProxy на VPS: балансировка нагрузки между серверами — иллюстрация к статье Storm Cloud Blog, категория DevOps
HAProxy на VPS: балансировка нагрузки между серверами — иллюстрация к статье Storm Cloud Blog, категория DevOps
DevOps·2 мин··

HAProxy на VPS: балансировка нагрузки между серверами

Настройка HAProxy на VPS: round-robin, health checks, SSL termination, sticky sessions. Когда нужен load balancer перед приложением.

Краткий ответ: HAProxy — load balancer перед несколькими backend-серверами. Один VPS с HAProxy распределяет трафик, проверяет health и терминирует SSL. Нужен при 2+ app-серверах.

Один Nginx справляется с reverse proxy. HAProxy — когда нужны продвинутые алгоритмы балансировки и health checks на уровне TCP/HTTP.


Когда нужен HAProxy

  • 2+ VPS с одинаковым приложением
  • Zero-downtime при падении одного backend
  • Sticky sessions для stateful apps
  • TCP балансировка (PostgreSQL read replicas)

Не нужен для одного VPS — достаточно Nginx или Traefik.


Установка

sudo apt install haproxy -y
# /etc/haproxy/haproxy.cfg
global
    maxconn 4096

defaults
    mode http
    timeout connect 5s
    timeout client 30s
    timeout server 30s
    option httplog

frontend web
    bind *:80
    bind *:443 ssl crt /etc/haproxy/certs/example.com.pem
    redirect scheme https if !{ ssl_fc }
    default_backend app_servers

backend app_servers
    balance roundrobin
    option httpchk GET /health
    server app1 10.0.0.2:8080 check
    server app2 10.0.0.3:8080 check
sudo systemctl restart haproxy

Связь между VPS — приватная сеть или Tailscale / WireGuard.


Health checks

option httpchk GET /health HTTP/1.1\r\nHost:\ example.com
http-check expect status 200

Приложение должно отдавать /health — как в Go или FastAPI деплое.


SSL termination

Объедините cert + key:

cat fullchain.pem privkey.pem > /etc/haproxy/certs/example.com.pem

Альтернатива — SSL на Cloudflare + HAProxy на HTTP внутри.


Sticky sessions

backend app_servers
    balance roundrobin
    cookie SERVERID insert indirect nocache
    server app1 10.0.0.2:8080 cookie s1 check
    server app2 10.0.0.3:8080 cookie s2 check

Мониторинг

listen stats
    bind 127.0.0.1:8404
    stats enable
    stats uri /stats

Метрики в Prometheus через haproxy_exporter.


HAProxy vs Nginx vs Traefik

HAProxy Nginx Traefik
Load balancing Лучший Хороший Средний
Static files Нет Отлично Нет
Docker discovery Нет Нет Да

Итог

HAProxy — стандарт для балансировки между несколькими VPS. Один LB VPS + 2+ app VPS = отказоустойчивость без Kubernetes.

Несколько VPS — StormNet Cloud. Оркестрация — k3s или Docker Swarm.

Частые вопросы

HAProxy или Nginx для балансировки?

HAProxy — специализированный load balancer с продвинутыми health checks. Nginx — универсальный reverse proxy, балансировка проще но менее гибкая.

Нужен ли HAProxy на одном VPS?

Нет. HAProxy имеет смысл при 2+ backend-серверах. На одном VPS достаточно Nginx или Caddy.