Краткий обзор возможностей HaProxy

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

На момент написания статьи вышел стабильный релиз 1.5.3 с поддержкой балансировки SSL соединений. В те времена, когда мне приходилось работать с Haproxy, доставка SSL трафика к конечному серверу производилась обычным форвардингом соединения на 443 порт.

К сожалению в репозитариях CentOS и Ubuntu последняя версия еще не доступна. Поэтому ее не буду рассматривать. О том, как установить и настроить HaProxy из исходников будет отдельная статья.

Устанавливается оно с помощью обычно мэнэджера пакетов. Дальше буду работать с CentOS:

yum install haproxy

После установки файл настроек сохраняется в /etc/haproxy

По умолчанию в этом файле можно описать все настройки. Есть общие настройки haproxy и настройки так называемых бэк-эндов (back-ends).

Общие настройки из секции global, как правило не требуют изменений.

Конфигурацию бэк-эндов я рассмотрю подробнее. Бэк-эндом (BackEnd) называется сервер, который находится за балансировщиком нагрузки, многие их называют головами или вэб головами (web heads). Есть два подхода к описанию кластеров серверов, находящихся за балансировщиком нагрузки:

1. Простой метод listen->servers используется в том случае, если у Вас есть несколько вэб серверов (допустим 3), их параметры одинаковы (CPU/RAM) и весь трафик равномерно распределяется между ними. В функционале серверов нету разницы. Каждый из них в равной степени может обрабатывать все входящие запросы. В таком случае

listen listener_mane
bind <strong>ip_address</strong>:80
option &lt;option1&gt;
option &lt;option2&gt;
....................
option &lt;optionN&lt;
server server1 192.168.1.10:80 &lt;option1&gt; &lt;option2&gt; ... &lt;option N>
server server2 192.168.1.20:80 &lt;option1&gt; &lt;option2&gt; ... &lt;option N>
server server3 192.168.1.30:80 &lt;option1&gt; &lt;option2&gt; ... &lt;option N>
  1. Более тонкий метод frontend->backend->servers. В этом случае сервера групируются в так называемые backend, которые по сути представляют собой подобие секции listen, описанной в предыдущем пункте. Backendы в свою очередь объединятся в гллобальный frontend.
frontend &lt;instance_name&gt;
bind &lt;ip_address:port&gt;
mode &lt;layer mode&gt;
option &lt;option1&gt;
option &lt;option2&gt;
…
option &lt;optionN&gt;
acl &lt;acl_name1&gt; &lt;acl_type&gt; &lt;acl_definition&gt;

use_backend &lt;backend_name&gt; if &lt;acl_name1&gt; 
default_backend &lt;backend_name&gt;

backend static &lt;backend_name&gt;
balance &lt;ballance method&gt;
option &lt;option1&gt;
option &lt;option2&gt;
…
option &lt;optionN&gt;
server &lt;server_name1&gt; &lt;nod_ip_address&gt;:&lt;port&gt; &lt;option1&gt; &lt;option2&gt; … &lt;option N&gt;
server &lt;server_name2&gt; &lt;nod_ip_address&gt;:&lt;port&gt; &lt;option1&gt; &lt;option2&gt; … &lt;option N&gt;

backend web&lt;backend_name&gt; server &lt;server_name2&gt; &lt;nod_ip_address&gt;:&lt;port&gt; &lt;option1&gt; &lt;option2&gt; … &lt;option N&gt;
backend backoffice &lt;backend_name&gt; server &lt;server_name2&gt; &lt;nod_ip_address&gt;:&lt;port&gt; &lt;option1&gt; &lt;option2&gt; … &lt;option N&gt;

bind - определяет ip адрес и порт, на котором будет создан ip сокет для входящих соединений.

Что же качается режимов балансироваки нагрузки (**mode **), то их всего два:

  • http - используется исключительно для балансировки http трафика (уровень 7 OSI). Позволяет использовать возможности манипуляции с заголовками, куками и т.д.
  • tcp - универсальный режим. Можно использовать для балансироваки любого трафика (https, mysql, smtp, и т.д.)

option - с помощью этой директив можно включить дополнительные плюшки для необходимой секции. Все опции можно посмотреть здесь.

Практические примеры по настройке можно почитать здесь.

Описание всех опций секции seerver можно найти по адресу http://haproxy.tech-notes.net/5-2-server-and-default-server-options/

Share Button