Инсталиране на HAProxy Load Balancer на CentOS

Преводът на статията беше подготвен в навечерието на началото на курса Linux администратор. Виртуализация и групиране»

Инсталиране на HAProxy Load Balancer на CentOS

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

HAProxy има за цел да оптимизира използването на ресурсите, да увеличи максимално пропускателната способност, да сведе до минимум времето за реакция и да избегне претоварването на всеки отделен ресурс. Може да се инсталира на различни дистрибуции на Linux, като CentOS 8, върху която ще се съсредоточим в това ръководство, както и системи Debian 8 и Ubuntu 16.

Инсталиране на HAProxy Load Balancer на CentOS

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

Изтеглете изходния код, като използвате командата по-долу. Можете да проверите дали има налична по-нова версия на Страница за изтегляне на 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)

Да започнем с основната настройка. Създайте нов конфигурационен файл, например като използвате vi с командата по-долу:

sudo vi /etc/haproxy/haproxy.cfg

Добавете следните раздели към файла. Сменете Име на сървъра този, който трябва да извика вашите сървъри на страницата със статистически данни, и private_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 свързва страницата със статистика с посочения адрес.

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

Посочването на сървъри в бекенд секцията позволява на 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

Когато заредите страницата със статистика, ако всичките ви сървъри са зелени, тогава настройката е успешна!

Инсталиране на HAProxy Load Balancer на CentOS

Страницата със статистически данни съдържа полезна информация за проследяване на вашите уеб хостове, включително време на работа/неактивност и брой сесии. Ако сървърът е маркиран в червено, уверете се, че сървърът работи и че можете да го изпратите чрез 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, което е способно на много повече от това, което може да бъде описано в кратко ръководство за настройка. Препоръчваме да експериментирате с различни конфигурации обширна документациядостъпни за HAProxy и след това започнете да планирате балансиране на натоварването за вашата производствена среда.

Чрез използването на множество хостове за защита на вашата уеб услуга с капацитет, самият балансьор на натоварването все още може да представлява точка на повреда. Можете допълнително да подобрите високата наличност, като зададете плаващ IP между множество балансиращи устройства. Можете да научите повече за това в нашия статия за плаващите IP адреси в UpCloud.

Повече за курса Linux администратор. Виртуализация и групиране»***

Източник: www.habr.com

Добавяне на нов коментар