HAProxy Урок за начинаещи

Haproxy Urok Za Nacinaesi



Тъй като вашето приложение се мащабира, възниква необходимостта от добавяне на повече сървъри, за да се справят с повече трафик. Колкото повече трафик получава вашето приложение, толкова по-големи са шансовете да се сблъскате с престой, когато сървърът се претовари. Въпреки това има инструменти като HAProxy, които ви позволяват да определите как да се обработва трафикът, за да балансирате натоварването на вашия сървър. Идеята е да се гарантира, че нито един сървър не се претоварва. High Availability Proxy е софтуер с отворен код, който е проектиран да предлага надеждно балансиране на натоварването, като същевременно действа като обратен прокси за TCP/HTTP приложения.

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

Защо да използвате HAProxy

Преди да научите за инсталирането и конфигурацията на HAProxy, трябва да разберете защо се нуждаем от него, благодарение на функциите, които предлага. Следните са основните характеристики на HAProxy:







  1. Балансиране на натоварването - С HAProxy можете удобно да разпределите трафика между различни сървъри, за да избегнете претоварването на един сървър. По този начин приложението ви няма да се сблъска с проблеми с прекъсване и ще постигнете по-бърза реакция, надеждност и наличност.
  2. Регистриране и наблюдение – Ще получите подробни регистрационни файлове за наблюдение за вашите сървъри, за да помогнете при отстраняване на проблеми. Освен това HAProxy има страница със статистически данни, където можете да получите анализ на производителността в реално време за вашия балансьор на натоварването.
  3. Здравни проверки – Дори вашите сървъри изискват проверка на здравето, за да се определи състоянието им. HAProxy често изпълнява проверки на здравето, за да знае състоянието на вашия сървър, за да подобри неговата надеждност. Ако бъде открит нездрав сървър, той пренасочва трафика към друг сървър.
  4. Обратно прокси – Един от начините за повишаване на сигурността е чрез скриване на вътрешната структура. За щастие HAProxy ви позволява да получавате трафика от клиенти и да ги насочвате към подходящи сървъри. По този начин вашата вътрешна структура е скрита от окото на хакера.
  5. ACL (списъци за контрол на достъпа) – С HAProxy можете да определите как трябва да се извършва маршрутизирането на трафика, като използвате различни критерии като пътища, заглавки и IP адреси. По този начин дефинирането на персонализирана логика за маршрутизиране за вашия трафик става по-лесно.
  6. SSL прекратяване – По подразбиране SSL/TLS се разтоварва от бекенд сървърите, което води до намалена производителност. Въпреки това, с HAProxy, прекратяването на SSL/TLS се случва в балансиращото натоварване, разтоварвайки задачата в бекенд сървърите.

Инсталиране на HAProxy

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



Ако използвате системи Ubuntu или Debian, HAProxy може да се инсталира от мениджъра на пакети APT. Изпълнете следната команда:



$ sudo apt актуализация
$ sudo apt инсталирайте haproxy

По същия начин, ако използвате базирани на RHEL системи или CentOS, HAProxy е наличен от мениджъра на пакети „yum“. Изпълнете следните команди:





$ sudo yum актуализация
$ sudo yum инсталирайте haproxy

В нашия случай използваме Ubuntu. Така имаме нашата команда, както следва:



След това можем да проверим неговата версия, за да се уверим, че сме успели да инсталираме успешно HAProxy.

$ haproxy --версия

Как да конфигурирате HAProxy

С инсталиран HAProxy вече можете да отворите неговия конфигурационен файл ( / etc/haproxy/haproxy.cfg) и дефинирайте настройките, които искате да използвате за вашия балансьор на натоварването.

Отворете конфигурационния файл с помощта на редактор като nano или vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Получавате конфигурационен файл като този в следното:

От конфигурационния файл ще забележите, че той идва с два основни раздела:

  1. глобален – Това е първият раздел във файла и стойностите му не трябва да се променят. Той съдържа настройките на процеса, които определят как работи HAProxy. Например, той дефинира детайлите за регистриране и групи или потребители, които могат да изпълняват функциите на HAProxy. Обърнете внимание, че в този конфигурационен файл можете да имате само една глобална секция и нейните стойности трябва да останат непроменени.
  1. по подразбиране – Този раздел съдържа стойностите по подразбиране за възлите. Например, можете да добавите времеви изчаквания или режим на работа за вашия HAProxy в този раздел. Освен това е възможно да имате множество секции по подразбиране във вашия HAProxy конфигурационен файл.

Ето пример за раздел „По подразбиране“:

В даденото изображение режимът определя как вашият HAProxy ще обработва входящите заявки. Можете да зададете режима на HTTP или TCP. Що се отнася до времето за изчакване, то указва колко дълго трябва да чака HAProxy. Например времето за изчакване на връзката е времето за изчакване, преди да се осъществи свързване в задната част. Времето за изчакване на клиента е колко дълго HAProxy трябва да чака клиентът да изпрати данните. Времето за изчакване на сървъра е времето за изчакване съответният сървър да изпрати данните, които ще бъдат препратени към клиента. Начинът, по който определяте стойностите по подразбиране, има голямо значение за подобряване на времето за реакция на вашето приложение.

Има още три раздела, които трябва да дефинирате, за да може вашият балансьор на натоварване да работи според очакванията.

  1. интерфейс – Този раздел съдържа IP адресите, които желаете вашите клиенти да използват за установяване на връзката.
  2. бекенд – Той показва пуловете сървъри, които обработват заявките, както е дефинирано в раздела за интерфейса.
  3. слушам - Използва се последователно, когато искате да маршрутизирате конкретна група сървъри. Този раздел съчетава задачите на фронтенда и бекенда.

Нека имаме пример

