Инсталиране на балансировщика на натоварване HAProxy на CentOS

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

Инсталиране на балансировщика на натоварване HAProxy на CentOS

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

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

Инсталиране на балансировщика на натоварване HAProxy на 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 от 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 адреси на контролната панела на UpCloud и на таба 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

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

Инсталиране на балансировщика на натоварване HAProxy на CentOS

Страницата със статистики съдържа полезна информация за проследяване на вашите уеб хостове, включително време на работа/престой и брой сесии. Ако сървърът е отбелязан в червено, уверете се, че сървърът е включен и че можете да го пингнете от машината с балансировчика на натоварването.

Ако вашият балансировчик на натоварването не отговаря, уверете се, че 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 адрес между няколко балансировчици. Можете да научите повече за това в нашата статия за плаващи IP адреси в UpCloud.

Повече информация за курса „Linux администратор. Виртуализация и клъстериране“***

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster