Преводът на статията беше подготвен в навечерието на началото на курса
Балансирането на натоварването е общоприето решение за мащабиране на уеб приложения в множество хостове, като същевременно предоставя на потребителите една точка за достъп до услуга.
HAProxy има за цел да оптимизира използването на ресурсите, да увеличи максимално пропускателната способност, да сведе до минимум времето за реакция и да избегне претоварването на всеки отделен ресурс. Може да се инсталира на различни дистрибуции на Linux, като CentOS 8, върху която ще се съсредоточим в това ръководство, както и системи
HAProxy е особено подходящ за уебсайтове с много висок трафик и следователно често се използва за подобряване на надеждността и производителността на конфигурации на уеб услуги с множество сървъри. Това ръководство очертава стъпките за настройка на HAProxy като балансьор на натоварването на облачен хост CentOS 8, който след това насочва трафика към вашите уеб сървъри.
Като предпоставка за най-добри резултати трябва да имате поне два уеб сървъра и сървър за балансиране на натоварването. Уеб сървърите трябва да изпълняват поне основна уеб услуга като nginx или httpd, за да проверят балансирането на натоварването между тях.
Инсталиране на HAProxy на CentOS 8
Тъй като HAProxy е бързо развиващо се приложение с отворен код, разпространението, достъпно за вас в стандартните хранилища на CentOS, може да не е най-новата версия. За да разберете най-новата версия, изпълнете следната команда:
sudo yum info haproxy
HAProxy винаги предоставя три стабилни версии за избор: двете най-нови поддържани версии и третата, по-стара версия, която все още получава критични актуализации. Винаги можете да проверите най-новата стабилна версия, посочена на уебсайта на 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 от примери във вашата директория /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)
Да започнем с основната настройка. Създайте нов конфигурационен файл, например като използвате vi с командата по-долу:
sudo vi /etc/haproxy/haproxy.cfg
Добавете следните раздели към файла. Сменете Име на сървъра този, който трябва да извика вашите сървъри на страницата със статистически данни, и private_ip - лични 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
Това дефинира балансьор на натоварването на транспортния слой (слой 4), външно наречен http_front, слушащ на порт 80, който след това насочва трафика към бекенда по подразбиране, наречен http_back. Допълнителна статистика /haproxy?stats свързва страницата със статистика с посочения адрес.
Различни алгоритми за балансиране на натоварването.
Посочването на сървъри в бекенд секцията позволява на HAProxy да използва тези сървъри за балансиране на натоварването според кръговия алгоритъм, когато е възможно.
Алгоритмите за балансиране се използват, за да се определи към кой сървър в бекенда се изпраща всяка връзка. Ето някои от полезните опции:
- Roundrobin: всеки сървър се използва на свой ред според теглото си. Това е най-плавният и справедлив алгоритъм, когато времето за обработка на сървърите остава равномерно разпределено. Този алгоритъм е динамичен, което ви позволява да регулирате теглото на сървъра в движение.
- Най-малко кон: избран е сървърът с най-малко връзки. Round robin се извършва между сървъри с еднакъв товар. Използването на този алгоритъм се препоръчва за дълги сесии като 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
Когато заредите страницата със статистика, ако всичките ви сървъри са зелени, тогава настройката е успешна!
Страницата със статистически данни съдържа полезна информация за проследяване на вашите уеб хостове, включително време на работа/неактивност и брой сесии. Ако сървърът е маркиран в червено, уверете се, че сървърът работи и че можете да го изпратите чрез ping от инструмента за балансиране на натоварването.
Ако вашият балансьор на натоварването не отговаря, уверете се, че 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 Load Balancer
Поздравления за успешното настройване на балансиращото натоварване на HAProxy! Дори с базова настройка за балансиране на натоварването можете значително да подобрите производителността и наличността на вашето уеб приложение. Това ръководство е само въведение в балансирането на натоварването с HAProxy, което е способно на много повече от това, което може да бъде описано в кратко ръководство за настройка. Препоръчваме да експериментирате с различни конфигурации
Чрез използването на множество хостове за защита на вашата уеб услуга с капацитет, самият балансьор на натоварването все още може да представлява точка на повреда. Можете допълнително да подобрите високата наличност, като зададете плаващ IP между множество балансиращи устройства. Можете да научите повече за това в нашия
Повече за курса
Източник: www.habr.com