A cikk fordítása a kurzus megkezdése előtt készült

A terheléselosztás egy elterjedt megoldás a webalkalmazások vízszintes skálázására több hoszton, egységes hozzáférési pontot biztosítva a felhasználóknak a szolgáltatáshoz. az egyik legnépszerűbb nyílt forráskódú terheléselosztó program, amely magas rendelkezésre állást és proxizási funkciókat is biztosít.
A HAProxy célja az erőforrások kihasználásának optimalizálása, a sávszélesség maximalizálása, a válaszidő minimalizálása és az egyes erőforrások túlterhelésének elkerülése. Telepíthető számos Linux disztribúción, mint például a CentOS 8, amit ebben a útmutatóban is megvizsgálunk, valamint más rendszereken. és .

A HAProxy különösen alkalmas rendkívül magas forgalmú webhelyekhez, így gyakran használják a több szerverből álló webszolgáltatások megbízhatóságának és teljesítményének növelésére. Ebben az útmutatóban lépéseket mutatunk be a HAProxy terheléselosztóként való beállításához a CentOS 8 felhőszerverén, amely ezután a forgalmat a webkiszolgálóira irányítja.
A legjobb eredmények elérése érdekében legalább két webkiszolgálónak és egy terheléselosztó szervernek kell lennie. A webkiszolgálókon legalább egy alapvető webszolgáltatásnak, például az nginx-nek vagy httpd-nek kell futnia, hogy ellenőrizni lehessen a terheléselosztást közöttük.
HAProxy telepítése CentOS 8-ra
Mivel a HAProxy egy gyorsan fejlődő nyílt forráskódú alkalmazás, a CentOS alapértelmezett tárolóiban elérhető disztribúció nem biztos, hogy a legújabb verzió. Az aktuális verzió megismeréséhez futtassa az alábbi parancsot:
sudo yum info haproxyA HAProxy mindig három stabil verziót kínál: a legfrissebb két támogatott verziót és egy régebbi verziót, amely még mindig kap kritikus frissítéseket. Mindig ellenőrizheti a legfrissebb stabil verziót a HAProxy weboldalán, majd eldöntheti, melyik verzióval szeretne dolgozni.
Ebben a kézikönyvben a legújabb stabil 2.0 verzió telepítését fogjuk bemutatni, amely a kézikönyv írásának idején még nem volt elérhető a standard tárolókban. Ezt közvetlenül a forrásból kell telepítenie. De először ellenőrizze, hogy a szükséges feltételek teljesülnek-e a program letöltéséhez és fordításához.
sudo yum install gcc pcre-devel tar make -yA forráskód letöltéséhez használja az alábbi parancsot. Ellenőrizheti, hogy van-e újabb verzió, amely elérhető a .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gzA letöltés befejezése után csomagolja ki a fájlokat az alábbi parancs segítségével:
tar xzvf ~/haproxy.tar.gz -C ~/Lépjen be a kicsomagolt forráskönyvtárba:
cd ~/haproxy-2.0.7Ezután fordítsa le a programot a rendszerének megfelelően:
make TARGET=linux-glibcVégül telepítse a HAProxy-t:
sudo make installMost, hogy a HAProxy telepítve van, néhány további beállítást kell elvégezni a működéséhez. Folytassuk a szoftver és szolgáltatások konfigurálását az alábbiakban.
A HAProxy konfigurálása a szerveréhez
Most adja hozzá a következő könyvtárakat és statisztikai fájlt a HAProxy bejegyzéséhez:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/statsHozzon létre egy szimbolikus hivatkozást a bináris fájlokhoz, hogy a HAProxy parancsokat normál felhasználóként is futtathassa:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxyHa proxy szervert szeretne hozzáadni a rendszerhez szolgáltatásként, másolja a haproxy.init fájlt az examples mappából az /etc/init.d/ könyvtárába. Szerkessze a fájl hozzáférési jogait, hogy a szkript futtatható legyen, majd indítsa újra a systemd demont:
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reloadEzenkívül engedélyeznie kell a szolgáltatás automatikus újraindítását a rendszer indításakor:
sudo chkconfig haproxy onA kényelem érdekében javasolt egy új felhasználót is létrehozni a HAProxy futtatásához:
sudo useradd -r haproxyEzután még egyszer ellenőrizheti az telepített verzió számát az alábbi parancs segítségével:
haproxy -v
HA-Proxy verzió 2.0.7 2019/09/27 - https://haproxy.org/A mi esetünkben a verziónak 2.0.7-nek kell lennie, ahogy a fenti kimenet példájában látható.
Végül a CentOS 8 tűzfala alapértelmezés szerint elég szigorú ezen projekt esetében. Használja az alábbi parancsokat a szükséges szolgáltatások engedélyezésére és a tűzfal újraindítására:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reloadTerheléselosztó beállítása
A HAProxy beállítása meglehetősen egyszerű folyamat. Valójában mindössze annyit kell tennie, hogy megmondja a HAProxy-nak, milyen kapcsolatokra figyeljen és hová irányítsa azokat.
Ez a konfigurációs fájl, az /etc/haproxy/haproxy.cfg létrehozásával történik, amely tartalmazza a szükséges beállításokat. További információt a HAProxy konfigurációs paramétereiről , ha többet szeretne megtudni erről.
Terheléselosztás a szállítási szinten (4. réteg)
Kezdjük az alapvető beállítással. Hozzon létre egy új konfigurációs fájlt, például a vi parancs használatával:
sudo vi /etc/haproxy/haproxy.cfgAdja hozzá a fájlhoz a következő szakaszokat. Cserélje ki server_name azokra, amelyek megjelenítik a szervereit a statisztikai oldalon, és private_ip a webforgalom irányításához használt szerverek privát IP-címeire. Ellenőrizheti a privát IP-címeket és a Privát hálózat fül alatt a menüben Hálózat.
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 checkEz a szállítási szintű terheléselosztót (4. réteg) definiálja http_front néven, amely a 80-as portot figyeli, majd a forgalmat a default_backend nevével rendelkező http_back felé irányítja. További statisztika /haproxy?stats elérheti a statisztikai oldalt az adott címen.
Különböző terheléselosztási algoritmusok.
A backend szakaszában megadott szerverek lehetővé teszik a HAProxy számára, hogy ezeket a szervereket a terheléselosztáshoz használja a round-robin algoritmus szerint, amikor csak lehetséges.
A terheléselosztási algoritmusok határozzák meg, hogy a backendben melyik szerverhez kerül minden egyes kapcsolat. Íme néhány hasznos opció:
- Roundrobin: minden szerver felváltva kerül felhasználásra a súlyuknak megfelelően. Ez a legsimább és legigazságosabb algoritmus, amikor a feldolgozási idő a szervereken egyenletesen eloszlik. Ez az algoritmus dinamikus, lehetővé téve a szerver súlyának valós idejű módosítását.
- Leastconn: A legkevesebb kapcsolattal rendelkező szerver kerül kiválasztásra. Körkörös keresés történik a hasonló terhelésű szerverek között. Ezen algoritmus használata hosszú munkamenetek, például LDAP, SQL, TSE stb. esetén ajánlott, de nem nagyon alkalmas rövid munkamenetekhez, mint az HTTP.
- Első: Az első szerver, amely rendelkezik elérhető csatlakozási helyekkel, megkapja a kapcsolatot. A szerverek a legkisebb numerikus azonosítótól a legmagasabbig választhatók, ami alapértelmezés szerint a szerver elhelyezkedését jelöli a farmon. Amint a szerver eléri a maxconn értékét, a következő szerver kerül felhasználásra.
- Forrás: A forrás IP-cím hash-elve van, és elosztva a futó szerverek összetevő súlyával, hogy meghatározzák, melyik szerver fogja kapni a kérést. Így azonos IP-címmel rendelkező ügyfél mindig ugyanahhoz a szerverhez kerül, miközben a szerverek változatlanok maradnak.
Alkalmazás szintű (7-es réteg) terheléselosztás beállítása
Egy másik elérhető lehetőség a terheléselosztó alkalmazás szintű (7-es réteg) működésének beállítása, ami hasznos, ha a webalkalmazása egyes részei különböző hosztokon helyezkednek el. Ezt úgy lehet elérni, hogy a kapcsolat átirányítását például URL alapján szabályozzuk.
Nyissa meg a HAProxy konfigurációs fájlt egy szövegszerkesztővel:
sudo vi /etc/haproxy/haproxy.cfgEzután állítsa be a frontend és backend szegmenseket az alábbi példa szerint:
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 checkA frontend egy url_blog nevű ACL szabályt hirdet, amely minden kapcsolatra alkalmazva van, amelynek útvonala a /blog-gal kezdődik. A use_backend meghatározza, hogy azok a kapcsolatok, amelyek megfelelnek az url_blog feltételnek, a blog_back nevű backend által kell, hogy kiszolgálják, míg az összes többi kérést az alapértelmezett backend kezeli.
A backend oldalán a konfiguráció két szervercsoportot állít be: http_back, amint az korábban, és egy újat, a blog_backet, amely az example.com/blog kapcsolatok kiszolgálására szolgál.
A beállítások módosítása után mentse el a fájlt, és indítsa újra a HAProxy-t a következő parancs segítségével:
sudo systemctl restart haproxyHa a rendszerindítás során figyelmeztetéseket vagy hibákat kapott, ellenőrizze a konfigurációt, és győződjön meg róla, hogy létrehozta az összes szükséges fájlt és mappát, majd próbálkozzon újra a rendszer indításával.
Beállítás tesztelése
Miután a HAProxy be van állítva és fut, nyissa meg a terheléselosztó szerver nyilvános IP-címét a böngészőben, és ellenőrizze, hogy helyesen kapcsolódott-e a hátsó réshez. A stats uri paraméter a konfigurációban statisztikai oldalt hoz létre a megadott címen.
http://load_balancer_public_ip/haproxy?statsHa a statisztikai oldal betöltődik, és minden szerver zöld színnel jelenik meg, akkor a beállítás sikeres volt!

