Меню

Haproxy настройка алгоритма балансировки

Балансировка нагрузки с помощью HAProxy

Пример горизонтального масштабирования для распределения запросов между несколькими серверами для повышения отказоустойчивости.

Рассмотрим решение по балансировке нескольких веб-серверов при помощи сервиса HAProxy.

Технические требования

В примере будет использоваться дистрибутив Linux CentOS 7.

Установка и настройка backend-серверов

В качестве backend-серверов я буду использовать несколько веб-серверов с NGINX и настроенным SSL.

Прежде всего установим NGINX

Выполним настройку веб-сервера

Для того, чтобы принимать реальные IP-адреса клиентов на веб-сервере от HAProxy необходимо добавить proxy_protocol в параметр listen, а также указать реальный адрес откуда разрешить принимать запросы:

Создадим приветственную страницу на обоих веб-серверах touch /srv/www/devservers.network/public_html со следующим содержимым, изменив только номер сервера для его дальнейшего определения:

Добавляем NGINX в автозагрузку и запускаем сервис.

И не забываем выполнить настройку Firewalld

Установка и настройка балансировщика

В качестве сервера балансировки я буду использовать VDS сервер с ресурсами 1 vCPU и 1Gb RAM. При правильной настройке, данных мощностей хватит для обслуживания 10-15к одновременных сессий, чего вполне достаточно для среднестатистического интернет-ресурса.

Установим HAProxy

Пакет HAProxy доступен в базовой репозитории CentOS.

Настройка HAProxy

Секция global

Рассмотрим настройки в директиве global :

Секция defaults

В секции defaults описываются параметры по умолчанию для всех других секций, следующих за данной. В файле конфигурации может быть несколько секций defaults, в этом случае параметры, описанные в данной секции, будут переопределены в следующей, и будут применяться к секциям, идущим за ней.

В нашем примере указаны следующие параметры:

Секция frontend

Укажем HAProxy какие запросы он должен обрабатывать, для этого задаем секцию frontend с именем https-in :

Секция backend

В этой секции мы задаем алгоритм балансировки (параметр balance) и список серверов-обработчиков (server). В качестве алгоритма балансировки указываем roundrobin.

HAProxy имеет несколько алгоритмов балансировки:

Просмотр статистики HAProxy

Для включения расширенной статистики HAProxy необходимо в конфигурационный файл добавить секцию:

Проверяем.

Проверяем статистику. Переходим по адресу SITE_NAME:10001/haproxy_stats

На этом всё. Выше рассмотрен самый простой метод балансировки. Более сложная настройка требует грамотно составленного ТЗ и технических данных проекта. HAProxy очень удобный и гибкий в настройке инструмент с помощью которого можно выполнить балансировку и других сервисов, к примеру почтовый сервер, Memcached, Redis и пр.

Источник

HAProxy: балансировки нагрузки между веб-серверами Nginx

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

HAProxy – серверное программное обеспечение для обеспечения высокой доступности и балансировки нагрузки для TCP и HTTP приложений, методом распределения входящих запросов на несколько серверов. HAProxy используется на многих популярных ресурсах, включая Twitter, Instagram, Github, Avito, Amazon и другие.

Читайте также:  Nfs hot pursuit настройка руля

HAProxy устанавливается на отдельный сервер, который принимает клиентские запросы и перенаправлять их на веб-сервера Nginx. Ниже представлена общая архитектура системы.

Настройка Nginx на backend-серверах

Начнем с установки и настройки Nginx на наших веб-серверах, между которыми будет балансировать нагрузка. Установим репозиторий EPEL и собственно сам nginx с помощью yum:

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

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

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

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

Конфиг nginx стандартный, мы лишь добавили в listen IP сервера и закрыли доступ всем, кроме наших серверов с помощью директив allow и deny.

Для работы веб-сервера, нужно открыть соединения на файерволле через firewalld или iptables:

Выполним тестовую проверку на любом из backend-серверов:

]# curl IP_второго_сервера

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

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

Index файл nginx расположен в /usr/share/nginx/html/.

Настройка балансировщика нагрузки HAProxy

Приступим к установке и настройке HAProxy на сервере, который будет использоваться в качестве балансировщика нагрузки.

Установим HaProxy и выполним базовые настройки для работы балансировщика.

Чтобы включить HaProxy, нужно добавить Enabled=1 в файл /etc/default/haproxy:

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

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

Если все в порядке, вы получите подобный результат:

После этого нужно перезапустить HaProxy и добавить его автозагрузку CentOS. А также открыть необходимые правила на файерволле.

#systemctl restart haproxy

#systemctl enable haproxy

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

На этом настройка балансировщика закончена, проверим результат, открыв IP сервера с HaProxy в браузере:

Как видно, по очереди отдали контент оба сервера, балансировщик работает.

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

Рассмотрим основные примеры алгоритмов работы HaProxy:

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

Блок global:

Блок default. В данном блоке описываются параметры по умолчанию для всех других секций, которые следуют за ней:

Также есть большое количество параметров связанных с различными timeout.

Сбор статистики HAProxy

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

Также для работы нашего haproxy_stats, нужно открыть указанный ранее порт на файерволле:

Чтобы посмотреть отчеты по работе HAProxy, нужно перейти по ссылке:

Читайте также:  Cisco 2960 настройка времени

Открываем адрес балансировщика в браузере и начинаем спамить F5. Статистика по указанной ссылке меняется, утилита работает.

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

