Оглавление |
---|
Информация |
---|
Программное средство HAProxy используется для эффективного масштабирования TCP- и HTTP-приложений, обеспечивая высокую доступность, отказоустойчивость и распределение нагрузки посредством распределения входящих запросов на несколько обслуживающих серверов. |
Информация |
---|
Данная статья применима к:
|
Основные возможности HAProxy
- Периодическая проверка доступности обслуживающих серверов, на которые перенаправляются запросы пользователей;
- Несколько алгоритмов определения доступности серверов:
- tcp-check;
- http-check;
- mysql-check;
- Распределение HTTP-/HTTPS-/TCP-запросов между доступными серверами;
- Возможность закрепления определенных клиентов за конкретными обслуживающими серверам (stick-tables);
- Поддержка
- IPv6 и UNIX sockets,
- Сжатия HTTP/1.1 (deflate, gzip, libslz),
- SSL
- Полная поддержка постоянного HTTP-соединения;
- Поддержка переменных блоков и Lua-скриптов в конфигурации сервера;
- WEB-интерфейс с актуальным состоянием и статистикой работы программы. \subsubsection{
Установка
}\label{sec:haproxy_install}На основном сервере, который будет принимать запросы и распределять их, необходимо установить пакет HAProxy
:\begin{verbatim}
apt install haproxy
\end{verbatim}\subsubsection{Настройка}\label{sec:haproxy_example}
. Это можно сделать с помощью графического менеджера пакетов или из командной строки командой:
Command |
---|
sudo apt install haproxy |
Настройка
Настройка выполняется в конфигурационном файле
\verb|/etc/haproxy/haproxy.cfg
|,
включающем следующие
разделысекции:
- \begin{itemize}
- global |
- --- определяет общую конфигурацию для всего HAProxy; \item \verb|
- defaults |
- --- является обязательным и определяет настройки по-умолчанию для остальных разделов; \item \verb|
- frontend |
- --- используется для описания набора интерфейсов для принятия соединений от клиентов, а также правил распределения нагрузки; \item \verb|
- backend |
- --- используется для описания набора серверов, к которым будет выполняться подключение переадресованных входящих соединений, а также определения алгоритма распределения нагрузки; \item \verb|
- listen |
- --- объединенный раздел для описания \verb|
- frontend |
- и \verb|
- backend |
- . Используется для описания прокси-сервера в одном разделе, как правило, только для TCP-трафикa. \end{itemize}В таблице~\ref{tbl:haproxy_conf}
\item \verb|
В таблице ниже представлены основные примеры значений параметров конфигурационного файла и их описание.
\begin{longtable}[l]{|p{25mm}|p{55mm}|p{90mm}|}\RUSBCaption{Параметры конфигурационного файла \RUSBCourier{/etc/haproxy/haproxy.cfg}}
\label{tbl:haproxy_conf}\\
\hline
\centering\arraybackslash Раздел &
\centering\arraybackslash Параметр &
\centering\arraybackslash Описание \\
\hhline{|=|=|=|}
\endfirsthead
\noalign{\noindent\normalsize\textit{Продолжение таблицы \thetable}\vspace{5pt}}
\hline
\centering\arraybackslash Раздел &
\centering\arraybackslash Параметр &
\centering\arraybackslash Описание \\
\hhline{|=|=|=|}
\endhead
\noalign{\noindent\normalsize\textit{Окончание таблицы \thetable}\vspace{5pt}}
\hline\centering\arraybackslash
Раздел |
---|
Параметр |
---|
Описание |
---|
\hhline{|=|=|=|}
\multirow{7}{1mm}\,{\RUSBCourier{
global |
log <address> <facility> |
[max level [min level]] |
Пример: log 127.0.0.1 local0 notice |
Добавляет сервер системного журнала. |
Параметр <facility> должен быть одним из 24 стандартных типов регистрации событий: |
|
|
|
|
& \RUSBCourier{maxconn <number>} \newline Например, \RUSBCourier{maxconn 10000} &
maxconn <number> Пример: maxconn 10000 | Устанавливает максимальное число одновременных подключений для каждого процесса |
\cline{2-3}
& \RUSBCourier{nbproc <number>}\newline Например, \RUSBCourier{nbproc 2} & Задает количество процессов \verb|haproxy|
haproxy. | |
nbproc <number> Пример: nbproc 2 | Задает количество процессов haproxy. По умолчанию создается только один процесс |
\cline{2-3}
& \RUSBCourier{daemon} & Устанавливает процессу \verb|haproxy| режим работы <<daemon>>\\
\cline{2-3}
& \RUSBCourier{user} &
haproxy. | |
daemon | Устанавливает процессу haproxy режим работы <<daemon>>. |
user | Пользователь, от имени которого работает процесс |
\cline{2-3}
& \RUSBCourier{group} &
haproxy. | |
group | Группа, от имени которой работает процесс |
\cline{2-3}
& \RUSBCourier{
haproxy. |
chroot /var/lib/haproxy |
Устанавливает окружение процесса |
\cline{2-3}
\hline
\multirow{7}{1mm}\,{\RUSBCourier{defaults}} & \RUSBCourier{log global} &
haproxy. | ||
defaults | log global | Включает в регистрацию событий информацию о трафике |
\cline{2-3}
& \RUSBCourier{mode http} &
. | ||
mode http | Режим работы HAProxy. |
Возможны два режима: |
\item \verb|
|
|
|
|
|
\end{itemize}\\
& \RUSBCourier{
option dontlognull |
Отключает регистрацию пустых подключений |
\cline{2-3}
& \RUSBCourier{retries 3} &
. | ||
retries 3 | Количество попыток определить состояние обслуживающего сервера после сбоя подключения |
\cline{2-3}
& \RUSBCourier{option redispatch} &
. | ||
option redispatch | Распределяет запросы после сбоя подключения к одному из обслуживающих серверов |
\cline{2-3}
& \RUSBCourier{option httpclose} & Закрывает пассивные соединения \\
\cline{2-3}
& \RUSBCourier{option forwardfor} &
. | ||
option httpclose | Закрывает пассивные соединения. | |
option forwardfor | Включает X-Forwarded-For для передачи IP-адреса клиента обслуживающему серверу |
. |
\multirow{2}{1mm}\,{\RUSBCourier{frontend}} & \RUSBCourier{frontend http} & Задает имя \verb|frontend| \\
\cline{2-3}
& \RUSBCourier{
frontend | frontend http | Задает имя frontend. |
bind *:80 |
Задает IP-адрес и порт для прослушивания запросов |
. |
\newpage\hline
\multirow{7}{1mm}\,{\RUSBCourier{backend}} & \RUSBCourier{backend sitecluster} & Задает имя обслуживающего сервера \\
\cline{2-3}
& \RUSBCourier{
backend | backend sitecluster | |
balance (roundrobin/leastconn/static-rr/uri/source) |
Настройка алгоритма распределения. Поддерживаются следующие алгоритмы: |
\begin{itemize}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end{itemize} \\
\cline{2-3}
& \RUSBCourier{
| |
server srv-1.3.my.com 21.86.21.20:80 cookie site113ha check inter 2000 fall 3 minconn 30 maxconn 70 weight 100 |
Описание обслуживающего сервера, где: |
\item \verb|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end{itemize} \\
\cline{2-3}
& \RUSBCourier{stats enable} & Включает статистику \\
\cline{2-3}
& \RUSBCourier{fullconn 200} &
| ||
stats enable | Включает статистику. | |
fullconn 200 | Задает максимальное значение одновременных подключений |
. |
\newpage
\multirow{7}{1mm}\,{\RUSBCourier{listen}} & \RUSBCourier{listen
listen listen stats-srv-3.my.com *:8180 |
Описывает IP-адрес и порт доступа к статистике |
\cline{2-3}
& \RUSBCourier{
. | |
stats uri /stats |
URL доступа к статистике |
\cline{2-3}
& \RUSBCourier{
. | |
stats realm Haproxy |
Statistics |
Заголовок (title) страницы статистики |
\cline{2-3}
& \RUSBCourier{
. | |
stats show-legends |
Отображает в статистике дополнительную информацию о параметрах |
\cline{2-3}
& \RUSBCourier{
. | |
stats refresh 5s |
Указывает интервал автоматического обновления страницы статистики |
\cline{2-3}
& \RUSBCourier{
. | |
stats auth test:test |
Устанавливает логин и пароль доступа к странице статистики |
\hline
\end{longtable}\begin{RUSBExample}
Конфигурационный файл
. |
Пример конфигурационного файла для распределения нагрузки сервера Apache
\begin{verbatim}Раскрыть |
---|
|
|
|
\end{verbatim}
\end{RUSBExample}