Насб кардани мувозинати сарбории 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-ро аз мисолҳо ба феҳристи /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

Танзимоти мувозинати сарборӣ

Насб кардани HAProxy як раванди хеле содда аст. Аслан, танҳо ба шумо лозим аст, ки ба HAProxy бигӯед, ки он бояд кадом пайвастҳоро гӯш кунад ва онҳоро ба куҷо интиқол диҳад.

Ин тавассути сохтани файли конфигуратсияи /etc/haproxy/haproxy.cfg бо танзимоти муайян анҷом дода мешавад. Шумо метавонед дар бораи имконоти конфигуратсияи HAProxy хонед дар саҳифаи ҳуҷҷатҳоагар шумо хоҳед, ки дар бораи он маълумоти бештар гиред.

Мувозинати сарборӣ дар қабати нақлиёт (қабати 4)

Биёед бо танзимоти асосӣ оғоз кунем. Эҷоди як файли конфигуратсияи нав, масалан, истифода vi бо фармони зерин:

sudo vi /etc/haproxy/haproxy.cfg

Ба файл қисмҳои зеринро илова кунед. Иваз кардан номи_ сервер чӣ бояд серверҳои худро дар саҳифаи омор даъват, ва 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

Ин мувозинати сарбории қабати нақлиётиро (қабати 4) муайян мекунад, ки берун аз он http_front гӯш мекунад, ки дар порти 80 ном дорад, ки пас аз он трафикро ба пуштибонии пешфарз бо номи http_back интиқол медиҳад. Омори иловагӣ /haproxy?stats саҳифаи оморро ба суроғаи муқарраршуда пайваст мекунад.

Алгоритмҳои гуногуни мувозинати сарборӣ.

Муайян кардани серверҳо дар бахши пуштибонӣ ба HAProxy имкон медиҳад, ки ин серверҳоро барои мувозинати сарборӣ мувофиқи алгоритми мудаввар ҳангоми имконпазир истифода барад.

Алгоритмҳои мувозинатӣ барои муайян кардани он, ки ҳар як пайвастшавӣ ба кадом сервери пуштибонӣ интиқол дода мешавад, истифода мешавад. Инҳоянд баъзе аз имконоти муфид:

  • Раундробин: Ҳар як сервер бо навбат мувофиқи вазни худ истифода мешавад. Ин ҳамвортарин ва одилонатарин алгоритми вақтест, ки вақти коркарди серверҳо баробар тақсим карда мешавад. Ин алгоритм динамикӣ буда, имкон медиҳад, ки вазни сервер ҳангоми парвоз танзим карда шавад.
  • Leastconn: сервер бо камтарин пайваст интихоб карда мешавад. Раунд дар байни серверҳо бо ҳамон сарборӣ анҷом дода мешавад. Истифодаи ин алгоритм барои сеансҳои тӯлонӣ, аз қабили 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

Вақте ки шумо саҳифаи оморро бор мекунед, агар ҳамаи серверҳои шумо сабз нишон дода шаванд, пас насбкунӣ муваффақ буд!

Насб кардани мувозинати сарбории 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

Пас аз илова кардани гурӯҳи шунавандагони нав, истиноди кӯҳнаи uri омориро аз гурӯҳи фронтенд хориҷ кунед. Пас аз анҷом, файлро захира кунед ва HAProxy-ро аз нав оғоз кунед.

sudo systemctl restart haproxy

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

http://load_balancer_public_ip:8181

Боварӣ ҳосил кунед, ки ҳама серверҳои шумо то ҳол сабз нишон медиҳанд ва пас танҳо IP-и тавозуни сарборро бидуни рақамҳои порт дар браузери шумо кушоед.

http://load_balancer_public_ip/

Агар шумо дар серверҳои паси худ ҳадди аққал якчанд саҳифаҳои кушода дошта бошед, шумо хоҳед дид, ки ҳар дафъае, ки саҳифаро аз нав бор мекунед, шумо аз хости дигар посух мегиред. Шумо метавонед алгоритмҳои гуногуни мувозинатро дар бахши конфигуратсия санҷед ё санҷед ҳуҷҷатҳои пурра.

Хулоса: HAProxy Load Balancer

Табрик мекунем, ки бомуваффақият насб кардани баланси сарбории HAProxy-и шумо! Ҳатто бо танзимоти асосии мувозинати сарборӣ, шумо метавонед фаъолият ва дастрасии барномаи веби худро ба таври назаррас беҳтар кунед. Ин дастур танҳо як муқаддима барои мувозинати сарборӣ бо HAProxy аст, ки қодир аст аз он чизе, ки дар дастури танзимоти фаврӣ фаро гирифта шудааст, хеле бештарро иҷро кунад. Мо тавсия медиҳем, ки бо истифода аз конфигуратсияҳои гуногун озмоиш кунед ҳуҷҷатҳои васеъ, барои HAProxy дастрас аст ва сипас банақшагирии мувозинати сарборӣ барои муҳити истеҳсолии шумо оғоз кунед.

Бо истифода аз ҳостҳои сершумор барои муҳофизат кардани хидмати веби шумо бо баландии ҷой, худи тавозуни сарборӣ метавонад то ҳол нуқтаи нокомиро пешниҳод кунад. Шумо метавонед дастрасии баландро тавассути насб кардани IP-и шинокунанда дар байни мутавозингарони сершумори сарборӣ беҳтар созед. Шумо метавонед дар ин бора дар мо маълумоти бештар гиред мақола дар бораи суроғаҳои шинокунандаи IP дар UpCloud.

Бештар дар бораи курс "Администратори Linux. Виртуализатсия ва кластерсозӣ"***

Манбаъ: will.com

Илова Эзоҳ