Instalante la HAProxy Load Balancer sur CentOS

La traduko de la artikolo estis preparita sojle de la komenco de la kurso Linukso-administranto. Virtualigo kaj Clustering»

Instalante la HAProxy Load Balancer sur CentOS

Ŝarĝbalancado estas ofta solvo por pligrandigi TTT-aplikaĵojn tra pluraj gastigantoj dum li provizas uzantojn per ununura punkto de aliro al servo. HAProxy estas unu el la plej popularaj programoj pri ekvilibra ŝarĝo malfermita, kiu ankaŭ provizas altan haveblecon kaj prokuran funkciojn.

HAProxy celas optimumigi la uzadon de rimedoj, maksimumigi la trairon, minimumigi respondtempon kaj eviti troŝarĝi ajnan ununuran rimedon. Ĝi povas esti instalita sur diversaj Linukso-distribuoj, kiel CentOS 8, pri kiu ni fokusos en ĉi tiu gvidilo, same kiel sistemoj. Debian 8 и Ubuntu 16.

Instalante la HAProxy Load Balancer sur CentOS

HAProxy estas precipe taŭga por tre alta trafiko retejoj kaj tial estas ofte uzata por plibonigi la fidindecon kaj agadon de plurservilaj retservaj agordoj. Ĉi tiu gvidilo skizas la paŝojn por agordi HAProxy kiel ŝarĝan ekvilibron sur nuba gastiganto CentOS 8, kiu poste direktas trafikon al viaj retserviloj.

Kiel antaŭkondiĉo por plej bonaj rezultoj, vi devus havi almenaŭ du retservilojn kaj ŝarĝbalancan servilon. Retaj serviloj devas funkcii almenaŭ bazan retservon kiel nginx aŭ httpd por kontroli ŝarĝan ekvilibron inter ili.

Instalante HAProxy sur CentOS 8

Pro la fakto, ke HAProxy estas rapide evoluanta malfermkoda aplikaĵo, la distribuo disponebla al vi en la normaj deponejoj de CentOS eble ne estas la plej nova versio. Por ekscii la lastan version, rulu la jenan komandon:

sudo yum info haproxy

HAProxy ĉiam provizas tri stabilajn versiojn por elekti: la du plej lastatempaj subtenataj versioj kaj la tria, pli malnova versio, kiu ankoraŭ ricevas kritikajn ĝisdatigojn. Vi ĉiam povas kontroli la plej novan stabilan version listigitan en la retejo de HAProxy kaj tiam decidi kun kiu versio vi volas labori.

En ĉi tiu gvidilo, ni instalos la plej novan stabilan version 2.0, kiu ankoraŭ ne estis disponebla en la normaj deponejoj dum la skribado. Vi devos instali ĝin de la originala fonto. Sed unue, kontrolu ĉu vi plenumis la necesajn kondiĉojn por elŝuti kaj kompili la programon.

sudo yum install gcc pcre-devel tar make -y

Elŝutu la fontkodon per la komando sube. Vi povas kontroli ĉu ekzistas pli nova versio disponebla ĉe HAProxy elŝuta paĝo.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Post kiam la elŝuto estas kompleta, ĉerpi la dosierojn per la suba komando:

tar xzvf ~/haproxy.tar.gz -C ~/

Ŝanĝu al la malpakita fonta dosierujo:

cd ~/haproxy-2.0.7

Poste kompilu la programon por via sistemo:

make TARGET=linux-glibc

Kaj finfine instalu HAProxy mem:

sudo make install

Nun HAProxy estas instalita, sed ĝi postulas kelkajn pliajn manipuladojn por funkcii. Ni daŭrigu agordi la programaron kaj servojn sube.

Agordante HAProxy por via servilo

Nun aldonu la sekvajn dosierujojn kaj statistikajn dosierojn por HAProxy-enskriboj:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

Kreu simbolan ligon por la binaroj, por ke vi povu ruli HAProxy-komandojn kiel normala uzanto:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Se vi volas aldoni la prokurilon al via sistemo kiel servo, kopiu la dosieron haproxy.init el ekzemploj al via dosierujo /etc/init.d. Redaktu la permesojn de la dosiero por ke la skripto rulu, tiam reŝargu la systemd-demonon:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

Vi ankaŭ devas permesi la servon aŭtomate rekomenci dum la starto de la sistemo:

sudo chkconfig haproxy on

Por komforto, ankaŭ rekomendas aldoni novan uzanton por ruli HAProxy:

sudo useradd -r haproxy

Post tio, vi povas kontroli la instalitan version-numeron denove per la sekva komando:

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