A statisztikai oldal hasznos információkat tartalmaz a webhelyek nyomon követéséhez, beleértve a működési/időszaki arányt és az aktív munkamenetek számát. Ha egy szerver piros színnel van megjelenítve, ellenőrizze, hogy a szerver be van-e kapcsolva, és hogy pingelni tudja-e a terheléselosztó gépről.
Ha a terheléselosztó nem válaszol, ellenőrizze, hogy a tűzfal nem blokkol-e HTTP-kapcsolatokat. Győződjön meg róla, hogy a HAProxy működik az alábbi parancs segítségével:
sudo systemctl status haproxyA statisztikai oldal jelszóval való védelme
Ha azonban a statisztikai oldal csak a frontenden van megadva, akkor az nyilvános hozzáférésű, ami nem feltétlenül jó ötlet. Ehelyett megadhat neki egy saját portszámot, ha a lenti példát hozzáadja a haproxy.cfg fájl végéhez. Cserélje le username és password valami biztonságosra:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:jelszóMiután új hallgatói csoportot adott hozzá, távolítsa el a stats uri régi hivatkozását a frontend csoportból. Amikor kész van, mentse el a fájlt, és indítsa újra a HAProxy-t.
sudo systemctl restart haproxyEzután újra nyissa meg a terheléselosztót az új portszámmal, és jelentkezzen be a konfigurációs fájlban megadott felhasználónévvel és jelszóval.
http://load_balancer_public_ip:8181Győződjön meg róla, hogy az összes szerver továbbra is zöld színnel jelenik meg, majd nyissa meg a terheléselosztó IP-címét portszámok nélkül a böngészőjében.
http://load_balancer_public_ip/Ha az Ön belső szerverein többféle céloldal található, észre fogja venni, hogy amikor újra betölti az oldalt, mindig másik hoszt válaszát kapja. Különböző terheléselosztási algoritmusokat próbálhat ki a konfigurációs részben, vagy áttekintheti a .
Következtetés: HAProxy terheléselosztó
Gratulálunk, sikeresen beállította a HAProxy terheléselosztót! Még a terheléselosztó alapbeállításával is jelentősen javíthatja webalkalmazása teljesítményét és elérhetőségét. Ez az útmutató csak bevezető a HAProxy terheléselosztásába, amely sokkal többre képes, mint amit egy rövid telepítési utasításban le lehet írni. Javasoljuk, hogy kísérletezzen különböző konfigurációkkal a amely elérhető a HAProxy-hoz, majd kezdje el a terheléselosztás tervezését a termelési környezetére.
Több hoszt használatával webszolgáltatása védelme érdekében, hogy tartalék teljesítménye legyen, a terheléselosztó magában még mindig hibapontként jelentkezhet. A magasabb elérhetőség érdekében létrehozhat egy lebegő IP-t több terheléselosztó között. Erről többet tudhat meg a .
További információ a kurzusról ***
Forrás: habr.com
