Пераклад артыкула падрыхтаваны напярэдадні старту курса
Балансаванне нагрузкі - гэта распаўсюджанае рашэнне для гарызантальнага маштабавання вэб-прыкладанняў па некалькіх хастам з прадастаўленнем карыстальнікам адзінай кропкі доступу да сэрвісу.
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 з 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-адрасы
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-адрас кліента будзе заўсёды даставацца аднаму і таму ж серверу, у той час як серверы застаюцца нязменнымі.
Настройка балансавання нагрузкі на прыкладным узроўні (layer 7)
Яшчэ адна даступная магчымасць - наладзіць балансавальнік нагрузкі для працы на прыкладным узроўні (layer 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
Пасля дадання новага гурта слухачоў выдаліце старую спасылку на stats uri з фронтэнд гурта. Калі скончыце, захавайце файл і перазапусціце HAProxy.
sudo systemctl restart haproxy
Затым зноў адкрыйце балансавальнік нагрузкі з новым нумарам порта і ўвайдзіце ў сістэму з імем карыстальніка і паролем, якія вы паказалі ў файле канфігурацыі.
http://load_balancer_public_ip:8181
Пераканайцеся, што ўсе вашы серверы па-ранейшаму адлюстроўваюцца зялёным, а затым адкрыйце толькі IP балансавальніка нагрузкі без якіх-небудзь нумароў партоў у вашым браўзэры.
http://load_balancer_public_ip/
Калі на вашых унутраных серверах ёсць хаця б нейкая разнастайнасць мэтавых старонак, вы заўважыце, што кожны раз, калі вы перазагружаеце старонку, вы атрымліваеце адказ ад іншага хаста. Вы можаце паспрабаваць розныя алгарытмы балансавання ў раздзеле канфігурацыі або азнаёміцца з
Заключэнне: балансавальнік нагрузкі HAProxy
Віншуем з паспяховай настройкай балансавальніка нагрузкі HAProxy! Нават з базавай наладай балансавання нагрузкі вы можаце значна павысіць прадукцыйнасць і даступнасць вашага вэб-дадатку. Гэта кіраўніцтва з'яўляецца толькі увядзеннем у балансаванне нагрузкі з дапамогай HAProxy, якая здольная на значна большае, чым тое, што можна апісаць у кароткай інструкцыі па наладзе. Мы рэкамендуем паэксперыментаваць з рознымі канфігурацыямі з дапамогай
Выкарыстоўваючы некалькі хастоў для абароны вашага вэб-сэрвісу з дапамогай запасу магутнасці, сам балансавальнік нагрузкі ўсё роўна можа ўяўляць кропку адмовы. Вы можаце яшчэ больш павысіць высокую даступнасць, усталяваўшы плывучы IP паміж некалькімі балансавальнікамі нагрузкі. Вы можаце даведацца больш пра гэта ў нашай
Падрабязней аб курсе
Крыніца: habr.com