En nia kazo, la versio devus esti 2.0.7, kiel montrite en la ekzempla eligo supre.

Fine, la defaŭlta fajroŝirmilo en CentOS 8 estas sufiĉe limiga por ĉi tiu projekto. Uzu la jenajn komandojn por ebligi la postulatajn servojn kaj restarigi la fajroŝirmilon:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Agordo de ŝarĝbalancilo

Agordi HAProxy estas sufiĉe simpla procezo. Esence, ĉio, kion vi devas fari, estas diri al HAProxy, sur kiuj konektoj ĝi devas aŭskulti kaj kie elsendi ilin.

Ĉi tio estas farita kreante agordan dosieron /etc/haproxy/haproxy.cfg kun difinaj agordoj. Vi povas legi pri agordaj opcioj de HAProxy sur la dokumenta paĝose vi volas scii pli pri ĝi.

Ŝarĝbalancado ĉe la transporta tavolo (tavolo 4)

Ni komencu kun la baza agordo. Kreu novan agordosieron, ekzemple uzante vi kun la suba komando:

sudo vi /etc/haproxy/haproxy.cfg

Aldonu la sekvajn sekciojn al la dosiero. Anstataŭigi servilo_nomo tiu, kiu devus voki viajn servilojn sur la statistika paĝo, kaj privata_ip - privataj IP-adresoj de la serviloj al kiuj vi volas direkti retan trafikon. Vi povas kontroli privatajn IP-adresojn en la kontrolpanelo UpCloud kaj sur la langeto Privata reto en la menuo reto.

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

Ĉi tio difinas transporttavolan ŝarĝbalancilon (tavolo 4) ekstere nomitan http_front aŭskultantan sur haveno 80, kiu tiam direktas trafikon al la defaŭlta backend nomita http_back. Pliaj statistikoj /haproxy?stats ligas la statistikan paĝon al la specifita adreso.

Diversaj ŝarĝbalancaj algoritmoj.

Specifante servilojn en la backend-sekcio ebligas al HAProxy uzi tiujn servilojn por ŝarĝbalancado laŭ la cirkulada algoritmo kiam eble.

Balancialgoritmoj estas uzataj por determini al kiu servilo en la backend ĉiu konekto estas sendita. Jen kelkaj el la utilaj opcioj:

  • Ĉirkaŭvojo: ĉiu servilo estas uzata laŭvice laŭ sia pezo. Ĉi tiu estas la plej glata kaj justa algoritmo kiam la pretiga tempo de la serviloj restas egale distribuita. Ĉi tiu algoritmo estas dinamika, kio ebligas al vi ĝustigi la pezon de la servilo sur la muŝo.
  • Leastconn: la servilo kun la plej malmultaj konektoj estas elektita. Ĉirkaŭskribo estas farita inter serviloj kun la sama ŝarĝo. Uzado de ĉi tiu algoritmo estas rekomendita por longaj sesioj kiel LDAP, SQL, TSE, ktp., sed ne tre taŭga por mallongaj sesioj kiel HTTP.
  • Unue: la unua servilo kun disponeblaj konektofendoj ricevas la konekton. Serviloj estas elektitaj de la plej malalta nombra ID ĝis la plej alta, kiu defaŭlte respondas al la pozicio de la servilo en la bieno. Post kiam la servilo atingas la maxconn-valoron, la sekva servilo estas uzata.
  • Fonto: La fonta IP-adreso estas haŝita kaj dividita per la totala pezo de kurantaj serviloj por determini kiu servilo ricevos la peton. Tiel, la sama klienta IP-adreso ĉiam iros al la sama servilo, dum la serviloj restas senŝanĝaj.

Agordi ŝarĝbalancadon ĉe la aplikaĵotavolo (tavolo 7)

Alia disponebla opcio estas agordi la ŝarĝan ekvilibron por labori ĉe la aplikaĵa tavolo (tavolo 7), kio estas utila kiam partoj de via TTT-aplikaĵo situas sur malsamaj gastigantoj. Ĉi tio povas esti atingita per estrango de la translokigo de la konekto, ekzemple per URL.

Malfermu la agordan dosieron HAProxy per tekstredaktilo:

sudo vi /etc/haproxy/haproxy.cfg

Poste agordu la fasadon kaj backend-segmentojn laŭ la ekzemplo sube:

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

La fasado deklaras ACL-regulon nomitan url_blog, kiu validas por ĉiuj ligoj kun vojoj komenciĝantaj per /blog. Use_backend specifas, ke konektoj kongruantaj kun la url_blog kondiĉo devas esti servataj de la backend nomita blog_back kaj ĉiuj aliaj petoj estas pritraktataj de la defaŭlta backend.

En la malantaŭo, la agordo starigas du servilgrupojn: http_back, kiel antaŭe, kaj novan nomitan blog_back, kiu pritraktas konektojn al example.com/blog.

Post ŝanĝi la agordojn, konservu la dosieron kaj rekomencu HAProxy per la sekva komando:

sudo systemctl restart haproxy

Se vi ricevas avertojn aŭ erarojn dum komencado, kontrolu la agordon por iu ajn kaj certigu, ke vi kreis ĉiujn necesajn dosierojn kaj dosierujojn, kaj poste provu rekomenci.

Provante la aranĝon

Post kiam HAProxy estas agordita kaj funkcianta, malfermu la publikan IP-adreson de la servilo de ŝarĝbalancilo en retumilo kaj kontrolu ĉu vi konektis al la backend ĝuste. La parametro stats uri en la agordo kreas statistikan paĝon ĉe la specifita adreso.

http://load_balancer_public_ip/haproxy?stats

Kiam vi ŝarĝas la statistikan paĝon, se ĉiuj viaj serviloj estas verdaj, tiam la aranĝo sukcesis!

Instalante la HAProxy Load Balancer sur CentOS

La statistika paĝo enhavas kelkajn utilajn informojn por spuri viajn retgastigantojn, inkluzive de supren/malfunkcia tempo kaj nombro da sesioj. Se la servilo estas markita ruĝa, certigu, ke la servilo estas enŝaltita kaj ke vi povas pingi ĝin de la ŝarĝbalancilo.

Se via ŝarĝbalancilo ne respondas, certigu, ke HTTP-konektoj ne estas blokitaj de fajroŝirmilo. Ankaŭ certigu, ke HAProxy funkcias kun la komando sube:

sudo systemctl status haproxy

Protektante la statistikan paĝon per pasvorto

Tamen, se la statistika paĝo estas nur listigita en la fasado, tiam ĝi estas malfermita al publiko, kio eble ne estas bona ideo. Anstataŭe, vi povas asigni vian propran pordan numeron al ĝi aldonante la ekzemplon sube al la fino de via haproxy.cfg dosiero. Anstataŭigi uzantonomo и pasvorto al io sekura:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Post aldoni la novan aŭskultan grupon, forigu la malnovan statistikan uri-referencon de la fasanta grupo. Fininte, konservu la dosieron kaj rekomencu HAProxy.

sudo systemctl restart haproxy

Poste malfermu la ŝarĝan ekvilibrilon denove kun la nova havennumero kaj ensalutu per la uzantnomo kaj pasvorto, kiujn vi specifis en la agorda dosiero.

http://load_balancer_public_ip:8181

Certigu, ke ĉiuj viaj serviloj estas ankoraŭ verdaj kaj poste malfermu nur la IP-ekvilibran ŝarĝon sen havenaj numeroj en via retumilo.

http://load_balancer_public_ip/

Se vi havas almenaŭ ian varion de landpaĝoj sur viaj internaj serviloj, vi rimarkos, ke ĉiufoje kiam vi reŝargas la paĝon, vi ricevas respondon de malsama gastiganto. Vi povas provi malsamajn ekvilibrajn algoritmojn en la agorda sekcio aŭ vidu kompleta dokumentaro.

Konkludo: HAProxy Load Balancer

Gratulon pro sukcese agordo de via HAProxy-ŝarĝbalancilo! Eĉ kun baza agordo pri ekvilibra ŝarĝo, vi povas multe plibonigi la rendimenton kaj haveblecon de via retejo-aplikaĵo. Ĉi tiu gvidilo estas nur enkonduko al ŝarĝo-ekvilibro kun HAProxy, kiu kapablas je multe pli ol tio, kio povas esti priskribita en rapida agorda gvidilo. Ni rekomendas eksperimenti kun malsamaj agordoj kun vasta dokumentadohavebla al HAProxy kaj tiam komencu plani ŝarĝan ekvilibron por via produktadmedio.

Uzante plurajn gastigantojn por protekti vian retservon kun kapspaco, la ŝarĝbalancilo mem ankoraŭ povas reprezenti punkton de fiasko. Vi povas plu plibonigi altan haveblecon agordante flosan IP inter multoblaj ŝarĝbalanciloj. Vi povas ekscii pli pri tio en nia artikolo pri flosantaj IP-adresoj sur UpCloud.

Pli pri la kurso Linukso-administranto. Virtualigo kaj Clustering»***

fonto: www.habr.com

Aldoni komenton