Поиск по сайту:

Балансировка нагрузки веб-сервера с помощью HAProxy в Ubuntu 14.04


На этой странице

  1. Что такое HAProxy?
  2. Установка HAProxy
  3. Настройка HAProxy
  4. Тестирование балансировки нагрузки и отказоустойчивости

Что такое 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.
  • измените планировщик на что-то другое, кроме циклического перебора
  • настроить приоритеты/веса для определенных серверов

Вот и все!