A HAProxy terheléselosztó telepítése a CentOS rendszeren

A cikk fordítása a tanfolyam kezdetének előestéjén készült "Linux rendszergazda. Virtualizáció és klaszterezés"

A HAProxy terheléselosztó telepítése a CentOS rendszeren

A terheléselosztás elterjedt megoldás a webalkalmazások vízszintes skálázására több gazdagépen, miközben a felhasználóknak egyetlen hozzáférési pontot biztosítanak a szolgáltatáshoz. HAProxy az egyik legnépszerűbb nyílt forráskódú terheléselosztó szoftver, amely magas rendelkezésre állást és proxyfunkciókat is biztosít.

A HAProxy arra törekszik, hogy optimalizálja az erőforrás-felhasználást, maximalizálja az átviteli sebességet, minimalizálja a válaszidőt, és elkerülje az egyes erőforrások túlterhelését. Számos Linux-disztribúcióra telepíthető, például a CentOS 8-ra, amelyre ebben az útmutatóban fogunk összpontosítani, valamint rendszerekre Debian 8 и Ubuntu 16.

A HAProxy terheléselosztó telepítése a CentOS rendszeren

A HAProxy különösen alkalmas nagyon nagy forgalmú webhelyekhez, ezért gyakran használják a többszerveres webszolgáltatás-konfigurációk megbízhatóságának és teljesítményének javítására. Ez az útmutató felvázolja a HAProxy terheléselosztóként történő beállításának lépéseit egy CentOS 8 felhőalapú gazdagépen, amely ezután a forgalmat a webszerverekhez irányítja.

A legjobb eredmény előfeltételeként legalább két webszerverrel és egy terheléselosztó szerverrel kell rendelkeznie. A webszervereknek legalább egy alapvető webszolgáltatást kell futtatniuk, például az nginxet vagy a httpd-t, hogy teszteljék a köztük lévő terheléselosztást.

A HAProxy telepítése CentOS 8 rendszeren

Mivel a HAProxy egy gyorsan fejlődő nyílt forráskódú alkalmazás, előfordulhat, hogy a szabványos CentOS-tárolókban elérhető disztribúció nem a legújabb verzió. Az aktuális verzió megtekintéséhez futtassa a következő parancsot:

sudo yum info haproxy

A HAProxy mindig három stabil verzió közül választhat: a két legfrissebb támogatott verzió és egy harmadik, régebbi verzió, amely még mindig kritikus frissítéseket kap. Mindig ellenőrizheti a HAProxy webhelyén felsorolt ​​legújabb stabil verziót, majd eldöntheti, hogy melyik verzióval kíván dolgozni.

Ebben az útmutatóban a legújabb, stabil 2.0-s verziót fogjuk telepíteni, amely az útmutató írásakor még nem volt elérhető a szabványos tárolókban. Az eredeti forrásból kell telepítenie. De először ellenőrizze, hogy teljesítette-e a program letöltéséhez és lefordításához szükséges feltételeket.

sudo yum install gcc pcre-devel tar make -y

Töltse le a forráskódot az alábbi paranccsal. Ellenőrizheti, hogy elérhető-e újabb verzió a webhelyen HAProxy letöltési oldal.

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

Miután a letöltés befejeződött, bontsa ki a fájlokat az alábbi paranccsal:

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

Lépjen a kicsomagolt forráskönyvtárba:

cd ~/haproxy-2.0.7

Ezután fordítsa le a programot a rendszeréhez:

make TARGET=linux-glibc

És végül telepítse magát a HAProxy-t:

sudo make install

A HAProxy már telepítve van, de további műveletekre van szükség ahhoz, hogy működjön. Folytassuk a szoftver és a szolgáltatások beállítását alább.

A HAProxy beállítása a szerverhez

Most adja hozzá a következő könyvtárakat és statisztikai fájlokat a HAProxy bejegyzésekhez:

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

Hozzon létre egy szimbolikus hivatkozást a binárisokhoz, hogy normál felhasználóként futtathassa a HAProxy parancsokat:

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

Ha proxyt szeretne hozzáadni a rendszerhez szolgáltatásként, másolja a haproxy.init fájlt a példákból az /etc/init.d könyvtárába. Módosítsa a fájlengedélyeket úgy, hogy a szkript fusson, majd indítsa újra a systemd démont:

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

Engedélyeznie kell azt is, hogy a szolgáltatás automatikusan újrainduljon, amikor a rendszer elindul:

sudo chkconfig haproxy on

A kényelem érdekében új felhasználó hozzáadása is javasolt a HAProxy futtatásához:

