Що таке HAproxy і як він розподіляє трафік?

Автор: Опубліковано

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

Як HAProxy працює між користувачем і застосунком

Зворотний проксі-сервер, або reverse proxy, приймає з’єднання від імені серверів застосунку. Користувач підключається до адреси сервісу, за якою працює HAProxy, а не безпосередньо до конкретного внутрішнього сервера. HAProxy вибирає сервер призначення й передає йому трафік, а відповідь повертається через той самий проміжний шар.

Балансування навантаження, або load balancing, полягає в розподілі трафіку між доступними серверами. Це не обов’язково означає цілком рівномірний розподіл: потужніша машина може отримувати більше завдань, а сервер, на якому проводять технічні роботи, можна виключити з обслуговування нових запитів.

У конфігурації HAProxy є два важливі поняття. Frontend визначає, де програма приймає з’єднання, наприклад на порту 443 для HTTPS. Backend описує групу серверів призначення та правила їх вибору. Один frontend може спрямовувати трафік до різних backend залежно від домену або шляху в адресі.

Підтримка TCP, HTTP і шифрування

HAProxy може працювати на різних рівнях обміну даними. У режимі TCP він передає з’єднання, не ухвалюючи рішень на основі вмісту запитів HTTP. Такий підхід корисний і для сервісів, не пов’язаних із вебсайтами, якщо вони використовують TCP.

У режимі HTTP HAProxy розпізнає елементи запиту, зокрема ім’я хоста, шлях і заголовки. Тому він може спрямовувати трафік для /api до серверів API, а решту запитів — до застосунку, який формує вебсторінку. Ці правила часто записують як ACL — умови, за якими трафік зіставляють із певними правилами.

Для HTTPS важливо, де завершується TLS — протокол, який захищає з’єднання:

Завершення TLS у HAProxy не означає, що з’єднання із застосунком автоматично шифрується. Цю ділянку потрібно налаштувати окремо, передбачивши також перевірку сертифіката сервера призначення.

Як розподіл трафіку допомагає під час збоїв

Уявіть інтернет-магазин, що працює на трьох серверах застосунку. HAProxy приймає запити клієнтів і розподіляє їх методом round robin, тобто по черзі між доступними серверами. Альтернативою є, наприклад, least connections — метод, що віддає перевагу серверу з меншою кількістю активних з’єднань. Вибір методу залежить від характеру трафіку.

HAProxy може виконувати health checks — періодичні перевірки доступності внутрішніх серверів. Коли один із серверів перестає проходити перевірки, програма може припинити спрямовувати до нього новий трафік, залишивши обслуговування іншим машинам. Проте активні з’єднання з несправним сервером можуть перерватися.

Сама перевірка відкритого порту не підтверджує, що магазин здатен обробити замовлення. Точнішою може бути перевірка через HTTP спеціальної контрольної точки застосунку, яка сигналізує про його готовність. Обсяг перевірки потрібно визначати обережно: надто поверхова перевірка не виявить збою, а надто сувора може без потреби виключити з обслуговування справні екземпляри.

Розподіл трафіку також потребує відповідної архітектури застосунку. Якщо кошик клієнта зберігається лише в пам’яті одного сервера, наступний запит, надісланий до іншої машини, може не відновити його. Допомагає спільне сховище сесій; прив’язування клієнта до сервера, яке називають sticky sessions, не захищає дані сесії від збою цієї машини.

Чим HAProxy відрізняється від вебсервера

Основне завдання HAProxy — бути посередником в обміні даними й керувати трафіком, а не виконувати типові завдання вебсервера: віддавати файли сайту чи запускати код застосунку. На практиці він працює перед вебсерверами або процесами застосунку, які формують відповіді. Він також не замінює базу даних або механізм її реплікації.

NGINX і Apache HTTP Server також можуть працювати як reverse proxy й водночас виконувати роль вебсервера. Тому вибір не зводиться до питання, який інструмент загалом кращий. HAProxy варто розглянути, коли потрібен окремий шар для балансування трафіку TCP або HTTP, перевірки стану внутрішніх серверів і застосування правил спрямування з’єднань.

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

Що перевірити перед впровадженням

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

Перед запуском у робочому середовищі перевірте чотири речі:

  1. Перевірки внутрішніх серверів: чи виявляють вони неготовність застосунку, а не лише доступність порту?
  2. Ліміти й тайм-аути: скільки з’єднань прийме система і як довго чекатиме на відповідь?
  3. Адреса клієнта: як застосунок отримає справжню IP-адресу і яким заголовкам проксі може довіряти?
  4. Спостережуваність: чи дають журнали й метрики змогу виявляти помилки, затримки та перевантаження?

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

Дивіться також: Що таке 2FA?

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

Дізнайтеся, як PHP-FPM обробляє запити PHP, чим відрізняється від вебсервера та як налаштувати процеси під трафік і ресурси хостингу.
Дізнайтеся, як BIND обслуговує DNS, чим відрізняються його серверні ролі та коли варто розгортати його самостійно замість керованої послуги.
Дізнайтеся, що означають польський реєстр і номер REGON, чим вони відрізняються від NIP та KRS і як перевірити дані підприємства.