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

Как настроить HAProxy в качестве балансировщика нагрузки для Nginx в CentOS 7


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

  1. Основная концепция HAProxy
    1. Уровень 4 и уровень 7
    2. Алгоритм балансировки

    HAProxy или High Availability Proxy — это балансировщик нагрузки TCP и HTTP с открытым исходным кодом и программное обеспечение прокси-сервера. HAProxy был написан Вилли Тарро на C, он поддерживает SSL, сжатие, поддержку активности, настраиваемые форматы журналов и перезапись заголовков. HAProxy — это быстрый и легкий прокси-сервер и балансировщик нагрузки с небольшим объемом памяти и низкой загрузкой ЦП. Его используют такие крупные сайты, как Github, StackOverflow, Reddit, Tumblr, Twitter и другие. За последние годы он стал самым популярным программным балансировщиком нагрузки и прокси-сервером.

    В этом руководстве я проведу вас через установку и настройку HAProxy для 3 серверов, одного балансировщика нагрузки и двух веб-серверов Nginx. Мы установим HAProxy на один сервер, а затем установим веб-сервер Nginx на другие серверы. HAProxy действует как балансировщик нагрузки для веб-серверов Nginx.

    Основная концепция с HAProxy

    Уровень 4 и Уровень 7

    HAProxy может работать в двух режимах: режим TCP уровня 4 и режим HTTP уровня 7. В режиме TCP уровня 4 HAProxy пересылает необработанные TCP-пакеты от клиента на серверы приложений. В режиме HTTP уровня 7 HAProxy анализирует заголовок HTTP перед его пересылкой на серверы приложений. В этом руководстве мы будем использовать Nginx в качестве веб-сервера, который поддерживает только режим HTTP уровня 7.

    Алгоритм баланса

    Это алгоритм, который используется HAProxy для выбора сервера при балансировке нагрузки. Доступны следующие режимы:

    По-круговой

    Это самый простой алгоритм баланса. Каждое новое соединение будет обрабатываться следующим внутренним сервером. Если достигнут последний внутренний сервер в списке, он снова запустится с вершины внутреннего списка.

    Ластконн

    Новое подключение будет обрабатываться внутренним сервером с наименьшим количеством подключений. Это полезно, когда время и нагрузка запросов сильно различаются.

    Источник

    Это для липких сессий, IP-адрес клиента будет хэшироваться, чтобы определить внутренний сервер, который получил последний запрос с этого IP-адреса. Таким образом, IP A всегда будет обрабатываться backend1, а IP B всегда будет обрабатываться bankend2, чтобы не прерывать сеансы.

    Есть и другой алгоритм — подробности смотрите на официальном сайте HAProxy.

    Предпосылки

    • 3 ОС CentOS 7

    loadbalancer
                192.168.1.102

               nginx1
               192.168.1.104

                nginx2
    >            192.168.1.105

    • Права root на всех трех серверах.

    Шаг 1. Настройте файлы /etc/hosts.

    Войдите на сервер балансировщика нагрузки и отредактируйте файл /etc/hosts.

    ssh 
    sudo su
    vi /etc/hosts

    Добавьте имена хостов nginx1 и nginx2:

    192.168.1.104    nginx1.loadbalancer.me     nginx1
    192.168.1.105    nginx2.loadbalancer.me     nginx2

    Сохраните файл и выйдите из редактора.

    Затем отредактируйте файл hosts на серверах Nginx (nginx1 и nginx2):

    ssh 

    Отредактируйте и добавьте новую строку для балансировщика нагрузки в файлы hosts:

    vi /etc/host

    Добавьте имя хоста балансировщика нагрузки на каждый сервер nginx:

    192.168.1.102    loadbalancer

    сделайте это на серверах nginx1 и nginx2.

    Шаг 2 — Установите и настройте HAProxy

    HAProxy доступен в репозитории CentOS 7, войдите на сервер балансировщика нагрузки и обновите списки пакетов:

    ssh 
    yum -y update

    Теперь установите HAProxy с помощью этой команды yum:

    yum -y install haproxy

    Когда установка будет завершена, перейдите в каталог \/etc/haproxy/\ и сделайте резервную копию исходного файла конфигурации:

    cd /etc/haproxy/
    mv haproxy.cfg haproxy.cfg.orig

    Затем добавьте новый файл конфигурации HAProxy \haproxy.cfg\ с помощью редактора vi:

    vi haproxy.cfg

    Вставьте конфигурацию ниже:

    #---------------------------------------------------------------------
    # Global settings
    #---------------------------------------------------------------------
    global
        log         127.0.0.1 local2     #Log configuration

        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
        maxconn     4000               
        user        haproxy             #Haproxy running under user and group "haproxy"
        group       haproxy
        daemon

        # turn on stats unix socket
        stats socket /var/lib/haproxy/stats

    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
        mode                    http
        log                     global
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000

    #---------------------------------------------------------------------
    #HAProxy Monitoring Config
    #---------------------------------------------------------------------
    listen haproxy3-monitoring *:8080                #Haproxy Monitoring run on port 8080
        mode http
        option forwardfor
        option httpclose
        stats enable
        stats show-legends
        stats refresh 5s
        stats uri /stats                             #URL for HAProxy monitoring
        stats realm Haproxy\ Statistics
        stats auth howtoforge:howtoforge            #User and Password for login to the monitoring dashboard
        stats admin if TRUE
        default_backend app-main                    #This is optionally for monitoring backend

    #---------------------------------------------------------------------
    # FrontEnd Configuration
    #---------------------------------------------------------------------
    frontend main
        bind *:80
        option http-server-close
        option forwardfor
        default_backend app-main

    #---------------------------------------------------------------------
    # BackEnd roundrobin as balance algorithm
    #---------------------------------------------------------------------
    backend app-main
        balance roundrobin                                     #Balance algorithm
        option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost    #Check the server application is up and healty - 200 status code
        server nginx1 192.168.1.104:80 check                 #Nginx1
        server nginx2 192.168.1.105:80 check                 #Nginx2

    Сохраните файл конфигурации и выйдите.

    Затем настройте rsyslog для HAProxy.

    Мы настроим демон rsyslog для регистрации статистики HAProxy. Отредактируйте файл rsyslog.conf, чтобы разрешить использование UDP-порта 514 программой rsyslog.

    vi /etc/rsyslog.conf

    Раскомментируйте эту строку, чтобы включить соединение UDP:

    $ModLoad imudp
    $UDPServerRun 514

    Если вы хотите использовать определенный IP-адрес, вы можете добавить новую строку, подобную приведенной ниже:

    $UDPServerAddress 127.0.0.1

    Сохраните файл и выйдите.

    Затем создайте новый файл конфигурации haproxy для rsyslog:

    cd /etc/rsyslog.d/
    vi haproxy.conf

    Вставьте конфигурацию ниже:

    local2.=info     /var/log/haproxy-access.log    #For Access Log
    local2.notice    /var/log/haproxy-info.log      #For Service Info - Backend, loadbalancer

    Сохранить и выйти.

    Теперь перезапустите rsyslog и затем запустите haproxy:

    systemctl restart rsyslog
    systemctl start haproxy

    Добавьте haproxy для запуска при загрузке:

    systemctl enable haproxy

    Шаг 3 — Установите и настройте Nginx

    В этом разделе мы установим Nginx из репозитория epel на серверы nginx1 и nginx2.

    Авторизуйтесь на серверах:

    ssh 

    Установите репозиторий epel с помощью команды yum ниже:

    yum -y install epel-release

    Теперь вы можете установить Nginx:

    yum -y install nginx

    Нгинкс установлен. Перейдите в веб-каталог и измените индексный файл, чтобы мы могли видеть, какой из двух серверов доставил html-файл:

    cd /usr/share/nginx/html/
    echo "<h1>nginx1.loadbalance.me</h1>" > index.html     #For nginx1 server
    echo "<h1>nginx2.loadbalance.me</h1>" > index.html     #For nginx2 server

    Затем добавьте Nginx для запуска при загрузке, а затем запустите его:

    systemctl enable nginx
    systemctl start nginx

    Убедитесь, что вы делаете этот шаг на серверах nginx1 и nginx2.

    Шаг 4 — Тестирование

    Тестирование из браузера путем доступа к IP-адресу балансировщика нагрузки: 192.168.1.102

    Тестирование с помощью команды curl:

    curl 192.168.1.102

    Тестирование для входа в веб-мониторинг HAProxy, работающий на порту 8080, с именем пользователя и паролем «howtoforge»:

    http://192.168.1.102:8080/статистика

    HAProxy успешно работает и действует как балансировщик нагрузки для наших двух веб-серверов Nginx.

    Заключение

    HAProxy или прокси-сервер высокой доступности — это программное обеспечение с открытым исходным кодом, которое обеспечивает высокую доступность для служб на основе TCP, оно работает как балансировщик нагрузки HTTP и прокси-сервер. Программное обеспечение написано на C и поддерживает SSL, поддержку активности и сжатие. HAProxy — правильный выбор для всех, кому нужен балансировщик нагрузки и прокси-сервер, быстрый и легкий, с небольшим объемом памяти и низкой загрузкой ЦП. Haproxy может работать в режиме TCP уровня 4 и в режиме HTTP уровня 7. Nginx поддерживает только режим HTTP уровня 7 с HAProxy. Если вы хотите использовать режим TCP уровня 4, вы можете использовать другие веб-серверы, такие как apache. В CentOS 7 HAProxy доступен в репозитории по умолчанию. Его легко установить и настроить.