CentOS жүйесінде HAProxy жүктеме балансын орнату

Мақаланың аудармасы курстың басталу қарсаңында дайындалды «Linux әкімшісі. Виртуализация және кластерлеу»

CentOS жүйесінде HAProxy жүктеме балансын орнату

Жүктемені теңестіру – пайдаланушыларға қызметке бір кіру нүктесін бере отырып, бірнеше хосттар бойынша веб-қосымшаларды көлденең масштабтауға арналған жалпы шешім. HAProxy жоғары қолжетімділік пен прокси функционалдығын қамтамасыз ететін ең танымал ашық бастапқы жүктемені теңестіретін бағдарламалық құралдың бірі болып табылады.

HAProxy ресурстарды пайдалануды оңтайландыруға, өткізу қабілеттілігін арттыруға, жауап беру уақытын азайтуға және кез келген жеке ресурсты шамадан тыс жүктеуге жол бермеуге тырысады. Оны әртүрлі Linux дистрибутивтеріне орнатуға болады, мысалы, біз осы нұсқаулықта назар аударатын CentOS 8, сондай-ақ жүйелер Debian 8 и Ubuntu 16.

CentOS жүйесінде HAProxy жүктеме балансын орнату

HAProxy әсіресе трафигі өте жоғары веб-сайттар үшін қолайлы және сондықтан көп серверлік веб-қызмет конфигурацияларының сенімділігі мен өнімділігін арттыру үшін жиі пайдаланылады. Бұл нұсқаулық CentOS 8 бұлттық хостында HAProxy-ді жүктемені теңестіруші ретінде орнату қадамдарын сипаттайды, содан кейін ол трафикті веб-серверлеріңізге бағыттайды.

Ең жақсы нәтижеге жетудің алғы шарты ретінде сізде кемінде екі веб-сервер және жүктемені теңестіру сервері болуы керек. Веб-серверлер олардың арасындағы жүктемені теңестіруді тексеру үшін кем дегенде nginx немесе httpd сияқты негізгі веб-қызметті іске қосуы керек.

CentOS 8 жүйесінде HAProxy орнату

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

Load Balancer орнату

HAProxy орнату өте қарапайым процесс. Негізінде, сізге тек HAProxy-ге қандай қосылымдарды тыңдау керектігін және оларды қайда жіберу керектігін айту керек.

Бұл параметрлерді анықтайтын /etc/haproxy/haproxy.cfg конфигурация файлын жасау арқылы жасалады. HAProxy конфигурация опциялары туралы оқуға болады құжаттама бетіндеегер сіз бұл туралы көбірек білгіңіз келсе.

Тасымалдау қабатындағы жүктемені теңестіру (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

Бұл 4 портта http_front тыңдау деп аталатын сыртқы деп аталатын көліктік деңгей жүктемесінің теңестірушісін (80-қабат) анықтайды, содан кейін трафикті http_back деп аталатын әдепкі серверге бағыттайды. Қосымша статистика /haproxy?stats статистика бетін көрсетілген мекенжайға қосады.

Әртүрлі жүктемені теңестіру алгоритмдері.

Серверлерді сервер бөлімінде көрсету HAProxy мүмкіндігінше айналмалы алгоритмге сәйкес жүктемені теңестіру үшін осы серверлерді пайдалануға мүмкіндік береді.

Теңдестіру алгоритмдері әр қосылым сервердегі қай серверге жіберілетінін анықтау үшін пайдаланылады. Міне, кейбір пайдалы опциялар:

  • Дөңгелек үстел: Әрбір сервер салмағына қарай кезекпен пайдаланылады. Бұл серверлердің өңдеу уақыты біркелкі бөлінген кездегі ең тегіс және ең әділ алгоритм. Бұл алгоритм динамикалық болып табылады, бұл сервер салмағын жылдам реттеуге мүмкіндік береді.
  • Leastconn: ең аз қосылымдары бар сервер таңдалады. Бірдей жүктемесі бар серверлер арасында айналым орындалады. Бұл алгоритмді пайдалану LDAP, SQL, TSE және т.б. сияқты ұзақ сеанстар үшін ұсынылады, бірақ HTTP сияқты қысқа сеанстар үшін өте қолайлы емес.
  • Бірінші: Қосылым ұялары бар бірінші сервер қосылымды қабылдайды. Серверлер ең төменгі сандық идентификатордан ең үлкенге дейін таңдалады, ол әдепкі бойынша фермадағы сервер орнын көрсетеді. Сервер 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

Frontend /blog арқылы басталатын жолдары бар барлық қосылымдарға қолданылатын url_blog деп аталатын ACL ережесін жариялайды. Use_backend url_blog шартына сәйкес келетін қосылымдарға blog_back деп аталатын сервер арқылы қызмет көрсету керектігін және барлық басқа сұраулар әдепкі сервер арқылы өңделетінін көрсетеді.

Артқы жағында конфигурация серверлердің екі тобын орнатады: бұрынғыдай http_back және example.com/blog қосылымдарын өңдейтін blog_back деп аталатын жаңа.

Параметрлерді өзгерткеннен кейін файлды сақтаңыз және келесі пәрменді пайдаланып HAProxy бағдарламасын қайта іске қосыңыз:

sudo systemctl restart haproxy

Іске қосу кезінде қандай да бір ескертулер немесе қате туралы хабарлар алсаңыз, олар үшін конфигурацияңызды тексеріп, барлық қажетті файлдар мен қалталарды жасағаныңызға көз жеткізіңіз, содан кейін қайта іске қосып көріңіз.

Орнатуды тексеру

HAProxy конфигурацияланып, іске қосылғаннан кейін, браузерде жүктемені теңестіру серверінің жалпы IP мекенжайын ашыңыз және серверге дұрыс қосылғаныңызды тексеріңіз. Конфигурациядағы stats uri параметрі көрсетілген мекенжайда статистика бетін жасайды.

http://load_balancer_public_ip/haproxy?stats

Статистика бетін жүктегенде, барлық серверлер жасыл түспен көрсетілсе, орнату сәтті болды!

CentOS жүйесінде HAProxy жүктеме балансын орнату

Статистика бетінде веб-хосттарды қадағалауға арналған пайдалы ақпарат, соның ішінде жоғары/төмен уақыт және сеанстар саны бар. Сервер қызыл түспен белгіленсе, сервер қосулы екеніне және оны жүктемені теңестіруші құрылғыдан пинг жіберуге болатынына көз жеткізіңіз.

Жүктеме теңестіруші жауап бермесе, 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 орнату арқылы жоғары қолжетімділікті одан әрі жақсартуға болады. Бұл туралы толығырақ біздің сайттан біле аласыз UpCloud жүйесіндегі өзгермелі IP мекенжайлары туралы мақала.

Курс туралы толығырақ «Linux әкімшісі. Виртуализация және кластерлеу»***

Ақпарат көзі: www.habr.com

пікір қалдыру