Преводът на статията е подготвен в очакване на старта на курса

Балансировката на натоварването е разпространено решение за хоризонтално мащабиране на уеб приложения през няколко хоста, предоставяйки на потребителите единна точка за достъп до услугата. е една от най-популярните програми за балансировка на натоварването с отворен код, която също така осигурява висока наличност и функционалност на проксито.
HAProxy се стреми да оптимизира използването на ресурсите, максимизира пропускната способност, минимизира времето за реакция и избягва пренатоварването на всеки отделен ресурс. Тя може да бъде инсталирана на множество дистрибуции на Linux, като CentOS 8, на която ще се спрем в този наръчник, а също и в системи и .

HAProxy е особено подходяща за уеб сайтове с много висок трафик и затова често се използва за повишаване на надеждността и производителността на конфигурации на уеб услуги с множество сървъри. В този наръчник са изложени стъпките за настройка на HAProxy като балансировчик на натоварване на облачен хост CentOS 8, който след това насочва трафика към вашите уеб сървъри.
Като необходимо условие за постигане на най-добри резултати трябва да имате поне два уеб сървъра и сървър за балансировка на натоварването. На уеб сървърите трябва да бъде инсталирана поне основна уеб услуга, като nginx или httpd, за да можете да проверите балансировката на натоварването между тях.
Инсталиране на HAProxy на CentOS 8
Поради факта, че HAProxy е бързо развиващо се приложение с отворен код, дистрибуцията, която е достъпна за вас в стандартните репозитории на CentOS, може да не е най-новата версия. За да проверите текущата версия, изпълнете следната команда:
sudo yum info haproxyHAProxy винаги предоставя на избор три стабилни версии: две най-нови поддържани версии и трета, по-стара, която все още получава критични актуализации. Винаги можете да проверите най-новата стабилна версия, посочена на сайта на HAProxy, и после да решите с коя версия искате да работите.
В това ръководство ще инсталираме най-новата стабилна версия 2.0, която не е била налична в стандартните репозитории по време на написването на ръководството. Ще трябва да я инсталирате от първоизточника. Но първо проверете дали имате необходимите условия за сваляне и компилиране на програмата.
sudo yum install gcc pcre-devel tar make -yСвалете изходния код с помощта на командата по-долу. Можете да проверите дали съществува по-нова версия, налична на .
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 от examples във вашата директория /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 , ако искате да научите повече за това.
Балансировка на натоварването на транспортно ниво (layer 4)
Нека започнем с основната настройка. Създайте нов конфигурационен файл, например, използвайки vi с командата по-долу:
sudo vi /etc/haproxy/haproxy.cfgДобавете в файла следните секции. Заменете server_name с това, което трябва да извиква вашите сървъри на статистическата страница, а private_ip — частни IP адреси на сървърите, на които искате да насочите уеб трафика. Можете да проверите частните IP адреси и на таба Private network в менюто Мрежа.
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.
- Първи: първият сървър с налични слотове за свързване получава връзката. Сървърите се избират от най-ниския числов идентификатор до най-високия, който по подразбиране съответства на позицията на сървъра във фермата. Когато сървърът достигне стойността maxconn, се използва следващият сървър.
- Източник: IP адресът на източника се хешира и разделя на общото тегло на активните сървъри, за да се определи кой сървър ще получи заявката. По този начин един и същи клиентски IP адрес винаги ще попада на един и същ сървър, докато сървърите остават непроменени.
Настройка на балансираща система на ниво приложение (слой 7)
Още една налична опция е да настроите балансираща система да работи на ниво приложение (слой 7), което е полезно, когато части от вашето уеб приложение са разположени на различни хостове. Това може да бъде постигнато чрез регулиране на предаване на връзката, например, по URL.
Отворете конфигурационния файл на HAProxy с текстов редактор:
sudo vi /etc/haproxy/haproxy.cfgСлед това настройте сегментите frontend и backend в съответствие с примера по-долу:
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, трябва да се обслужват от backend с име blog_back, а всички останали заявки се обработват от backend по подразбиране.
От страна на backend конфигурацията задава две групи сървъри: 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. Заменете 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/Ако на вашите вътрешни сървъри има поне малко разнообразие на целеви страници, ще забележите, че всеки път, когато презаредите страницата, получавате отговор от друг хост. Можете да опитате различни алгоритми за балансировка в секцията за конфигурация или да се запознаете с .
Заключение: Балансировчик за натоварване HAProxy
Поздравления за успешната настройка на балансировчика за натоварване HAProxy! Дори с основната настройка за балансировка, можете значително да увеличите производителността и достъпността на вашето уеб приложение. Това ръководство е само въведение в балансировката на натоварването с HAProxy, която може да направи много повече от това, което може да се опише в кратка инструкция за настройка. Препоръчваме да експериментирате с различни конфигурации с помощта на , налична за HAProxy, и след това да започнете планирането на балансировката на натоварването за вашата производствена среда.
Използването на няколко хоста за защита на уеб услугата ви с резервна мощност не елиминира риска, че самият балансировчик може да бъде точка на отказ. Можете да увеличите наличността, като установите плаващ IP адрес между няколко балансировчици. Можете да научите повече за това в нашата .
Повече информация за курса ***
Източник: habr.com
