Перейти до вмісту
Proxy Types 6 хв читання 797 переглядів

HAProxy

Дослідіть можливості HAProxy для потужного балансування навантаження та проксіювання. Навчіться ефективно розподіляти трафік, моніторити стан серверів та підвищувати надійність додатків.

HAProxy

HAProxy (High Availability Proxy) – це відкритий, високопродуктивний балансувальник навантаження TCP/HTTP та проксі-сервер, який розподіляє мережевий трафік між кількома бекенд-серверами для максимізації продуктивності, надійності та ємності сервера. Він працює як на рівні 4 (TCP), так і на рівні 7 (HTTP) моделі OSI, забезпечуючи точне управління трафіком, високу доступність та ефективне використання ресурсів для додатків та сервісів.

HAProxy відомий своєю швидкістю, стабільністю та здатністю обробляти дуже великі обсяги трафіку. Його зазвичай розгортають перед веб-серверами, серверами додатків та кластерами баз даних, щоб забезпечити рівномірний розподіл запитів клієнтів, запобігти перевантаженню серверів та полегшити безперебійні операції з обслуговування.

Балансування навантаження за допомогою HAProxy

Балансування навантаження – це процес розподілу мережевого трафіку між групою бекенд-серверів, відомих як серверна ферма або кластер. HAProxy використовує різні алгоритми для визначення того, який сервер отримає наступний запит, з метою оптимізації використання ресурсів, максимізації пропускної здатності, мінімізації часу відгуку та уникнення перевантаження окремих серверів.

Ключові аспекти балансування навантаження за допомогою HAProxy включають:

  • Вибір алгоритму: HAProxy пропонує кілька алгоритмів для різних потреб додатків.
  • Перевірки стану сервера: Безперервний моніторинг доступності та чутливості бекенд-серверів.
  • Вагове значення сервера: Пріоритизація певних серверів для отримання більшого трафіку.

Алгоритми балансування навантаження

HAProxy надає ряд алгоритмів, що конфігуруються в секції backend:

  • roundrobin: Розподіляє запити послідовно до кожного сервера в групі бекендів. Алгоритм за замовчуванням.
  • leastconn: Направляє нові з'єднання до сервера з найменшою кількістю активних з'єднань. Оптимально для довгоживучих з'єднань.
  • source: Використовує хеш IP-адреси джерела для визначення сервера. Забезпечує послідовне підключення клієнта до одного й того ж сервера, корисно для додатків зі збереженням стану без явного збереження сесії.
  • uri: Хешує ліву частину URL (до рядка запиту) для вибору сервера. Корисно для кешуючих проксі.
  • hdr(<name>): Хешує значення вказаного HTTP-заголовка.
  • random: Випадковим чином вибирає сервер.
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

Проксіювання за допомогою HAProxy

Проксіювання передбачає використання проміжного сервера, який діє від імені клієнта або сервера. HAProxy функціонує як зворотний проксі, приймаючи з'єднання від клієнтів і пересилаючи їх до бекенд-серверів, а потім повертаючи відповіді серверів клієнтам. Цей рівень абстракції забезпечує безпеку, продуктивність та операційні переваги.

Проксіювання рівня 4 (TCP)

На рівні 4 HAProxy пересилає необроблені TCP-з'єднання без перевірки вмісту на рівні програми. Це підходить для не-HTTP сервісів, баз даних або користувацьких протоколів, де перевірка вмісту не потрібна або небажана.

listen mysql_cluster
    bind *:3306
    mode tcp
    balance leastconn
    server db1 192.168.1.20:3306 check
    server db2 192.168.1.21:3306 check

Проксіювання рівня 7 (HTTP)

На рівні 7 HAProxy може перевіряти та маніпулювати заголовками HTTP-запитів та відповідей, URL-адресами та файлами cookie. Це дозволяє використовувати розширені функції, такі як маршрутизація на основі вмісту, термінація SSL, переписування URL-адрес та збереження сесії.

frontend http_frontend
    bind *:80
    mode http
    default_backend web_servers

Компоненти конфігурації HAProxy

Конфігурація HAProxy зазвичай знаходиться в /etc/haproxy/haproxy.cfg і структурована на кілька секцій.

Секція global

Секція global визначає параметри для всього процесу, такі як логування, налаштування безпеки та обмеження продуктивності. Ці налаштування застосовуються до всього екземпляра HAProxy.