sudo useradd -r haproxy

Ezt követően a következő paranccsal újra ellenőrizheti a telepített verziószámot:

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

Esetünkben a verziónak 2.0.7-esnek kell lennie, amint az a fenti példakimeneten látható.

Végül, a CentOS 8 alapértelmezett tűzfala meglehetősen korlátozza ezt a projektet. Használja a következő parancsokat a szükséges szolgáltatások engedélyezéséhez és a tűzfal alaphelyzetbe állításához:

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 beállítása

A HAProxy beállítása meglehetősen egyszerű folyamat. Lényegében csak annyit kell tennie, hogy megmondja a HAProxynak, hogy milyen kapcsolatokra figyeljen, és hova kell továbbítania azokat.

Ezt úgy teheti meg, hogy létrehoz egy konfigurációs fájlt a /etc/haproxy/haproxy.cfg fájlban a beállítások megadásával. A HAProxy konfigurációs lehetőségeiről olvashat a dokumentációs oldalonha többet szeretne tudni róla.

Terheléselosztás a szállítási rétegnél (4. réteg)

Kezdjük az alapbeállítással. Hozzon létre egy új konfigurációs fájlt, például a segítségével vi az alábbi paranccsal:

sudo vi /etc/haproxy/haproxy.cfg

Adja hozzá a következő szakaszokat a fájlhoz. Cserélje ki szerver név minek kell hívnia a szervereit a statisztikai oldalon, és privát_ip — azon szerverek privát IP-címei, amelyekre a webes forgalmat irányítani kívánja. Ellenőrizheti a privát IP-címeket az UpCloud vezérlőpulton és a lapon Magánhálózat a menün 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 check

Ez egy szállítási réteg terheléselosztót (4. réteg) határoz meg, amelyet külsőleg http_front figyelőnek hívnak a 80-as porton, amely ezután a forgalmat egy http_back nevű alapértelmezett háttérrendszerre továbbítja. További statisztikák /haproxy?stats a statisztikai oldalt a megadott címhez kapcsolja.

Különféle terheléselosztási algoritmusok.

A kiszolgálók megadása a háttérszakaszban lehetővé teszi a HAProxy számára, hogy ezeket a kiszolgálókat kör-robin algoritmus szerint használja a terheléselosztáshoz.

A kiegyenlítő algoritmusok segítségével meghatározható, hogy a háttérben melyik kiszolgálóhoz kell átadni az egyes kapcsolatokat. Íme néhány hasznos lehetőség:

  • Roundrobin: Minden szervert felváltva használunk a súlyának megfelelően. Ez a legsimább és legigazságosabb algoritmus, ha a szerverek feldolgozási ideje egyenletesen oszlik el. Ez az algoritmus dinamikus, lehetővé téve a szerver súlyának menet közbeni beállítását.
  • Leastconn: a legkevesebb kapcsolattal rendelkező szerver kerül kiválasztásra. Azonos terhelésű szerverek között körmérkőzés történik. Ennek az algoritmusnak a használata ajánlott hosszú munkamenetekhez, például LDAP, SQL, TSE stb., de nem nagyon alkalmas rövid munkamenetekhez, mint például a HTTP.
  • Első: Az első elérhető csatlakozási helyekkel rendelkező szerver fogadja a kapcsolatot. A kiszolgálók kiválasztása a legalacsonyabb numerikus azonosítótól a legmagasabbig terjed, amely alapértelmezés szerint a kiszolgáló pozíciója a farmon. Amint egy szerver eléri a maxconn-t, a következő szerver kerül felhasználásra.
  • Forrás: A forrás IP-címet kivonatolja, és elosztja a futó szerverek össztömegével annak meghatározásához, hogy melyik szerver kapja meg a kérést. Ily módon ugyanaz a kliens IP-címe mindig ugyanahhoz a szerverhez kerül, miközben a szerverek ugyanazok maradnak.

A terheléselosztás beállítása az alkalmazás szintjén (7. réteg)

Egy másik elérhető lehetőség egy terheléselosztó konfigurálása az alkalmazási rétegen (7. réteg) futásra, ami akkor hasznos, ha a webalkalmazás egyes részei különböző gazdagépeken találhatók. Ez a kapcsolat átvitelének korlátozásával érhető el, például URL-en keresztül.

Nyissa meg a HAProxy konfigurációs fájlt egy szövegszerkesztővel:

sudo vi /etc/haproxy/haproxy.cfg

Ezután állítsa be a frontend és a 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 check

