Балансування засобами haproxy

HAProxy (High Availability Proxy) являє собою балансувальник навантаження з відкритим вихідним кодом для розподілу навантаження в будь-якій службі TCP. HAProxy є безкоштовним, швидким і надійним рішенням для розподілу навантаження, високої доступності та проксінг для додатків TCP і HTTP. HAProxy особливо підходить для популярних сайтів з великою відвідуваністю.

установка HAProxy

Установка проводиться таким чином:

Також можна перевірити версію:

Для перевірки, виконаємо скрипт init без будь-яких параметрів. Результат повинен бути наступний:

Коли HAProxy встановлений, створимо установку, в якій є 3 зразка веб-сервера: 2 Apache і 1 HAProxy. Інформація про встановлення представлена ​​нижче:

Будемо використовувати три системи, створених через VirtualBox:

Перейдемо до налаштування HAProxy.

Налаштування HAProxy

Створимо резервну копію оригінального файлу, для цього перейменуємо його:

пояснення:

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

Директиви user і group змінюють процес HAProxy для користувача / групи. Ці значення змінювати не слід.

Верхній розділ має значення за замовчуванням. Можливість досилання дозволяє перерозподілити сесію, в разі збоїв зв'язку. Отже, прив'язка до сесії скасовується, якщо веб-сервер виходить з ладу.

Директива спроб (retries) визначає кількість спроб для виконання на сервері після скидання налаштувань.

Директиви тайм-ауту повинні бути змінені. Contimeout визначає максимальний час очікування успішного з'єднання з веб-сервером.

Сlitimeout і srvtimeout застосовуються, коли очікується, що клієнт або сервер отримують, або передають дані під час процесу TCP. HAProxy рекомендує встановлювати одне і теж значення для тайм-ауту клієнта і сервера.

Верхній блок містить настройки для клієнтської і внутрішньої частини системи. Налаштуємо HAProxy на порт 80 для webfarm, який представляє собою ім'я для ідентифікації додатка.

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

  • Round Robin (roundrobin)
  • Статичний Round Robin (static-rr)
  • Найменш використовувані з'єднання (leastconn)
  • Джерело (source)
  • URI (uri)
  • Параметр URL (url_param).

Директива server оголошує внутрішній сервер, синтаксис:

Згадані назви з'являться в журналах подій і попередженнях. Існує ще кілька параметрів, які підтримуються цією директивою і надалі буде використовуватися параметр перевірки (check), при якому відбувається перевірка сервера, інакше сервер буде завжди доступний.

Після завершення налаштування запустимо службу HAProxy:

Тестування балансування навантаження і подолання відмови

Додамо ім'я сервера в стандартні index.html файли, розташовані в /var/www/index.html

У зразку 2 - Веб-сервер 1 (webserver01 з IP- 192.168.205.16), додамо наступне:

У зразку 3 - Веб-сервер 2 (webserver02 з IP- 192.168.205.17), додамо наступне:

Кожен раз при оновленні вкладки навантаження буде розподіляться між веб-серверами.

Також можна зробити наступне:

  • Запустити один або обидва сервера в автономному режимі, щоб перевірити, що буде, коли Ви отримуєте доступ до HAProxy
  • Налаштувати HAProxy для використання в якості користувальницької сторінки підтримки
  • Налаштувати веб-інтерфейс для візуального контролю статистики HAProxy
  • Змінити планувальник на щось інше, ніж round-robin
  • Налаштувати пріоритет / значущість для конкретних серверів
  • Балансування засобами haproxy

Для запуску Docker-контейнерів у мене в даний момент виділено досить багато серверів, причому апаратна частина у деяких з них відрізняється один від одного. Відповідно, при налаштуванні на чудовому балансувальник HAProxy такого параметра балансування як.

Схожі статті