Есть еще много вариантов использования модуля HAProxy и вы всегда сможете найти применение его в своей работе.

Источник

Haproxy настройка алгоритма балансировки

Терминология HAProxy

Существует ряд основополагающих терминов и положений, в которых стоит четко разбираться при обсуждении распределения нагрузки и прокси серверов. Но прежде, чем начать разбираться в новых терминах, стоит поговорить о том, что такое ACL, backend и frontend.

Список контроля доступа (ACL)

Когда мы разговариваем о распределении нагрузки, ACL применяется для проверки установленных правил распределения и для запуска некоторого действия (например, выбор сервера или блокировка сетевого запроса) в зависимости от применимости правила.

Использование ACL позволяет гибко управлять трафиком, перенаправляя его в зависимости от большего количества факторов, среди которых есть соответствие паттерну или ограничение количества соединений с бекэндом и др.

Для более подробного описания использования ACL обращайтесь к инструкции по настройке HAProxy.

Backend

Бекэнд может включать в себя как один, так и несколько серверов. Другими словами, добавляя больше серверов вы увеличиваете максимально возможную нагрузку, распределяя её по всем серверам. Так же, таким образом, повышается отказоустойчивость в случае, если отказал один из серверов.

Приведем пример настройки двух бекэндов, web-backend и blog-backend обрабатывающих запросы? поступающие на 80 порт:

Строка balance roundrobin указывает на алгоритм балансировки, который описан в секции Алгоритмы распределения нагрузки ниже.

Mode http указывает на то, что будет использован 7 слой прокси, который также описан в Типы распределения нагрузки.

Параметр check означает, что эти серверы должны проверяться на работоспособность.

Frontend

Фронтэнд определяет каким образом запросы должны быть перенаправлены на бекэнд. Они указываются в разделе frontend настройки HAProxy. Их определение состоит из следующих частей:

Фронтэнды можно указывать различные для разного сетевого трафика, что мы обсудим позднее.

Типы распределения нагрузки

Итак, мы разобрались с основными терминами, давайте перейдем к типам распределения нагрузки.

Отсутствие нагрузки

Самое простое web-приложение без распределения нагрузки обычно выглядит следующим образом:

В этом примере пользователь напрямую подключается в серверу по адресу yourdomain.com без какой-либо балансировки. Если по каким-то причинам сервер не ответит, то пользователь не сможет получить доступ к вашим ресурсам. Так же если очень большое число пользователей обратилось к вашему серверу, то многие из них получат ответ с большой временной задержкой, а некоторые так и не дождутся его.

Читайте также:  Как открыть настройки игры не заходя в нее

Распределение нагрузки 4 уровня

Приведем диаграмму простого примера применения балансировки 4 уровня:

Пользователь обращается к балансировщику, который в свою очередь перенаправляет запрос на группу web-backend бекэнд серверов. Соответствующий бекэнд сервер отвечает пользователю. В идеале, все сервера должны выдавать идентичный контент, иначе пользователь может получит неожиданные результаты. В общем случае, все сервера должны быть подключены к одной базе данных.

Распределение нагрузки 7 уровня

Приведем диаграмму простого примера применения балансировки 7 уровня:

Пример настройки фронтэнда обычно выглядит следующим образом:

use_backend blog-backend if url_blog перенаправляет трафик в соотетствии с правилами ACL.

Алгоритмы распределения нагрузки

Алгоритм распределения нагрузки отвечает за выбор сервера для обработки запроса пользователя. HAProxy предлагает нам несколько алгоритмов. В дополнение к алгоритму, мы можем указать вес каждого сервера, в соответствии с которым он будет выбран чаще или реже.

Мы рассмотрим только часто используемые алгоритмы, хотя HAProxy предлагает их намного больше. В инструкции по настройке HAProxy вы сможете ознакомится с ними более подробно.

Приведем основные алгоритмы:

roundrobin

Алгоритм, применяемый по умолчанию. Перебирает сервера по очереди.

leastconn

Выбирает сервер с наименьшим числом активных соединений. Рекомендуется к использованию для длинных сессий. Сервера в одном бекэнде варьируются циклически.

source

Выбирает сервер исходя из хеша, построенного на основе IP пользователя. Таким образом, пользователь всегда обращается к одному и тому же серверу.

Продолжительные сессии

Иногда приложению требуется, чтобы пользователь был подсоединен к одному и тому же серверу. Это может быть достигнуто путем применения параметра appsession для необходимого бекэнда.

Проверка работоспособности

HAProxy применяет проверку работоспособности сервера, чтобы определить способен ли он обработать запрос. Так нам не приходится вручную исключать сервер из настройки бекэнда. По умолчанию HAProxy пытается установить TCP соединение с сервером и проверяет производит ли тот обработку данных поступающих на 80 порт.

Если сервер не проходит проверку, то он автоматически исключается из бекэнда и трафик на него не перенаправляется до тех пор, пока сервер снова не станет доступен. Если же падают все сервера, то приложение становится недоступно пока не возобновит свою работы хотя бы один сервер.

Для некоторых же видов серверов, как, например, сервера баз данных, такой проверки недостаточно.

Другие решения

Если HAProxy показался вам слишком сложным для решения ваших проблем, попробуйте рассмотреть следующие варианты:

Заключение

Итак, вы познакомились с основами распределения нагрузки и имеете представление каким образом HAProxy способен вам помочь. Теперь вы можете смело начать импровизировать для достижения лучших результатов работы вашего сервера.

Источник