A frontend deklarál egy url_blog nevű ACL-szabályt, amely minden olyan kapcsolatra vonatkozik, amelynek elérési útja /blog kezdődik. A Use_backend meghatározza, hogy az url_blog feltételnek megfelelő kapcsolatokat a blog_back nevű háttérrendszernek kell kiszolgálnia, az összes többi kérést pedig az alapértelmezett háttérprogram kezeli.

A háttéroldalon a konfiguráció két kiszolgálócsoportot állít be: http_back, mint korábban, és egy új, blog_back nevű csoportot, amely az example.com/blog oldalhoz való csatlakozásokat kezeli.

A beállítások módosítása után mentse el a fájlt, és indítsa újra a HAProxyt a következő paranccsal:

sudo systemctl restart haproxy

Ha az indítás során figyelmeztetéseket vagy hibaüzeneteket kap, ellenőrizze a konfigurációt, és győződjön meg arról, hogy az összes szükséges fájlt és mappát létrehozta, majd próbálja meg újraindítani.

A beállítás tesztelése

A HAProxy konfigurálása és futtatása után nyissa meg a terheléselosztó kiszolgáló nyilvános IP-címét egy böngészőben, és ellenőrizze, hogy megfelelően csatlakozik-e a háttérrendszerhez. A stats uri paraméter a konfigurációban létrehoz egy statisztikai oldalt a megadott címen.

http://load_balancer_public_ip/haproxy?stats

Ha a statisztikai oldal betöltésekor minden szervered zölden világít, akkor a beállítás sikeres volt!

A HAProxy terheléselosztó telepítése a CentOS rendszeren

A statisztikai oldal hasznos információkat tartalmaz a webtárhelyeinek nyomon követéséhez, beleértve a fel/leállás idejét és a munkamenetek számát. Ha a szerver pirossal van megjelölve, győződjön meg arról, hogy a szerver be van kapcsolva, és tudja-e pingelni a terheléselosztó gépről.

Ha a terheléselosztó nem válaszol, győződjön meg arról, hogy a HTTP-kapcsolatokat nem blokkolja a tűzfal. Győződjön meg arról is, hogy a HAProxy működik az alábbi paranccsal:

sudo systemctl status haproxy

A statisztikai oldal védelme jelszóval

Ha azonban a statisztikai oldal egyszerűen szerepel a kezelőfelületen, akkor mindenki láthatja, ami nem biztos, hogy jó ötlet. Ehelyett egyéni portszámot rendelhet hozzá az alábbi példa hozzáadásával a haproxy.cfg fájl végéhez. Cserélje ki felhasználónév и jelszó valami biztonságosért:

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

Új figyelőcsoport hozzáadása után távolítsa el a régi stats uri hivatkozást a kezelőfelület-csoportból. Ha végzett, mentse a fájlt, és indítsa újra a HAProxyt.

sudo systemctl restart haproxy

Ezután nyissa meg újra 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:8181

Győződjön meg arról, hogy az összes szerver továbbra is zölden világít, majd csak a terheléselosztó IP-címét nyissa meg portszámok nélkül a böngészőben.

http://load_balancer_public_ip/

Ha legalább néhány különböző céloldal található a háttérkiszolgálókon, akkor észre fogja venni, hogy minden alkalommal, amikor újratölti az oldalt, egy másik gazdagéptől kap választ. Kipróbálhat különböző kiegyensúlyozó algoritmusokat a konfigurációs részben, vagy nézze meg teljes dokumentáció.

Következtetés: HAProxy Load Balancer

Gratulálunk a HAProxy terheléselosztó sikeres beállításához! Még egy alapvető terheléselosztási beállítással is jelentősen javíthatja webalkalmazása teljesítményét és elérhetőségét. Ez az útmutató csak egy bevezető a HAProxy terheléselosztásához, amely sokkal többre képes, mint amit a gyors telepítési útmutató leír. Javasoljuk, hogy kísérletezzen a különböző konfigurációkkal kiterjedt dokumentáció, amely elérhető a HAProxy számára, majd kezdje el tervezni a termelési környezet terheléselosztását.

Ha több gazdagépet használ a webszolgáltatás túlzott mértékű védelmére, maga a terheléselosztó továbbra is hibapontot jelenthet. Tovább javíthatja a magas rendelkezésre állást, ha lebegő IP-címet telepít több terheléselosztó között. Erről bővebben lapunkban tájékozódhat cikk a lebegő IP-címekről az UpCloudon.

Bővebben a tanfolyamról "Linux rendszergazda. Virtualizáció és klaszterezés"***

Forrás: will.com

Hozzászólás