У даній статті ми покажемо настройку планувальника HAProxy для двох серверів з встановленим веб-сервером Nginx (Можна замінити на Apache). В якості ОС в усіх випадках використовується CentOS.

HAProxy – серверне програмне забезпечення для забезпечення високої доступності та балансування навантаження для TCP і HTTP додатків, методом розподілу вхідних запитів на кілька серверів. HAProxy використовується на багатьох популярних ресурсах, включаючи Twitter, Instagram, Github, Avito, Амазонка та інші.

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

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

Налаштування Nginx на серверних серверах

Почнемо з установки і настройки Nginx на наших веб-серверах, між якими буде балансувати навантаження. Встановимо репозиторій EPEL і власне сам nginx за допомогою yum:

#yum install epel-release -y
#yum install nginx -y

Я виконував установку відразу на двох серверах, так як сервера налаштовуються один в один (для паралельного виконання команд на декількох серверах можна використовувати pdsh).

установка nginx

Далі в конфігураційних файлах nginx.конф вкажемо, що сервера повинні обробляти запити тільки з сервера HaProxy і backend-серверів:

1-ий backend-сервер:

server {
        listen      IP_текущего_сервера:80 default_server;
        allow IP_второго_backend_сервера;
        allow IP_haproxy;
        deny all;	
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }


2-ий backend-сервер:

server {
        listen       IP_текущего_сервера:80 default_server;
        allow IP_первого_backend_сервера;
        allow IP_haproxy;
        deny all;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }


Конфиг nginx стандартний, ми лише додали в слухати IP сервера і закрили доступ всім, крім наших серверів за допомогою директив дозволити і заперечувати.

Для роботи веб-сервера, потрібно відкрити з’єднання на фаєрвол через firewalld або iptables:

#firewall-cmd --permanent –add-service=http
#firewall-cmd –reload

Виконаємо тестову перевірку на будь-якому з backend-серверів:

[root@server ~]# curl IP_второго_сервера

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

тут вы должны получить html документ

Сервер віддав стандартний index файл nginx, значить між собою сервера взаємодіють.

Для зручності перевірки, я змінив вміст index файлу на кожному backend-сервері, щоб в процесі тестування чітко бачити в браузері який сервер обробив запит.

Index файл nginx розташований в / usr / share / nginx / html /.

Налаштування балансувальника навантаження HAProxy

Приступимо до встановлення та налаштування HAProxy на сервері, який буде використовуватися в якості балансувальника навантаження.

Встановимо HaProxy і виконаємо базові настройки для роботи балансувальника.

#yum install epel-release -y

#yum встановити haproxy -y

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

epel/x86_64/metalink

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Running transaction

Installing : haproxy-1.5.18-9.el7.x86_64 1/1

Verifying : haproxy-1.5.18-9.el7.x86_64 1/1

Installed:

haproxy.x86_64 0:1.5.18-9.el7

Complete!

Щоб включити HaProxy, потрібно додати Увімкнено = 1 в файл / etc / default / haproxy:

#nano /etc/default/haproxy

включити haproxy

Тепер перейдемо до самої налаштування HaProxy. В нашій найпростішої конфігурації сервер-балансувальник буде обробляти всі http запити і направляти їх по черзі на backend-сервера.

#nano /etc/haproxy/haproxy.cfg

log         /dev/log local0

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    mode                    http
    log                       global
    option                  httplog
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend  www
    bind IP_балансировщика:80
    default_backend nginx_pool

backend nginx_pool
    balance     roundrobin
    mode http
    server  web1 IP_первого_backend_сервера:80 check
    server  web2 IP_второго_backend_сервера:80 check

Після збереження конфігурації, обов’язково перевірте синтаксис командою:

#haproxy -f /etc/haproxy/haproxy.cfg -c

Якщо все в порядку, ви отримаєте подібний результат:

Configuration file is valid

Після цього потрібно перезапустити HaProxy і додати його автозагрузку CentOS. А також відкрити необхідні правила на фаєрвол.

#systemctl restart haproxy

#systemctl увімкнути haproxy

# firewall-cmd — permanent –add-service = http

# firewall-cmd –reload

На цьому настройка балансувальника закінчена, перевіримо результат, відкривши IP сервера з HaProxy в браузері:

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

Як видно, по черзі віддали контент обидва сервера, балансувальник працює.

Параметри конфігураційного файлу haproxy.cfg

Розглянемо основні приклади алгоритмів роботи HaProxy:

  • кругової – алгоритм буде використовуватися під, відправляє запити на сервера по черзі. У нашому прикладі ми використовували саме такий метод;
  • leastconn – вибирає сервер з найменшою кількістю активних сполук. Рекомендується застосовувати на проектах, в яких сесії можуть бути задіяні тривалий час;
  • джерело – вибирає сервер по хешу, побудованому на основі IP користувачів. У такому режимі роботи один і той же клієнт буде звертатися завжди до одного сервера, якщо його IP залишається незмінним;

Пройдемо по деяких параметрах в файлі конфігурації.

блок глобальний:

  • log – вести лог в / dev / log зберігаючи в «об’єкт» local0;
  • chroot – налаштування безпеки, «замикають» HAProxy у вказаній директорії;
  • maxconn – максимальна кількість конкуруючих з’єднань на один процес;
  • user – користувач, від імені якого буде запущена програма;
  • group – група користувача, від імені якого буде запущена програма;
  • daemon – запуск процесу як демона.

блок за замовчуванням. В даному блоці описуються параметри за замовчуванням для всіх інших секцій, які слідують за нею:

  • журнал – вказує, в якій лог вести записи (global в даному випадку означає, що будуть використовуватися установки, задані в секції global);
  • режимі – встановлює протокол взаємодії, приймає одне із значень: tcp, http або health;
  • повторні спроби – кількість спроб з’єднання з сервером у разі відмови;
  • варіант httplog – формат балки, в разі використання HAProxy для проксінг HTTP-запитів;
  • варіант редіспеч – дозволяє програмі розірвати і перепризначити сесію в разі відмови сервера;
  • contimeout – максимальний час очікування успішного з’єднання з сервером.

Також є велика кількість параметрів пов’язаних з різними timeout.

Збір статистики HAProxy

Додамо в конфігураційний файл блок stats:

listen stats
    bind :10001
    stats enable
    stats uri /haproxy_stats
    stats auth admin:admin

опис:

  • пов’язувати – порт по якому буде працювати перегляд статистики;
  • статистика увімкнути – включити звіти зі статистикою;
  • статистика ненависть – установка адреси сторінки зі статистикою;
  • статистика авт – логін і пароль для входу.

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

Також для роботи нашого haproxy_stats, потрібно відкрити вказаний раніше порт на фаєрвол:

firewall-cmd --permanent –add-port=10001/tcp

брандмауер-cmd –завантаження

Щоб подивитися звіти по роботі HAProxy, потрібно перейти за посиланням:

http://hostname_haproxy:10001/haproxy_stats

статистика haproxy Відкриваємо адреса балансувальника в браузері і починаємо спамити F5. Статистика за вказаним URL змінюється, утиліта працює.

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

haproxy + nginx + збережено

Є ще багато варіантів використання модуля HAProxy і ви завжди зможете знайти застосування його в своїй роботі.

Leave a Reply

Your email address will not be published. Required fields are marked *