Усталёўваны балансавальнік нагрузкі 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 і на ўкладцы прыватная сетка у меню сетка.

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

Калі вы загружаеце старонку статыстыкі, калі ўсе вашыя серверы адлюстроўваюцца зялёным, то настройка прайшла паспяхова!

Усталёўваны балансавальнік нагрузкі HAProxy на CentOS

Старонка статыстыкі змяшчае некаторую карысную інфармацыю для адсочвання вашых вэб-хастоў, у тым ліку час працы/прастою і колькасць сеансаў. Калі сервер пазначаны чырвоным, пераканайцеся, што сервер уключаны і што вы можаце прапінгаваць яго з машыны балансавання нагрузкі.

Калі ваш балансавальнік нагрузкі не адказвае, пераканайцеся, што 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, якая здольная на значна большае, чым тое, што можна апісаць у кароткай інструкцыі па наладзе. Мы рэкамендуем паэксперыментаваць з рознымі канфігурацыямі з дапамогай шырокай дакументацыі, даступнай для HAProxy, а затым прыступіць да планавання балансавання нагрузкі для вашай вытворчай асяроддзя.

Выкарыстоўваючы некалькі хастоў для абароны вашага вэб-сэрвісу з дапамогай запасу магутнасці, сам балансавальнік нагрузкі ўсё роўна можа ўяўляць кропку адмовы. Вы можаце яшчэ больш павысіць высокую даступнасць, усталяваўшы плывучы IP паміж некалькімі балансавальнікамі нагрузкі. Вы можаце даведацца больш пра гэта ў нашай артыкуле аб плаваючых IP-адрасах на UpCloud.

Падрабязней аб курсе «Адміністратар Linux. Віртуалізацыя і кластарызацыя»***

Крыніца: habr.com

Дадаць каментар