Балансировщики нагрузки нужны, чтобы оптимизировать использование ресурсов и предотвратить перегрузку мощностей. В этой инструкции будет рассказано, как развернуть балансировщик HAProxy для веб-проекта, расположенного на двух независимых друг от друга серверах.
Что такое HAProxy?
HAProxy — это легковесный балансировщик нагрузки с открытым исходным кодом. Его можно использовать для построения отказоустойчивой инфраструктуры или сокрытия «реального» местоположения проекта по соображениям безопасности. ПО перенаправляет пользовательские запросы согласно правилам, которые задает администратор сайта, и работает по протоколам TCP и HTTP. HAProxy известен по всему миру, его используют такие крупные ИТ-компании, как Twitter, Instagram, Avito, DevianArt, Github, и другие.
Требования к установке
Если вы хотите использовать HAProxy, то необходимо убедиться, что ваша инфраструктура удовлетворяет следующим условиям:
Нужно как минимум три сервера — два из них будут работать в качестве серверов, обслуживающих контент вашего проекта, третий — в качестве балансировщика HAProxy;
Доменное имя с А-записями, «направленными» на IP балансировщика;
Контент вашего веб-сайта должен быть идентичен на обоих веб-серверах.
Настройка сети
Прежде чем приступить к настройке HAProxy, мы должны знать некоторые параметры сети, такие как IP-адреса и имена используемых серверов.
Пошаговая инструкция по настройке сети:
Создайте три сервера через панель управления Serverspace. Два из них будут работать как «бэкенд», третий сервер будет балансировщиком HAProxy. Получившаяся «инфраструктурная» схема отображена ниже.
![](https://habrastorage.org/getpro/habr/upload_files/657/278/3b7/6572783b7c48bf134d154bad816f4654.png)
Добавьте в файлы /etc/hosts на каждом из трех серверов строки, позволяющие «связать» IP-адреса с именами серверов. Затем проверьте доступность серверов, открыв SSH-консоль на haproxy-сервере и отправив несколько ICMP-пакетов
на веб-серверы;
cat <<EOF >> /etc/hosts
<backend_server_one_IP> <backend_server_one_hostname>
<backend_server_two_IP> <backend_server_two_hostname>
<haproxy_server_IP> <haproxy_server_hostname>
EOF
ping <LAN_servers_IPs><lan_servers_ips></lan_servers_ips>
![](https://habrastorage.org/getpro/habr/upload_files/464/47d/984/46447d98442eadc79a70c34543b29c13.png)
Создайте правило брандмауэра, блокирующее весь входящий трафик на веб-серверы, за исключением трафика с haproxy. Опционально, чтобы сделать управление серверами более комфортным, можно добавить в белый список свой собственный IP. Самый простой способ сделать это — зайти в детальные настройки сервера в личном кабинете Serverspace, добавьте правила и нажмите кнопку SAVE. Помните, что разрешающие правила следует располагать выше запрещающих, иначе доступ к серверу будет невозможен.
![](https://habrastorage.org/getpro/habr/upload_files/ebf/985/4f3/ebf9854f3982a91a71777b5835abca25.png)
Развертывание веб-сайта
Если ранее вы внесли свой собственный IP-адрес в белый список, можете воспользоваться самым простым способом развертывания веб-сервера и дальнейшего управления сайтами — установить любую веб-панель, например, HestiaCP. Установите панель на первый «контентный» сервер, как описано здесь, затем авторизуйтесь в панели и, кликнув на Users > Add user, создайте непривилегированного пользователя;
![](https://habrastorage.org/getpro/habr/upload_files/1c9/2d3/fec/1c92d3fecdef29bc7dc31736c42e7704.png)
Авторизуйтесь как этот аккаунт с «пониженными» правами;
![](https://habrastorage.org/getpro/habr/upload_files/787/259/50e/78725950e3423d16052f9ff79d3b7d8f.png)
Создайте веб-сайт через кнопку на панели;
![](https://habrastorage.org/getpro/habr/upload_files/062/8c0/619/0628c0619e9429d013c56e807b062b95.png)
![](https://habrastorage.org/getpro/habr/upload_files/a05/1f2/d88/a051f2d880f092cc8dd665ef5b49ae4f.png)
Повторите развертывание веб-сайта на втором «контентном» сервере;
Настройка HAProxy
Теперь пришло время установки балансировщика:
Авторизуйтесь в SSH-консоли сервера HAProxy, затем обновите существующие пакеты;
apt-get update; apt upgrade -y
![](https://habrastorage.org/getpro/habr/upload_files/39b/89c/193/39b89c193801a9a71c32a4c57d57f173.png)
Запустите установку балансировщика;
apt-get install haproxy -y
![](https://habrastorage.org/getpro/habr/upload_files/b31/86e/8c3/b3186e8c3002e00fb7d35a9ab7b19edc.png)
Отредактируйте конфигурационный файл HAProxy, просто добавьте в него следующие строки;
<span>frontend haproxy_web</span>
<span> bind <IP_сервера_haproxy>:80</span>
<span> default_backend web_back</span>
mode http
<span>backend web_back</span>
<span> balance roundrobin</span>
server <hostname_первого_контентного_сервера> <IP_первого_контентного_сервера>:80
server <hostname_второго_контентного_сервера> <IP_второго_контентного_сервера>:80
![](https://habrastorage.org/getpro/habr/upload_files/4fc/def/b2d/4fcdefb2d458c50de6d96eef8bbb030f.png)
Запустите службу HAProxy и активируйте ее запуск при загрузке;
service haproxy start; systemctl enable haproxy
![](https://habrastorage.org/getpro/habr/upload_files/e68/7bd/4b8/e687bd4b8902f5c67b4a73de98721046.png)
Проверка работы балансировщика
На этом этапе вы можете открыть свой сайт в браузере. Он откроется успешно, но вы все еще не можете быть уверены в штатной работе балансировщика. Для тестирования вы можете сделать следующее:
Войдите на первый веб-сервер через SSH, перейдите в каталог веб-сайта и переименуйте индексный файл;
cd <корневой_каталог_сайта>
mv <индексный_файл> <индексный_файл.bkp>
![](https://habrastorage.org/getpro/habr/upload_files/657/b4d/8f8/657b4d8f82a60a54ece671c429ef948c.png)
Создайте новый индексный файл, содержащий IP-адрес сервера;
echo $(hostname) > <индексный_файл>
![](https://habrastorage.org/getpro/habr/upload_files/72d/646/98a/72d64698acfe03a488cf03da271acf6f.png)
Повторите ту же процедуру на втором веб-сервере;
Откройте свой сайт в браузере, затем несколько раз обновите страницу. Вы увидите несколько отличную информацию. Все нормально, это означает, что балансировщик работает;
![](https://habrastorage.org/getpro/habr/upload_files/c67/928/ce9/c67928ce9cfd0c31b650afe0282b350f.png)
![](https://habrastorage.org/getpro/habr/upload_files/27b/8ef/376/27b8ef376f3ecc4343d95c4bda5a02f8.png)
Верните «исходные» индексные файлы обратно на обоих «контентных» серверах:
rm <index file>
mv <индексный_файл.bkp> <индексный_файл>
![](https://habrastorage.org/getpro/habr/upload_files/b4d/d78/246/b4dd78246e03becb1ac06a2b059dd97c.png)
![](https://habrastorage.org/getpro/habr/upload_files/414/a6f/2e0/414a6f2e04628fc78854ecede68f0491.png)
После прочтения этой статьи вы узнали, что такое HAProxy, и теперь можете установить этот балансировщик нагрузки на свой сервер под управлением Ubuntu 20.04.
Комментарии (4)
c0der
22.10.2022 10:23Извините, но статья называется "как установить балансировщик HaProxy на Ubuntu 20.04". Но в итоге там про какой-то Serverspace. Что это? Это копия статьи из базы знаний хостинга? И если даже просто следовать инструкции, то вряд ли у меня что-то будет работать, если я скопирую конфиг с html тегами.
DmitryShm
А скажите, вы осознанно выбрали HAProxy или так исторически сложилось? Если говорить про web, вроде б nginx должно хватать, даже не nginx plus. Не в первый раз сталкиваюсь с HAProxy, но всё так и не было необходимости его обстоятельного изучения. Всё время nginx выбирался.
d-stream
haproxy на мой взгляд специализирован чуть поуже, но в той же балансировке и l3 и l7 - погибче и единообразнее