global
    log /dev/log    local0 info
    maxconn 20000
    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    user haproxy
    group haproxy
    daemon
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners

Секція defaults

Секція defaults визначає параметри за замовчуванням для всіх секцій listen, frontend та backend, що йдуть за нею. Це зменшує надмірність конфігурації.

defaults
    mode http
    log global
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
    option httplog
    option dontlognull
    option http-server-close

Секція frontend

frontend визначає публічну точку входу, де HAProxy прослуховує клієнтські з'єднання. Вона вказує IP-адресу, порт, протокол (mode) та правила маршрутизації запитів до конкретних бекендів за допомогою списків контролю доступу (ACL).

frontend http_in
    bind *:80
    mode http
    acl host_app1 hdr(host) -i app1.example.com
    acl host_app2 hdr(host) -i app2.example.com

    use_backend app1_servers if host_app1
    use_backend app2_servers if host_app2
    default_backend default_web_servers

Секція backend

backend визначає групу серверів, до яких HAProxy може пересилати запити. Вона включає алгоритм балансування навантаження, параметри перевірки стану та визначення окремих серверів.

backend app1_servers
    balance leastconn
    option httpchk GET /healthz
    server s1 10.0.0.10:8080 check inter 2000 fall 3 rise 2
    server s2 10.0.0.11:8080 check inter 2000 fall 3 rise 2 backup
  • check: Вмикає перевірки стану для сервера.
  • inter 2000: Перевіряє кожні 2000 мс.
  • fall 3: Позначає сервер як непрацюючий після 3 послідовних невдалих перевірок.
  • rise 2: Позначає сервер як працюючий після 2 послідовних успішних перевірок.
  • backup: Сервер буде використовуватися лише тоді, коли всі інші не-резервні сервери не працюють.

Секція listen

Секція listen поєднує функціональність frontend та backend в одному блоці. Це часто використовується для простіших конфігурацій або для сервісів, таких як сторінка статистики HAProxy.

listen stats_page
    bind *:8080
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm HAProxy\ Statistics
    stats auth admin:securepassword
    stats refresh 5s

Списки контролю доступу (ACL)

ACL – це потужні умовні правила, що використовуються для відповідності певним критеріям у клієнтських запитах (наприклад, IP-адреса джерела, заголовок хоста, шлях URL, метод HTTP). Вони дозволяють динамічну маршрутизацію, перемикання вмісту та блокування.

frontend website_frontend
    bind *:443 ssl crt /etc/haproxy/certs/mydomain.pem

    # ACLs based on path
    acl is_admin_area path_beg /admin
    acl is_api_v1   path_beg /api/v1

    # Route based on ACLs
    use_backend admin_backend if is_admin_area
    use_backend api_v1_backend if is_api_v1
    default_backend main_website_backend

Перевірки стану (Health Checks)

HAProxy постійно моніторить стан бекенд-серверів, щоб гарантувати, що запити надсилаються лише до працюючих екземплярів. Якщо сервер не проходить перевірки стану, HAProxy тимчасово видаляє його з ротації, доки він не відновиться.

  • TCP Check (check): Базова перевірка підключення до порту.
  • HTTP Check (option httpchk): Надсилає HTTP-запит (наприклад, GET /health) і очікує дійсний HTTP-статус-код (2xx або 3xx).
  • SSL Hello Check (ssl-hello-chk): Перевіряє, чи може бути встановлено SSL-рукостискання.

Розширені функції HAProxy

Термінація та розвантаження SSL

HAProxy може обробляти шифрування та дешифрування SSL/TLS, розвантажуючи це інтенсивне для процесора завдання з бекенд-серверів. Він дешифрує вхідний HTTPS-трафік і пересилає звичайний HTTP до бекенду, або може повторно шифрувати для наскрізного SSL.

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

"Липкі" сесії (Persistence)

"Липкі" сесії гарантують, що запити клієнта послідовно маршрутизуються до одного й того ж бекенд-сервера протягом усієї його сесії. Це критично важливо для додатків, які підтримують стан сесії на окремих серверах.

  • Стійкість на основі файлів cookie: HAProxy вставляє файл cookie в браузер клієнта, який потім використовується для ідентифікації правильного бекенд-сервера для наступних запитів.
  • Стійкість на основі IP-адреси джерела: Використовує IP-адресу джерела клієнта для послідовної маршрутизації до того ж сервера (менш надійно за NAT).
