Преводот на статијата е подготвен во пресрет на почетокот на курсот
Балансирањето на оптоварување е вообичаено решение за хоризонтално скалирање на веб-апликациите низ повеќе хостови додека на корисниците им се обезбедува единствена точка на пристап до услугата.
HAProxy се стреми да го оптимизира користењето на ресурсите, да ја максимизира пропусната моќ, да го минимизира времето на одговор и да избегне преоптоварување на секој поединечен ресурс. Може да се инсталира на различни дистрибуции на Linux, како што е CentOS 8, на кој ќе се фокусираме во овој водич, како и системи
HAProxy е особено погоден за веб-локации со многу висок сообраќај и затоа често се користи за подобрување на доверливоста и перформансите на конфигурациите на веб-услугите со повеќе сервери. Овој водич ги прикажува чекорите за поставување на HAProxy како балансирач на оптоварување на CentOS 8 cloud-домаќин, кој потоа го насочува сообраќајот до вашите веб-сервери.
Како предуслов за најдобри резултати, треба да имате најмалку два веб-сервери и сервер за балансирање на оптоварување. Веб-серверите мора да работат барем со основна веб-услуга како што се 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. Уредете ги дозволите за датотеката така што скриптата ќе работи, а потоа рестартирајте го системскиот демон:
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
Поставување на Load Balancer
Поставувањето на 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 ја поврзува страницата за статистика со наведената адреса.
Различни алгоритми за балансирање на оптоварување.
Специфицирањето на серверите во делот за backend му овозможува на HAProxy да ги користи овие сервери за балансирање на оптоварување според кружен алгоритам кога е можно.
Алгоритмите за балансирање се користат за да се одреди на кој сервер во задниот дел се пренесува секоја врска. Еве некои од корисните опции:
- Раундробин: Секој сервер се користи за возврат според неговата тежина. Ова е најмазниот и најправеден алгоритам кога времето за обработка на серверите останува рамномерно распределено. Овој алгоритам е динамичен, што овозможува приспособување на тежината на серверот во лет.
- Лесткон: се избира серверот со најмалку врски. Round robin се изведува помеѓу сервери со исто оптоварување. Користењето на овој алгоритам се препорачува за долги сесии како LDAP, SQL, TSE итн., но не е многу погоден за кратки сесии како што е HTTP.
- Прво: Првиот сервер со достапни слотови за поврзување ја прима врската. Серверите се избираат од најниската нумеричка ID до највисоката, која стандардно ја поставува позицијата на серверот во фармата. Откако серверот ќе стигне до 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
Кога ја вчитувате страницата за статистика, ако сите ваши сервери се покажат зелено, тогаш поставувањето беше успешно!
Страницата за статистика содржи некои корисни информации за следење на вашите веб-домаќини, вклучувајќи го времето нагоре/надолу и бројот на сесии. Ако серверот е означен со црвено, проверете дали серверот е вклучен и дека можете да го пингувате од машината за балансирање на оптоварување.
Ако вашиот баланс на оптоварување не реагира, проверете дали HTTP-врските не се блокирани од заштитен ѕид. Исто така, проверете дали HAProxy работи користејќи ја командата подолу:
sudo systemctl status haproxy
Заштита на страницата за статистика со лозинка
Меѓутоа, ако страницата за статистика е едноставно наведена на предната страна, тогаш таа е отворена за сите да ја видат, што можеби не е добра идеја. Наместо тоа, можете да му доделите сопствен број на порта со додавање на примерот подолу на крајот од вашата датотека haproxy.cfg. Заменете корисничко име и лозинка за нешто безбедно:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Откако ќе додадете нова група слушатели, отстранете ја старата врска за статистика од предниот дел. Кога ќе завршите, зачувајте ја датотеката и рестартирајте го HAProxy.
sudo systemctl restart haproxy
Потоа повторно отворете го load balancer со новиот број на порта и најавете се со корисничкото име и лозинката што ги наведовте во конфигурациската датотека.
http://load_balancer_public_ip:8181
Осигурајте се дека сите ваши сервери сè уште се прикажуваат зелено, а потоа отворете ја само IP адресата за балансирање на оптоварување без броеви на порти во вашиот прелистувач.
http://load_balancer_public_ip/
Ако имате барем одредена разновидност на целни страници на вашите задни сервери, ќе забележите дека секогаш кога повторно ќе ја вчитате страницата добивате одговор од различен домаќин. Може да пробате различни алгоритми за балансирање во делот за конфигурација или да се проверите
Заклучок: HAProxy Load Balancer
Честитки за успешното поставување на вашиот HAProxy load balancer! Дури и со основно поставување за балансирање на оптоварување, можете значително да ги подобрите перформансите и достапноста на вашата веб-апликација. Овој водич е само вовед во балансирање на вчитување со HAProxy, кој е способен за многу повеќе од она што може да се опфати во водичот за брзо поставување. Препорачуваме да експериментирате со различни конфигурации користејќи
Со користење на повеќе хостови за заштита на вашата веб-услуга со простор за глава, самиот балансирач на оптоварување сè уште може да претставува точка на дефект. Можете дополнително да ја подобрите високата достапност со инсталирање на лебдечка IP адреса помеѓу повеќе балансери на оптоварување. Можете да дознаете повеќе за ова во нашата
Повеќе за курсот
Извор: www.habr.com