You are here

Бесплатный LoadBalancer HAProxy: установка, конфигурация

HAProxy - это TCP/HTTP Load Balancer. Программа написанная на C предназначенная для обеспечения высокой доступности и балансировки нагрузки для TCP и HTTP-приложений. Благодаря распределения входящих запросов на несколько обслуживающих серверов.

Бесплатный LoadBalancer HAProxy: установка, конфигурация

Данное решение перераспределяет запросы между сервером и его нодами, по средствам балансировки по определенным правилам, указанным в файле конфигурации haproxy.cfg.

Приступим к его установке на Debian:

  1. sudo apt-get install haproxy

После установки можем проверить версию:

  1. haproxy -v
  2. HA-Proxy version 1.8.19-1 2019/02/12
  3. Copyright 2000-2019 Willy Tarreau <willy@haproxy.org>

Проверяем статус:

  1. systemctl status haproxy
  2. ● haproxy.service - HAProxy Load Balancer
  3. Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
  4. Active: active (running) since Wed 2019-10-23 11:06:03 +05; 1min 2s ago
  5. Docs: man:haproxy(1)
  6. file:/usr/share/doc/haproxy/configuration.txt.gz
  7. Main PID: 1865 (haproxy)
  8. Tasks: 2 (limit: 2329)
  9. Memory: 1.8M
  10. CGroup: /system.slice/haproxy.service
  11. ├─1865 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
  12. └─1866 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
  13.  
  14. окт 23 11:06:03 debi systemd[1]: Starting HAProxy Load Balancer...
  15. окт 23 11:06:03 debi systemd[1]: Started HAProxy Load Balancer.

Для настройки конфигурации переходим в следующий каталог:

  1. cd /etc/haproxy/
  2. ls -la
  3. итого 24
  4. drwxr-xr-x 3 root root 4096 окт 23 11:05 .
  5. drwxr-xr-x 127 root root 12288 окт 23 11:06 ..
  6. drwxr-xr-x 2 root root 4096 окт 23 11:05 errors
  7. -rw-r--r-- 1 root root 1276 янв 3 2019 haproxy.cfg

Перед тем как начать заполнять файл конфигурации, отвлечемся к структуре, что мы хотим получить:

  • Главный сервер 192.168.0.10, где установлен HaProxy: будет перенаправлять на нужный нам IP:Port
  • Нода №1 и №2: подчиненный сервер с IP 192.168.0.30:80 и 192.168.0.40:80 (Пустые)
  • Нода №3: подчиненный сервер с IP 192.168.0.20:8080 + Jenkins на порту 8080

* У вас на портах могут висеть сервисы или страницы. Так как мы просто тестируем, у нас есть только Jenkins на одной из нод. Тем не менее, принцип работы мы сможем показать ниже.

Бесплатный LoadBalancer HAProxy: установка, конфигурация

Открываем для редактирования файл конфигурации:

  1. nano haproxy.cfg

Файл будет выглядеть следующим образом(сокращенный вариант):

  1. global
  2. log /dev/log local0
  3. log /dev/log local1 notice
  4. chroot /var/lib/haproxy
  5. ...
  6. errorfile 504 /etc/haproxy/errors/504.http

Заполняем файл, после основного текста (дополняем снизу)

  1. #---------------------------------------------------
  2. frontend my_http_front
  3. bind *:80
  4. default_backend my_httpd_back
  5.  
  6. frontend my_privat_front
  7. bind *:8080
  8. default_backend my_privat_back
  9.  
  10. backend my_httpd_back
  11. balance roundrobin
  12. server myweb_1 192.168.0.20:80
  13. server myweb_2 192.168.0.40:80
  14.  
  15. backend my_privat_back
  16. server privatweb_1 192.168.0.30:8080

Если мы хотим распределить перенаправление, дополняем weight:

  1. ...
  2. server myweb_1 192.168.0.20:80 weight 70
  3. server myweb_2 192.168.0.40:80 weight 30
  4. ...

Пояснение:

  • "frontend ... bind" - текущий сервер IP 192.168.0.10, принимает на эти порты
  • "default_backend my_httpd_back" - если запрос на порт 80, перенаправить на этот backend
  • "backend" - указываем список нод или серверов, на которые пересылаем
  • "balance roundrobin" - делать авто баланс между несколькими нодами в рамках этого backend. Если сервер один, можно не указывать эту строчку.

Разберем наш код

Главный сервер IP 192.168.0.10 на котором стоит HaProxy, будет смотреть на файл конфигурации. Там мы указали:

  • Если клиент заходит на адрес 192.168.0.10:80, то сервер его перенаправляет автоматический на два нода-сервера: 192.168.0.40:80 и 192.168.0.20:80.
  • Если клиент заходит на адрес: 192.168.0.10:8080, то его автоматический перенаправит на 192.168.0.30:8080, где стоит Jenkins.

Теперь рассмотрим подробнее. На сервере с HAProxy ничего нет, на портах 80 и 8080. Заходим на сервер по адресу: 192.168.0.10:80

Бесплатный LoadBalancer HAProxy: установка, конфигурация

Заходим на по адресу: 192.168.0.10:8080

Бесплатный LoadBalancer HAProxy: установка, конфигурация

Как мы видим, HaProxy производит перенаправление, при этом сам адрес остается прежним. Но физический клиент перенаправлен на подчиненный нода-сервер.

Основные команды:
Запуск:

  • systemctl status haproxy
  • systemctl stop haproxy
  • systemctl start haproxy

Удаление:

  • sudo apt-get purge --auto-remove haproxy
  • sudo apt-get remove --auto-remove haproxy

Всем спасибо за внимание!

Источник: http://linuxsql.ru