backend web_servers_sticky
    balance roundrobin
    cookie SERVERID insert indirect nocache
    server s1 10.0.0.10:80 check cookie s1
    server s2 10.0.0.11:80 check cookie s2

Маршрутизація на основі вмісту

Маршрутизація на основі вмісту направляє трафік до різних пулів бекенд-серверів на основі конкретних атрибутів у запиті клієнта, таких як запитуваний шлях URL, заголовок HTTP-хоста або користувацькі HTTP-заголовки. Це полегшує архітектури мікросервісів або багатокористувацькі додатки.

(Приклад вже показано в секції frontend з acl host_app1 та use_backend).

Висока доступність самого HAProxy

Хоча HAProxy розроблений для високої доступності бекенд-сервісів, самі екземпляри HAProxy можуть бути зроблені високодоступними за допомогою зовнішніх механізмів, таких як VRRP (Virtual Router Redundancy Protocol) з такими інструментами, як Keepalived. Це створює плаваючу IP-адресу, яка автоматично перемикається між основним та вторинним серверами HAProxy у разі збою, забезпечуючи безперервну роботу служби балансування навантаження.

HAProxy проти Nginx (Коротке порівняння)

І HAProxy, і Nginx можуть функціонувати як зворотні проксі та балансувальники навантаження. Їхні основні цілі проектування та типові схеми розгортання відрізняються.

Функція HAProxy Nginx
Основна роль Спеціалізований, високопродуктивний балансувальник навантаження та проксі Веб-сервер, зворотний проксі, балансувальник навантаження, кеш
Продуктивність Надзвичайно висока (особливо L4/TCP) Висока (хороший універсал)
Конфігурація Створений спеціально для балансування навантаження, широкі можливості Більш загального призначення, гнучкий
Кешування Обмежене (потребує зовнішніх модулів) Вбудоване, потужне HTTP-кешування
Обслуговування статичних файлів Не є його основним фокусом Відмінне, високооптимізоване
Модульність Відносно монолітний Високомодульний з багатою екосистемою модулів
Термінація SSL Так Так
WebSockets Так Так

HAProxy часто обирають для критичних середовищ з високим трафіком, де першочергове значення мають чиста продуктивність балансування навантаження та надійні перевірки стану. Nginx часто використовується, коли потрібна комбінація веб-обслуговування, кешування та зворотного проксіювання, поряд з балансуванням навантаження. Часто їх розгортають разом, при цьому HAProxy виступає як основний балансувальник навантаження, а Nginx обробляє специфічне проксіювання на рівні додатків або статичний контент.

Оновлено: 03.03.2026
Назад до категорії

Читайте також

Proxy Types 3 хв

Xray та Sing-box – Сучасні проксі-ядра

Xray та Sing-box є універсальними проксі-платформами нового покоління. Підтримка VLESS, VMess, Trojan, Shadowsocks та багатопротокольної маршрутизації.

Proxy Types 3 хв

VLESS та VMess Проксі-протоколи

VLESS та VMess — це сучасні проксі-протоколи від V2Ray. Обхід DPI, шифрування, обфускація трафіку та порівняння з SOCKS5 і Shadowsocks.

Proxy Types 3 хв

I2P проксі

I2P (Проєкт Невидимого Інтернету) — прихована мережа для анонімного спілкування. Відмінності від Tor, часникова маршрутизація та використання як проксі.

Proxy Types 3 хв

Вихідні вузли Tor як проксі

Використання вихідних вузлів Tor як проксі: як працює мережа Tor, переваги анонімності, обмеження швидкості та правові аспекти.

Proxy Types 3 хв

Хмарні функції як проксі (AWS Lambda, Cloudflare Workers)

Використання хмарних функцій (AWS Lambda, Cloudflare Workers, Google Cloud Functions) як проксі-серверів. Динамічні IP-адреси, масштабованість та обмеження.

Proxy Types 3 хв

Децентралізовані проксі (dVPN)

Децентралізовані проксі та dVPN: блокчейн-мережі для анонімного доступу, токеноміка, приклади проектів та порівняння з традиційними проксі.

Спробуйте наші проксі

20,000+ проксі в 100+ країнах світу

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.