Установка и настройка HAProxy на Debian/Ubuntu

Установка HAProxy

Debian8

Debian7

Ubuntu14

Либо

 

2.Настройка логирования HAProxy

Настройка HAProxy

Настройка Rsyslog

 

3.Настройка HAProxy

Вся статистика по кластеру HAproxy становится доступна по адресу
http://IP-haproxy-server/haproxy с логином и паролем,указанными в параметре stats auth
Доступность серверов приложений(WEB-серверов) HAProxy будет проверять с помощью проверки, описанной в его конф.файле

Для этого создадим на WEB-серверах в корне сайта по умолчанию файл test.php,например, с таким содержанием

Если Web-сервер недоступен/не проходит корректно проверку, он будет автоматически выброшен из кластера HAProxy и все запросы будут распределяться между оставшимися двумя Web-серверами.

Добавление HAProxy в автозагрузку
Debian 8

Debian 7/Ubuntu 14

Запуск HAProxy и проверка корректности запуска

Debian8

Ubuntu14

5083 ? Ss 0:05 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -D -p /var/run/haproxy.pid

В логах HAProxy

 

Для проверки балансировки запросов на все три Web-сервера создаем на этих серверах в в корне для сайта по умолчанию либо разные странички, либо файл,например lb.php, с таким содержимым

Далее тестируем распределение запросов, например,с loadbalancera (EXT_IP-10.10.1.43,INT_IP-192.168.10.1)

Т.е запросы по очереди направляются на все три сервера Web-сервера

 

Настройка HAProxy для поддержки sticky sesions
Приведенная выше настройка HAproxy не предусматривает поддержку sticky user’s session
Т.е нет возможности направить все запросы пользователя на один и тот же сервер приложений. Такая привязка не нужна, например, если PHP-сессии хранятся в едином хранилище(например, в общей папке примонтированной по NFS на серверах приложений, или PHP-сессии хранятся на сервере/серверах memcache/redis или в базе данных)
В случае,если нет единого общего типа хранения PHP-сессий необходимо настроить HAproxy для поддержки sticky session
Липкие сессии (sticky session) позволяют закрепить пользователя за сервером, который обслужил его первый запрос. для этого нужно отметить каждый сервер бэкенда при помощи файлов cookie.
При первом соединении с HAproxy-сервером клиент будет получать от HAproxy-сервера заголовок Set-Cookie со значением сервера, который его будет обслуживать.
При последующих подключениях этого клиента, браузер клиента сообщает HAproxy-серверу значение заголовка Cookie и уже на основании этого значения HAproxy-сервер направляет запрос клиента на сервер, который обслуживал его первый запрос т.е тем самым достигается возможность обработки всех запросов конкретного клиента одним и тем же сервером(т.е конкретный клиент прикрепляется к конкретному Web-серверу)
В данном случае HAproxy-сервер будет вставлять куку с именем SRVNAME (если только пользователь не пришел с такой кукой т.е, если это первый запрос пользователя),а значение этой куки будет app01 или app02 или app03.

# nano /etc/haproxy/haproxy.cfg

Для тестирования sticky sessions создаем файл session.php на WEB-серверах в корне сайта по умолчанию с таким содержимым
Этот код создаёт PHP-сессию и отображает количество просмотров страниц за одну сессию.

Тестируем

Для эмуляции работы браузера (передачи полученной от HAproxy-сервера заголовка)

Используем команду

Оба этих запроса обработал все тот же сервер, который обрабатывал и самый первый запрос клиента(192.168.10.54 — app01)

 

Постоянное HTTP-соединение
В настройках используется директива option httpclose, которая добавляет заголовок

Он закрывает соединения клиента (браузера) после получения ответа.
Чтобы включить повторное использование соединений HTTP (или HTTP keep-alive) для HAProxy, нужно заменить строку option httpclose следующим кодом:

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

Тестирование постоянного HTTP-соединения

Можно протестировать настройку при помощи curl, оправив несколько одновременных запросов. Вывод будет примерно таким (ненужные фрагменты опущены):

Как видно из вывода есть строка,которая подтверждает повторное использование существующего соединения для отправки

 

Настройка доступа к статистике HAProxy

http://10.10.1.43/haproxy

HAProxy-statistics

 

 

Настройка HAProxy на поддержку/обработку HTTPS-запросов

Две основных метода работы НAProxy c SSL
SSL-Termination
Шифрованное https –соединение клиента принимает лоадбалансер и дешифрует его и уже нешифрованное http_соединение отправляет на backend сервера(сервера приложений)
Это означает, что балансировкщик нагрузки несет ответственность за расшифровку соединение SSL — медленный и трудоемкий процесс CPU относительно приема без SSL-запросов.
Вся нагрузка по рашифровке соединений ложится на процессор лоадбалансера

SSL Pass-Through
Шифрованное https –соединение клиента принимает лоадбалансер и проксирует его в неизменном виде на сервера приложений
С помощью SSL-Pass-Through, соединение SSL завершается на каждом сервере приложений распределяя нагрузку на процессоры этих серверов. Тем не менее, теряется возможность добавлять или редактировать заголовки HTTP, так как соединение просто направляется через балансиовщик нагрузки на сервера приложений.
Это означает, что серверы приложений потеряют возможность получить X-Forwarded- * заголовки, которые могут включать в себя клиента IP-адрес, порт и используемую схему.

Создание самоподписного сертификата

Получение PEM-файла в формате понятном для HAproxy

 

Настройка HAProxy в режиме SSL Termination

Настройка HAProxy для того, чтобы сайты были доступны,как по http, так и по https-протоколам

Если необходимо иметь доступ к сайту только по https, тогда настраиваем принудительный редирект http->https

 

Настройка HAProxy в режиме SSL Pass-Through
Работа балансировщика нагрузки заключается только в проксировании запросов на сервера приложений. Поскольку соединение остается зашифрованным, HAProxy не может с этим ничего сделать, кроме,как перенаправить запрос на сервер приложений
В этой установке, мы должны использовать режим TCP вместо HTTP режима в обоих frontend и backend конфигурациях

SSL-сетификаты настраиваются на WEB-серверах
Настройка SSL-сертификатов на HAProxy не требуется
Для проверки доступности серверов приложений, мы можем использовать

который проверяет соединение, а также его способность обрабатывать SSL (в частности SSLv3) соединений.
frontend LBS

 

Проверяем распределение запросов

Если необходимо использовать Sticky session, то в секцию backend добавляем

 

Проверяем

 

Источник:
https://serversforhackers.com/load-balancing-with-haproxy
https://serversforhackers.com/using-ssl-certificates-with-haproxy
https://www.8host.com/blog/balansirovka-nagruzki-http-s-pomoshhyu-haproxy-na-servere-ubuntu/
http://linux-notes.org/ustanovka-haproxy-na-linux-debian-ubuntu-ili-centos-redhat/
https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-to-set-up-http-load-balancing-on-an-ubuntu-vps
http://www.phphighload.com/2012/08/blog-post.html
http://virtuallyhyper.com/2013/05/configure-haproxy-to-load-balance-sites-with-ssl/
https://serversforhackers.com/using-ssl-certificates-with-haproxy
https://serversforhackers.com/load-balancing-with-haproxy

 

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика