Балансировка нагрузки веб-сервера с помощью HAProxy в Ubuntu 14.04
На этой странице
- Что такое HAProxy?
- Установка HAProxy
- Настройка HAProxy
- Тестирование балансировки нагрузки и отказоустойчивости
Что такое HAProxy?
Установка HAProxy
Я использую Ubuntu 14.04 и устанавливаю его:
apt-get install haproxy
Проверить версию можно:
haproxy -v
Нам нужно разрешить запуск HAProxy сценарием инициализации /etc/default/haproxy. Установите для параметра ENABLED значение 1, как:
ENABLED=1
Чтобы убедиться, что это изменение сделано правильно, запустите сценарий инициализации HAProxy без каких-либо параметров. Вы должны увидеть следующее:
$ service haproxy <press_tab_key>
reload restart start status stop
Настройка HAProxy
Сделайте резервную копию исходного файла, переименовав его:
mv /etc/haproxy/haproxy.cfg{,.original}
Хорошо создадим наш собственный файл haproxy.cfg. Используя ваш любимый текстовый редактор, создайте файл /etc/haproxy/haproxy.cfg следующим образом:
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
Директива журнала указывает сервер системного журнала, на который будут отправляться сообщения журнала.
Директива maxconn указывает количество одновременных подключений к внешнему интерфейсу. Значение по умолчанию — 2000, и его следует настроить в соответствии с конфигурацией вашей системы.
Директивы пользователя и группы изменяют процесс HAProxy на указанного пользователя/группу. Их не следует менять.
defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000
Вышеприведенный раздел имеет значения по умолчанию. Опция redispatch включает перераспределение сеанса в случае сбоя подключения. Таким образом, привязка сеанса переопределяется, если экземпляр веб-сервера выходит из строя.
Директива retries устанавливает количество повторных попыток, которые необходимо выполнить на экземпляре веб-сервера после сбоя соединения.
Значения, которые необходимо изменить, представляют собой различные директивы тайм-аута. Параметр contimeout указывает максимальное время ожидания успешной попытки подключения к экземпляру веб-сервера.
clitimeout и 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 для веб-фермы, что является просто именем для идентификации приложения.
Директивы stats включают страницу статистики подключения. Эту страницу можно просмотреть с помощью URL-адреса, указанного в URI статистики, поэтому в данном случае это http://192.168.205.15/haproxy?stats. Здесь можно просмотреть демонстрацию этой страницы.
Директива balance определяет алгоритм балансировки нагрузки. использовать. Доступные варианты алгоритма:
- Круговая система (круговая система),
- Статический круговой алгоритм (static-rr),
- Наименьшее количество подключений (leastconn),
- Источник (источник),
- URI (ури) и
- Параметр URL (url_param).
Информацию о каждом алгоритме можно получить из официальной документации.
Директива сервера объявляет внутренний сервер, синтаксис такой:
server <server_name> <server_address>[: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"
Теперь откройте веб-браузер на локальном компьютере и просмотрите IP-адрес haproxy, например http://192.168.205.15.
Каждый раз, когда вы обновляете вкладку, вы видите, что нагрузка распределяется между каждым веб-сервером. Ниже скриншот моего браузера:
В первый раз, когда я посещаю http://192.168.205.15, я получаю:
И во второй раз, т.е. когда я обновляю страницу, я получаю:
Вы также можете проверить статистику haproxy, посетив http://192.168.205.15/haproxy?stats.
Theres больше, что вы можете сделать с этой установкой. Некоторые идеи включают в себя:
- переведите один или оба веб-сервера в автономный режим, чтобы проверить, что происходит при доступе к HAProxy.
- настроить HAProxy для обслуживания пользовательской страницы обслуживания
- настройте веб-интерфейс, чтобы вы могли визуально отслеживать статистику HAProxy.
- измените планировщик на что-то другое, кроме циклического перебора
- настроить приоритеты/веса для определенных серверов
Вот и все!