Балансування засобами 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
- Налаштувати пріоритет / значущість для конкретних серверів
Для запуску Docker-контейнерів у мене в даний момент виділено досить багато серверів, причому апаратна частина у деяких з них відрізняється один від одного. Відповідно, при налаштуванні на чудовому балансувальник HAProxy такого параметра балансування як.