Установка HAProxy на Linux (Debian/Ubuntu или CentOS/RedHat)
HAProxy это ПО с открытым исходным кодом, а так же быстрый и надежный балансировщик нагрузки для TCP и HTTP-приложений, посредством распределения входящих запросов на несколько обслуживающих серверов.
HAProxy используют многие высоконагруженные сайты ( например Twitter, Instagram и многие другие).
В своей статье «Установка HAProxy на Linux (Debian/Ubuntu или CentOS/RedHat)» я расскажу как можно установить HAproxy на различные Linux ОС, такие как CentOS, RedHat или Debian, Ubuntu. На готовых примера расскажу как работает данный балансировщик.
Рассмотрю готовый пример использования.
Для начала нужно установить все необходимое, например nginx или apache. Можно прочитать как это делается в моих статьях:
Я не буду рассказывать как установить PHP с веб сервером (apache/nginx/lighthttpd или другие). В моем примере, установлен LEMP (nginx с php-fpm (PHP) и mysql).
Рассмотрим мой готовый пример на реальных машинах. И так, я имею:
VPS_HAproxy: 192.168.103.1 и я установлю на CentOS 6.6.
Stats:192.168.103.193:1936 — Дополнительный IP на VPS с HAproxy для статистики.
VPS_Debian: 192.168.103.2 ОС на Debian 8.
Думаю что хватит мне 3 виртуальные машины чтобы показать наглядную работу данного балансировщика. На VPS_HAproxy, я буду устанавливать сам балансировщик — HAproxy, так же он будет работать как front-end/back-end сервер.
Установка HAProxy.
Можно установить несколькими методами ( пакетом или с исходного кода).
1. Установка из пакетов.
Debian 6
Для начала необходимо включить репозиторий Backports:
# cd /usr/local/src && wget·http://www.haproxy.org/download/1.5/src/haproxy-1.5.12.tar.gz
Распакуем данный архив и перейдем в папку с исходным кодом:
sh
1 lines
# tar -zxvf haproxy-1.5.12.tar.gz && cd·haproxy-1.5.12
Конфигурируем и собираем данный пакет.
Можно собрать в DEB или RPM пакет:
Создание RPM или DEB пакетов с Checkinstall в Linux
Более подробно напишу попозже, если что-то не понятно, пишите я постараюсь Вам помочь.
Настройка логов в HAProxy
Далее, необходимо включить функцию ведения лога (записи ошибок в лог) в HAProxy для будущей отладки, для этого внесем изменения в файле:
sh
1 lines
# vim /etc/haproxy/haproxy.cfg
Далее, в зависимости от дистрибутив внесите изменения в HAProxy.
Для RHEL/CentOS/Fedora
Под строчкой «#Global settings» вставляем:
sh
1 lines
log127.0.0.1local2
если она прописана, то не нужно ничего менять.
Для Ubuntu/Debian
Под строчкой «#Global settings» вносим изменения:
находим:
sh
2 lines
log/dev/loglocal0
log/dev/loglocal1notice
Заменяем на:
sh
1 lines
log127.0.0.1local2
Далее, мы должны включить логирование для UDP в файле конфигурации:
sh
1 lines
#·vim /etc/rsyslog.conf
Расскоментировать нужно ModLoad и UDPServerRun, здесь наш сервер будет слушать порт 514 для сбора логов в syslog.
sh
5 lines
[...]
# Provides UDP syslog reception
$ModLoadimudp
$UDPServerRun514
[...]
Далее, нам необходимо создать отдельный файл ‘haproxy.conf «в директории» /etc/rsyslog.d/ «, чтобы настроить отдельные log-файлы:
sh
1 lines
# vim /etc/rsyslog.d/haproxy.conf
Добавьте следующую строку в файл вновь создать.
sh
1 lines
local2.*/var/log/haproxy.log
Наконец, нужно перезапустить службу Rsyslog для обновления изменений:
sh
1 lines
# service rsyslog restart
Настройка HAProxy.
В качестве примера, я выбрал виртуальную машину на CentOS 6.6. Скопирую дефолтный конфиг ( чтобы можно было вернуть на прежнее место все как было):
sh
1 lines
# cp /etc/haproxy/haproxy.cfg{,.original}
Немного изменим конфигурационный файл, чтобы он выглядел так (конфиг для первого примера, на одной виртуальной машине):
sh
1 lines
# vim·/etc/haproxy/haproxy.cfg
Затем мы должны определить front-end и back-end балансировки в глобальном файле конфигурации /etc/haproxy/haproxy.cfg, как показано ниже. Замените IP-адреса, имена хостов и учетные данные HAProxy на ваши.
Добавьте строки что внизу в файл ‘/etc/iptables.up.rules’ чтобы включить порты на брандмауэре.
sh
3 lines
AINPUT·ptcp··dport514·jACCEPT
AINPUT·ptcp··dport80·jACCEPT
AINPUT·ptcp··dport443·jACCEPT
ВНИМАНИЕ! Так же, обязательно добавьте порт для статистики (можно указать при конфигурации статистики 80-й порт и тогда ничего не нужно будет добавлять), я использую порт 1936, но у меня выключен фаэрвол и мне не нужно было добавлять правило.
Тестирование HAproxy
Создам файл для тестирования с именем index.html:
sh
1 lines
# vim /home/captain/HAproxy/index.html
И вставлю следующий код:
sh
19 lines
<html>
<head>
<title>Linux-NotesHAProxyTestPage</title>
</head>
<body>
<!--Maincontent-->
<h1>MyHAProxyTestPage</h1>
<p>WelcometoHAProxytestpage!
<p>Thereshouldbemorehere, butIdon't know
what to be write :p.
<address>Made 25 Jane 2015<br>
by captain.</address>
</body>
</html>
Так же можно использовать следующий php скрипт cо следующим содержанием:
После создания «index.html» файл, попытаемся получить доступ к сайту.
Session Stickiness
Если ваш веб-приложение служит динамическое содержимое на основе сеансов входа пользователей, посетители будут испытывать странные вещи из-за непрерывного переключения между VPS. «Session Stickiness» гарантирует, то что посетитель будет иметь свои куки наVPS.
Я приведу пример использования следующий PHP кода, чтобы продемонстрировать, как работает все это:
sh
1 lines
# vim /home/captain/HAproxy/session.php
добавляем:
sh
18 lines
<?php
header('Content-Type: text/plain');
session_start();
if(!isset($_SESSION['visit']))
{
echo"This is the first time you're visiting this server";
HAProxy статистика дает много информации о переданных данных, общей связи, состояния сервера и т.д. после установки HAProxy, если вы хотите посмотреть в HAProxy статистику, то ее можно легко настроить.
Отредактируем конфиг балансировщика:
sh
1 lines
# vim /etc/haproxy/haproxy.cfg
И прописываем (добавляем в самый конец конфига):
sh
18 lines
[...]
listenstats192.168.103.1:1936
modehttp
logglobal
maxconn10
clitimeout100s
srvtimeout100s
contimeout100s
timeoutqueue100s
statsenable
statshide-version
statsrefresh30s
statsshow-node
statsauthuser:password
statsuri/haproxy?stats
Ваш может получить доступ к статистике используя HAProxy URL-адрес:
listen stats 192.168.103.1:1936 — это IP на котором будет отображаться статистика ( мой HAproxy) и порт, нужен для вывода статистике.
Например:
listen stats 192.168.103.1:8080
stats auth user:password, где user — это ваш пользователь и password — это пароль пользователя user.
Например:
stats auth captain:captain_password
stats uri /haproxy?stats — это ссылка по которой будет расположена статистика, ее можно изменить на любую другую. Например:
— stats uri /stats
— stats uri /haproxy-stats
На этом, моя тема «Установка HAProxy на Linux (Debian/Ubuntu или CentOS/RedHat)» подошла к завершению. Надеюсь было интересно и хорошо рассказано. Если есть Пожелания или замечания, пишите в комментариях.