Перейти к содержанию
IPS Invision Community 🇷🇺
  • Как установить HAProxy на CentOS 8

    Как установить HAProxy на CentOS 8

    Чтобы узнать актуальную версию, выполните следующую команду:

    sudo yum info haproxy

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

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

    sudo yum install gcc pcre-devel tar make -y

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

    wget http://www.haproxy.org/download/2.3/src/haproxy-2.3.5.tar.gz -O ~/haproxy.tar.gz

    После завершения загрузки распакуйте файлы с помощью приведенной ниже команды:

    tar xzvf ~/haproxy.tar.gz -C ~/

    Перейдите в распакованный каталог с исходниками:

    cd ~/haproxy-2.3.5

    Затем скомпилируйте программу под вашу систему:

    make TARGET=linux-glibc

    И, наконец, установите саму HAProxy:

    sudo make install

    Теперь HAProxy установлена, но для ее работы требуются некоторые дополнительные манипуляции. Продолжим настройку программного обеспечения и сервисов ниже.

    Настройка HAProxy под ваш сервер

    Теперь добавьте следующие каталоги и файл статистики для записей HAProxy:

    sudo mkdir -p /etc/haproxy
    sudo mkdir -p /var/lib/haproxy 
    sudo touch /var/lib/haproxy/stats

    Создайте символьную ссылку для двоичных файлов, чтобы вы могли запускать команды HAProxy от имени обычного пользователя:

    sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

    Если вы хотите добавить прокси-сервер в систему в качестве службы, скопируйте файл haproxy.init из examples в свой каталог /etc/init.d. Отредактируйте права доступа к файлу, чтобы скрипт выполнялся, а затем перезагрузите демон systemd:

    sudo cp ~/haproxy-2.3.5/examples/haproxy.init /etc/init.d/haproxy
    sudo chmod 755 /etc/init.d/haproxy
    sudo systemctl daemon-reload

    Вам также необходимо разрешить службе автоматическую перезагрузку при запуске системы:

    sudo chkconfig haproxy on

    В целях удобства также рекомендуется добавить нового пользователя для запуска HAProxy:

    sudo useradd -r haproxy

    После этого вы можете еще раз проверить номер установленной версии с помощью следующей команды:

    haproxy -v
    HA-Proxy version 2.3.5 2021/02/06 - https://haproxy.org/

    В нашем случае версия должна быть 2.3.5, как показано в примере вывода выше.

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

    sudo firewall-cmd --permanent --zone=public --add-service=http
    sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
    sudo firewall-cmd --reload

    Настройка балансировщика нагрузки

    Настройка HAProxy — довольно простой процесс. По сути, всё, что вам нужно сделать, это сообщить HAProxy, какие соединения он должен прослушивать и куда следует их ретранслировать.

    Это делается путем создания файла конфигурации /etc/haproxy/haproxy.cfg с определяющими настройками. Вы можете почитать о параметрах конфигурации HAProxy на странице документации, если хотите узнать об этом больше.

    Балансировка нагрузки на транспортном уровне (layer 4)

    Начнем с базовой настройки. Создайте новый файл конфигурации, например, используя vi с командой ниже:

    sudo vi /etc/haproxy/haproxy.cfg

    Добавьте в файл следующие разделы. Замените server_name тем, что должно вызывать ваши сервера на странице статистики, а private_ip — приватными IP-адресами серверов, на которые вы хотите направлять веб-трафик.

    global
       log /dev/log local0
       log /dev/log local1 notice
       chroot /var/lib/haproxy
       stats timeout 30s
       user haproxy
       group haproxy
       daemon
    
    defaults
       log global
       mode http
       option httplog
       option dontlognull
       timeout connect 5000
       timeout client 50000
       timeout server 50000
    
    frontend http_front
       bind *:80
       stats uri /haproxy?stats
       default_backend http_back
    
    backend http_back
       balance roundrobin
       server server_name1 private_ip1:80 check
       server server_name2 private_ip2:80 check

    Это определяет балансировщик нагрузки транспортного уровня (layer 4) с внешним именем http_front, прослушивающий порт 80, который затем направляет трафик к бэкенду по умолчанию с именем http_back. Дополнительная статистика /haproxy?stats подключает страницу статистики по указанному адресу.

    Различные алгоритмы балансировки нагрузки.

    Указание серверов в разделе бэкенда позволяет HAProxy использовать эти серверы для балансировки нагрузки в соответствии с алгоритмом циклического перебора, когда это возможно.

    Алгоритмы балансировки используются для определения того, на какой сервер в бэкенде передается каждое соединение. Вот некоторые из полезных опций:

    • Roundrobin: каждый сервер используется по очереди в соответствии со своим весом. Это самый плавный и честный алгоритм, когда время обработки серверами остается равномерно распределенным. Этот алгоритм является динамическим, что позволяет регулировать вес сервера на лету.
    • Leastconn: выбирается сервер с наименьшим количеством соединений. Циклический перебор выполняется между серверами с одинаковой нагрузкой. Использование этого алгоритма рекомендуется для длинных сеансов, таких как LDAP, SQL, TSE и т. д., но он не очень подходит для коротких сеансов, таких как HTTP.
    • First: первый сервер с доступными слотами для подключения получает соединение. Серверы выбираются от самого низкого числового идентификатора до самого высокого, который по умолчанию соответствует положению сервера в ферме. Как только сервер достигает значения maxconn, используется следующий сервер.
    • Source: IP-адрес источника хешируется и делится на общий вес запущенных серверов, чтобы определить, какой сервер будет получать запрос. Таким образом, один и тот же IP-адрес клиента будет всегда доставаться одному и тому же серверу, в то время как серверы остаются неизменными.

    Настройка балансировки нагрузки на прикладном уровне (layer 7)

    Еще одна доступная возможность — настроить балансировщик нагрузки для работы на прикладном уровне (layer 7), что полезно, когда части вашего веб-приложения расположены на разных хостах. Это может быть достигнуто путем регулирования передачи соединения, например, по URL.

    Откройте файл конфигурации HAProxy с помощью текстового редактора:

    sudo vi /etc/haproxy/haproxy.cfg

    Затем настройте сегменты фронтенд и бэкенд в соответствии с примером ниже:

    frontend http_front
       bind *:80
       stats uri /haproxy?stats
       acl url_blog path_beg /blog
       use_backend blog_back if url_blog
       default_backend http_back
    
    backend http_back
       balance roundrobin
       server server_name1 private_ip1:80 check
       server server_name2 private_ip2:80 check
    
    backend blog_back
       server server_name3 private_ip3:80 check

    Фронтенд объявляет правило ACL с именем url_blog, которое применяется ко всем соединениям с путями, начинающимися с /blog. Use_backend определяет, что соединения, соответствующие условию url_blog, должны обслуживаться бэкендом с именем blog_back, а все остальные запросы обрабатываются бэкендом по умолчанию.

    Со стороны бэкенда конфигурация устанавливает две группы серверов: http_back, как и раньше, и новую, называемую blog_back, которая обслуживает соединения с example.com/blog.

    После изменения настроек сохраните файл и перезапустите HAProxy с помощью следующей команды:

    sudo systemctl restart haproxy

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

    Тестирование настройки

    Когда HAProxy настроен и запущен, откройте публичный IP-адрес сервера балансировщика нагрузки в браузере и проверьте, правильно ли вы подключились к бэкенду. Параметр stats uri в конфигурации создает страницу статистики по указанному адресу.

    http://load_balancer_public_ip/haproxy?stats

    Когда вы загружаете страницу статистики, если все ваши серверы отображаются зеленым, то настройка прошла успешно!

    _6ltthouvogf3xdwdbhabf0gf7o.png

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

    Если ваш балансировщик нагрузки не отвечает, убедитесь, что HTTP-соединения не блокируются файрволом. Также убедитесь, что HAProxy работает с помощью команды ниже:

    sudo systemctl status haproxy

    Защита страницы статистики с помощью пароля

    Однако, если страница статистики просто указана во фронтенде, то она открыта для всеобщего обозрения, что может оказаться не очень хорошей идеей. Вместо этого вы можете назначить ей собственный номер порта, добавив приведенный ниже пример в конец вашего файла haproxy.cfg. Замените username и password на что-нибудь безопасное:

    listen stats
       bind *:8181
       stats enable
       stats uri /
       stats realm Haproxy\ Statistics
       stats auth username:password

    После добавления новой группы слушателей удалите старую ссылку на stats uri из фронтенд группы. Когда закончите, сохраните файл и перезапустите HAProxy.

    sudo systemctl restart haproxy

    Затем снова откройте балансировщик нагрузки с новым номером порта и войдите в систему с именем пользователя и паролем, которые вы указали в файле конфигурации.

    http://load_balancer_public_ip:8181

    Убедитесь, что все ваши серверы по-прежнему отображаются зеленым, а затем откройте только IP балансировщика нагрузки без каких-либо номеров портов в вашем браузере.

    http://load_balancer_public_ip/

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

    Было ли это полезно?

    qwert

    Обратная связь

    Рекомендуемые комментарии

    Комментариев нет



    Создайте учетную запись или войдите, чтобы комментировать

    Вы должны быть пользователем, чтобы оставить комментарий

    Создать аккаунт

    Зарегистрируйтесь для получения аккаунта. Это просто!

    Зарегистрировать аккаунт

    Войти

    Уже зарегистрированы? Войдите здесь.

    Войти
×
×
  • Создать...
Вверх
Вверх