Перевод статьи был подготовлен до начала курса.
«Администратор Linux. Виртуализация и кластеризация»
Балансировка нагрузки — это распространенное решение для горизонтального масштабирования веб-приложений на нескольких хостах, предоставляя пользователям единую точку доступа к сервису.
HAProxy — одно из самых популярных программ балансировки нагрузки с открытым исходным кодом, которое также обеспечивает высокую доступность и функциональность прокси.
HAProxy стремится оптимизировать использование ресурсов, максимизировать пропускную способность, минимизировать время отклика и избежать перегрузки любого отдельного ресурса.
Его можно установить на различные дистрибутивы Linux, например на CentOS 8, на которой мы сосредоточимся в этом руководстве, а также на системы Дебиан 8 И Убунту 16 .
HAProxy особенно подходит для веб-сайтов с очень высоким трафиком и поэтому часто используется для повышения надежности и производительности конфигураций веб-сервисов с несколькими серверами.
В этом руководстве описаны шаги по настройке HAProxy в качестве балансировщика нагрузки на облачном хосте CentOS 8, который затем направляет трафик на ваши веб-серверы.
В качестве предварительного условия для достижения наилучших результатов у вас должно быть как минимум два веб-сервера и сервер балансировки нагрузки.
На веб-серверах должен быть запущен хотя бы базовый веб-сервис, такой как nginx или httpd, чтобы можно было протестировать балансировку нагрузки между ними.
Установка HAProxy на CentOS 8
Поскольку HAProxy — это быстро развивающееся приложение с открытым исходным кодом, дистрибутив, доступный вам в стандартных репозиториях CentOS, может быть не последней версией.Чтобы узнать текущую версию, выполните следующую команду:
HAProxy всегда предоставляет на выбор три стабильные версии: две самые последние поддерживаемые версии и третью, более старую версию, которая все еще получает критические обновления.sudo yum info haproxy
Вы всегда можете проверить последнюю стабильную версию, указанную на веб-сайте HAProxy, а затем решить, с какой версией вы хотите работать.
В этом руководстве мы будем устанавливать последнюю стабильную версию 2.0, которая на момент написания руководства еще не была доступна в стандартных репозиториях.
Вам нужно будет установить его из оригинального источника.
Но сначала проверьте, выполнены ли у вас необходимые условия для загрузки и компиляции программы.
sudo yum install gcc pcre-devel tar make -y
Загрузите исходный код, используя команду ниже.
Вы можете проверить, доступна ли более новая версия на Страница загрузки HAProxy .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
После завершения загрузки извлеките файлы с помощью команды ниже: tar xzvf ~/haproxy.tar.gz -C ~/
Перейдите в распакованную директорию с исходниками: cd ~/haproxy-2.0.7
Затем скомпилируйте программу для вашей системы: 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 из примеров в каталог /etc/init.d. Измените права доступа к файлу, чтобы скрипт запускался, а затем перезапустите демон systemd:
sudo cp ~/haproxy-2.0.7/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.0.7 2019/09/27 - https://haproxy.org/
В нашем случае версия должна быть 2.0.7, как показано в примере выше.
Наконец, брандмауэр по умолчанию в 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. на странице документации если вы хотите узнать об этом больше.
Балансировка нагрузки на транспортном уровне (уровень 4)
Начнем с базовой настройки.
Создайте новый файл конфигурации, например, используя ви с помощью команды ниже: sudo vi /etc/haproxy/haproxy.cfg
Добавьте в файл следующие разделы.
Заменять имя сервера как должны вызываться ваши серверы на странице статистики, и частный_ip — частные IP-адреса серверов, на которые вы хотите направлять веб-трафик.
Вы можете проверить частные IP-адреса на панели управления UpCloud и на вкладке Частная сеть в меню Сеть .
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
Это определяет балансировщик нагрузки транспортного уровня (уровень 4) с внешним именем http_front, прослушивающий порт 80, который затем перенаправляет трафик на серверную часть по умолчанию с именем http_back. Дополнительная статистика /haproxyЭstats подключает страницу статистики по указанному адресу.
Различные алгоритмы балансировки нагрузки.
Указание серверов в разделе backend позволяет HAProxy использовать эти серверы для балансировки нагрузки в соответствии с циклическим алгоритмом, когда это возможно.
Алгоритмы балансировки используются для определения того, какому серверу в серверной части передается каждое соединение.
Вот несколько полезных опций:
- По-круговой: Каждый сервер используется по очереди в зависимости от его веса.
Это самый плавный и справедливый алгоритм, когда время обработки серверов распределяется равномерно.
Этот алгоритм является динамическим, что позволяет регулировать вес сервера на лету.
- Минимальное подключение: выбирается сервер с наименьшим количеством подключений.
Раунд-робин выполняется между серверами с одинаковой нагрузкой.
Использование этого алгоритма рекомендуется для длинных сеансов, таких как LDAP, SQL, TSE и т. д., но он не очень подходит для коротких сеансов, таких как HTTP.
- Первый: Соединение получает первый сервер с доступными слотами подключения.
Серверы выбираются от наименьшего числового идентификатора до наибольшего, который по умолчанию соответствует положению сервера в ферме.
Как только сервер достигает maxconn, используется следующий сервер.
- Источник: Исходный IP-адрес хешируется и делится на общий вес работающих серверов, чтобы определить, какой сервер получит запрос.
Таким образом, один и тот же IP-адрес клиента всегда будет передаваться на один и тот же сервер, а серверы останутся прежними.
Настройка балансировки нагрузки на уровне приложения (уровень 7)
Другой доступный вариант — настроить балансировщик нагрузки для работы на уровне приложения (уровень 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
Если при загрузке страницы статистики все ваши серверы горят зеленым цветом, значит, настройка прошла успешно!
Страница статистики содержит полезную информацию для отслеживания ваших веб-хостов, включая время включения/выключения и количество сеансов.
Если сервер отмечен красным, убедитесь, что сервер включен и что вы можете проверить его связь с компьютером балансировщика нагрузки.
Если ваш балансировщик нагрузки не отвечает, убедитесь, что HTTP-соединения не блокируются брандмауэром.
Также убедитесь, что HAProxy работает, используя команду ниже: sudo systemctl status haproxy
Защита страницы статистики паролем
Однако если страница статистики просто указана во внешнем интерфейсе, то она открыта для просмотра всеми, что может быть не очень хорошей идеей.
Вместо этого вы можете назначить ему собственный номер порта, добавив приведенный ниже пример в конец файла haproxy.cfg. Заменять имя пользователя И пароль для чего-то безопасного: listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy\ Statistics
stats auth username:password
После добавления новой группы прослушивателей удалите старую ссылку uri статистики из группы внешнего интерфейса.
По завершении сохраните файл и перезапустите HAProxy. sudo systemctl restart haproxy
Затем снова откройте балансировщик нагрузки с новым номером порта и войдите в систему, используя имя пользователя и пароль, указанные в файле конфигурации.
http://load_balancer_public_ip:8181
Убедитесь, что все ваши серверы по-прежнему отображаются зеленым, а затем откройте в браузере только IP-адрес балансировщика нагрузки без номеров портов.
http://load_balancer_public_ip/
Если у вас есть хотя бы несколько различных целевых страниц на ваших внутренних серверах, вы заметите, что каждый раз, когда вы перезагружаете страницу, вы получаете ответ от другого хоста.
Вы можете попробовать разные алгоритмы балансировки в разделе конфигурации или посмотреть полная документация .
Заключение: балансировщик нагрузки HAProxy
Поздравляем с успешной настройкой балансировщика нагрузки HAProxy! Даже с помощью базовой настройки балансировки нагрузки вы можете значительно повысить производительность и доступность вашего веб-приложения.Это руководство представляет собой лишь введение в балансировку нагрузки с помощью HAProxy, который способен на гораздо больше, чем можно описать в руководстве по быстрой настройке.
Мы рекомендуем поэкспериментировать с различными конфигурациями, используя обширная документация , доступный для HAProxy, а затем начните планировать балансировку нагрузки для вашей производственной среды.
Используя несколько хостов для защиты вашего веб-сервиса с запасом по запасу, сам балансировщик нагрузки все равно может представлять собой точку отказа.
Вы можете еще больше повысить уровень доступности, установив плавающий IP-адрес между несколькими балансировщиками нагрузки.
Подробнее об этом вы можете узнать в нашем статья о плавающих IP-адресах на UpCloud .
Подробнее о курсе «Администратор Linux. Виртуализация и кластеризация» ***
Теги: #linux #Оптимизация сервера #Системное администрирование #Администрирование сервера #балансировка нагрузки #Конфигурация Linux #haproxy #centos #балансировщик нагрузки
-
Гассенди, Пьер
19 Oct, 24 -
Наш Сайт
19 Oct, 24 -
Фитцпатрик Опубликовал Api Social Graph
19 Oct, 24 -
Почему Idea Лучше Eclipse
19 Oct, 24 -
Как Же Обойтись Без 1С?
19 Oct, 24