С момента появления, HAProxy стал распространённым балансировщиком нагрузки с открытым исходным кодом, несмотря на отсутствие рекламы.
Установка HAProxy
Установка производится следующим образом:
apt-get install haproxy
Также можно проверить версию:
haproxy -v
В скрипте init по адресу /etc/default/haproxy присвоим значению ENABLED 1:
ENABLED=1
Для проверки, выполним скрипт init без каких-либо параметров. Результат должен быть следующий:
$ service haproxy
reload restart start status stop
Когда HAProxy установлен, создадим установку, в которой есть 3 образца веб-сервера: 2 Apache и 1 HAProxy. Информация об установке представлена ниже:
Будем использовать три системы, созданных через VirtualBox:
Образец 1 – Балансировщик нагрузки
Имя хоста: haproxy
OС: Ubuntu
IP: 192.168.205.15
Образец 2 – Веб-сервер 1
Имя хоста: webser01
OС: Ubuntu с LAMP
IP: 192.168.205.16
Образец 3 – Веб-сервер 2
имя хоста: webserver02
OС: Ubuntu с LAMP
IP: 192.168.205.17
Перейдём к настройке HAProxy.
Настройка HAProxy
Создадим резервную копию оригинального файла, для этого переименуем его:
mv /etc/haproxy/haproxy.cfg{,.оригинал}
Создадим файл haproxy.cfg. С помощью текстового редактора создадим файл в /etc/haproxy/haproxy.cfg file следующего содержания:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 check
Пояснение:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
Директива файла регистрации событий (log) упоминает сервер системного журнала, на который будут отправляться сообщений журнала событий.
Директива maxconn определяет число одновременных подключений клиентской части системы. Значение по умолчанию установлено 2000 и должно быть настроено в соответствии с Вашей системой.
Директивы user и group изменяют процесс HAProxy для пользователя/группы. Эти значения изменять не следует.
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
Верхний раздел имеет значения по умолчанию. Возможность досылки позволяет перераспределить сессию, в случае сбоев связи. Следовательно, привязка к сессии отменяется, если веб-сервер выходит из строя.
Директива попыток (retries) определяет количество попыток для выполнения на сервере после сбоя соединения.
Директивы тайм-аута должны быть изменены. Contimeout определяет максимальное время ожидания успешного соединения с веб-сервером.
Сlitimeout и srvtimeout применяются, когда ожидается, что клиент или сервер получают, или передают данные во время процесса TCP. HAProxy рекомендует устанавливать одно и тоже значение для тайм-аута клиента и сервера.
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 check
Верхний блок содержит настройки для клиентской и внутренней части системы. Настроим HAProxy на порт 80 для webfarm, который представляет собой имя для идентификации приложения.
Директивы статистики разрешают соединение со страницей статистики. Данная страница доступна в нашем случае доступна по адресу: http://192.168.205.15/haproxy?.
Директивы балансировки определяют алгоритм балансировки нагрузки, доступны следующие варианты алгоримта:
- Round Robin (roundrobin)
- Статический Round Robin (static-rr)
- Наименее используемые соединения (leastconn)
- Источник (source)
- URI (uri)
- Параметр URL (url_param).
Директива server объявляет внутренний сервер, синтаксис:
server [:port] [param*]
Упомянутые названия появятся в журналах событий и предупреждениях. Существует ещё несколько параметров, поддерживаемых этой директивой и в дальнейшем будет использоваться параметр проверки (check), при котором происходит проверка сервера, иначе сервер будет всегда доступен.
После завершения настройки запустим службу HAProxy:
sudo service haproxy start
Тестирование балансировки нагрузки и преодоления отказа
Добавим имя сервера в стандартные index.html файлы, расположенные в /var/www/index.html
В образце 2 – Веб-сервер 1 (webserver01 с IP- 192.168.205.16), добавим следующее:
sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"
В образце 3 – Веб-сервер 2 (webserver02 с IP- 192.168.205.17), добавим следующее:
sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >>
/var/www/index.html"
Теперь откроем браузер и через haproxy перейдём по адресу. http://192.168.205.15
Каждый раз при обновлении вкладки нагрузка будет распределятся между веб-серверами.
Статистику haproxy можно посмотреть по адресу http://192.168.205.15/haproxy?stats
Также можно сделать следующее:
- Запустить один или оба сервера в автономном режиме, чтобы проверить, что будет, когда Вы получаете доступ к HAProxy
- Настроить HAProxy для использования в качестве пользовательской страницы поддержки
- Настроить веб-интерфейс для визуального контроля статистики HAProxy
- Изменить планировщик на что-то другое, нежели round-robin
- Настроить приоритет/значимость для конкретных серверов
Дискуссия
Написал Rocky 9
Опубликовано в: Установка nginx c PHP-FPM под CentOS 7.0 in LinuxНаписал Константин
Опубликовано в: Докеризация стека LEMP под Ubuntu c помощью Compose in LinuxНаписал bammbr
Опубликовано в: Шлюз для маленького отдела на Red Hat 9 in LinuxНаписал Федор
Опубликовано в: Установка и конфигурация Samba на CentOS 7 in LinuxНаписал Evgenytrl
Опубликовано в: Загрузка файлов с помощью Wget in Linux