За този пример ние дефинираме интерфейса да използва локалния хост с конкретен порт. След това го свързваме с бекенда, който изпълнява localhost и след това стартираме Python сървър, за да тестваме дали всичко работи според очакванията за балансиране на натоварването. Следвайте дадените стъпки.

Стъпка 1: Конфигуриране на секцията по подразбиране

В секцията „По подразбиране“ задаваме стойностите, които да се споделят между възлите. За нашия случай задаваме режима на HTTP и задаваме изчакванията за клиента и сървъра. Можете да регулирате времето според вашите нужди.

Не забравяйте, че всички тези редакции са в конфигурацията на HAProxy, намираща се в „/etc/haproxy/haproxy.cfg“. След като разделът по подразбиране е конфигуриран, нека дефинираме интерфейса.

Стъпка 2: Конфигуриране на Frontend секцията

В раздела за интерфейса ние определяме как искаме приложението или уебсайтът да бъде достъпен от клиентите онлайн. Даваме IP адресите за приложението. Но в този случай работим с локалния хост. Следователно нашият IP адрес е резервният адрес на 127.0.0.1 и искаме да приемем връзките през порт 80.

Трябва да добавите ключовата дума „bind“, която действа като слушател за IP адреса на посочения порт. IP адресът и портът, които дефинирате, са това, което балансиращото натоварване използва, за да приеме входящите заявки.

След като добавим предишните редове във вашия конфигурационен файл, трябва да рестартираме „haproxy.service“ със следната команда:

$ sudo systemctl рестартирайте haproxy

В този момент можем да опитаме да изпратим заявките до нашия уебсайт с помощта на командата „curl“. Изпълнете командата и добавете целевия IP адрес.

$ curl

Тъй като все още не сме определили как ще бъде задната част на нашия HAProxy, получаваме грешка 503, както е показано по-долу. Въпреки че инструментът за балансиране на натоварването успя да получи заявките, в момента няма наличен сървър, който да го обработва, оттук и грешката.

Стъпка 3: Конфигуриране на бекенда

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

Грешката 503, която получихме по-рано, беше, защото нямахме бекенд, който да обработва заявките. Нека започнем, като дефинираме „default_backend“ за обработка на заявките. Вие го дефинирате в раздела за интерфейс. За този случай го нарекохме „linux_backend“.

След това създайте бекенд секция, която има същото име като това, което е дефинирано в предната част. След това трябва да използвате ключовата дума „сървър“, последвана от името на вашия сървър и неговия IP адрес. Следното изображение показва, че сме дефинирали сървъра „linuxhint1“, използвайки IP 127.0.0.1 и порт 8001:

Можете да имате набор от бекенд сървъри, но ние дефинирахме само един за този случай. Уверете се, че сте запазили файла. Трябва отново да рестартираме услугата HAProxy.

За да тестваме създадения HAProxy load balancer, ние създаваме уеб сървър, използващ Python3, за да обвържем задните портове, използвайки IP адреса, който посочихме. Изпълняваме командата, както следва:

$ python3 -m http.server 8001 --bind 127.0.0.1

Уверете се, че сте заменили стойностите, за да съответстват на вашия IP адрес и порта, който искате да обвържете. Забележете как уеб сървърът се създава и слуша за всички входящи заявки.

На друг терминал нека използваме командата „curl“, за да изпратим заявка до сървъра.

$ curl

За разлика от начина, по който получихме грешката 503 по-рано, която показва, че няма наличен сървър за обработка на заявката, този път получаваме изход, който потвърждава, че нашият HAProxy load balancer работи.

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

Ето как можете да зададете прост HAProxy за вашия уебсайт или приложение.

Работа с правила

Преди да приключим с този урок за HAProxy за начинаещи, нека набързо да поговорим за това как можете да дефинирате правилата, които да ръководят как заявките ще бъдат обработени от балансиращото натоварване.

Следвайки същите стъпки като преди, нека оставим раздела по подразбиране непокътнат и да дефинираме различни IP адреси в раздела за интерфейс. Свързваме един и същ IP адрес, но приемаме връзките от различни портове.

Освен това имаме нашия „default_backend“ и друг „use_backend“, който е различен набор от сървъри, които ще използваме в зависимост от порта, от който идват заявките. В следната конфигурация всички заявки през порт 81 се обработват от сървърите в „Linux2_backend“. Всички други заявки се обработват от „default_backend“.

След това създаваме задните секции, както е дефинирано във фронтенда. Обърнете внимание, че за всеки бекенд имаме различен сървър, който определяме да използваме за обработка на заявките.

Бързо рестартирайте услугата HAProxy.

Нека създадем уеб сървъра с помощта на Python3 и да обвържем заявките на порт 8002, който е алтернативният бекенд сървър.

Когато изпращаме заявки към него, ние посочваме порта като 81, за да задействаме балансиращото натоварване да изпраща заявките към алтернативния сървър, който не е този по подразбиране.

Проверявайки отново нашия уеб сървър, можем да видим, че той успява да получи и обработи заявките и дава отговор 200 (успех).

Ето как можете да дефинирате правилата, които да ръководят как вашият балансьор на натоварването ще получава и обработва заявките.

Заключение

HAProxy е идеално решение за балансиране на натоварването за TCP/HTTP приложения. Веднъж инсталиран, можете удобно да редактирате конфигурационния файл, за да дефинирате секциите по подразбиране, интерфейса и задния край, за да ръководите как ще работи вашият балансьор на натоварването. Тази публикация е ръководство за начинаещи за HAProxy. Започна с дефиниране на HAProxy и неговите характеристики. След това се зарови в разбирането как да се конфигурира HAProxy и завърши, като даде пример за това как да се използва HAProxy като балансьор на натоварването.