HAProxy kezdőknek szóló oktatóanyag

Haproxy Kezdoknek Szolo Oktatoanyag



Az alkalmazás méretezésével egyre több szervert kell hozzáadni a nagyobb forgalom kezeléséhez. Minél nagyobb forgalmat kap az alkalmazás, annál nagyobb az esélye annak, hogy a szerver túlterhelése esetén leállással kell szembenéznie. Vannak azonban olyan eszközök, mint például a HAProxy, amelyek lehetővé teszik a forgalom kezelésének módját a szerver terhelésének kiegyenlítése érdekében. Az ötlet az, hogy a szerver ne legyen túlterhelve. A High Availability Proxy egy nyílt forráskódú szoftver, amely megbízható terheléselosztást kínál, miközben fordított proxyként működik a TCP/HTTP alkalmazásokhoz.

A HAProxy azon dolgozik, hogy csökkentse a kiszolgáló túlterhelését, és ezt úgy éri el, hogy olyan forgalmat oszt el, amely biztosítja, hogy a kiszolgáló ne terheljen túl, de más szerverek is elérhetők legyenek. Az olyan platformok, mint az Instagram, hatalmas forgalmat bonyolítanak le a másodpercenként küldött kérések miatt, ezért a túlterhelés elkerülése érdekében a HAProxy használatával kell meghatározni a kiszolgálók frontendjét, háttérrendszerét és figyelőit.

Miért érdemes HAProxyt használni?

Mielőtt megismerné a HAProxy telepítését és konfigurálását, meg kell értenie, miért van rá szükségünk a kínált szolgáltatásoknak köszönhetően. A HAProxy fő jellemzői a következők:







  1. Terhelés elosztás - A HAProxy segítségével kényelmesen eloszthatja a forgalmat a különböző szerverek között, hogy elkerülje egyetlen szerver túlterhelését. Így az alkalmazás nem ütközik leállási problémákkal, és gyorsabban reagál, megbízhatóbb és elérhetőbb lesz.
  2. Naplózás és felügyelet – Részletes megfigyelési naplókat fog kapni a szervereihez, amelyek segítenek a hibaelhárításban. Ezenkívül a HAProxy rendelkezik egy statisztikai oldallal, ahol valós idejű teljesítményelemzést kaphat terheléselosztójához.
  3. Egészségügyi vizsgálatok – Még az Ön szerverei is állapotvizsgálatot igényelnek állapotuk megállapításához. A HAProxy gyakran futtatja az állapotellenőrzéseket, hogy megismerje a kiszolgáló állapotát a megbízhatóságának növelése érdekében. Ha hibás kiszolgálót észlel, átirányítja a forgalmat egy másik szerverre.
  4. Fordított proxy – A biztonság fokozásának egyik módja a belső szerkezet elrejtése. Szerencsére a HAProxy lehetővé teszi, hogy fogadja a forgalmat az ügyfelektől, és irányítsa őket a megfelelő szerverekre. Így a belső szerkezete el van rejtve a hacker szeme elől.
  5. ACL-ek (Hozzáférés-vezérlési listák) – A HAProxy segítségével különféle kritériumok, például elérési utak, fejlécek és IP-címek segítségével meghatározhatja, hogyan történjen a forgalomirányítás. Így egyszerűbbé válik az egyéni útválasztási logika meghatározása a forgalom számára.
  6. SSL felmondás – Alapértelmezés szerint az SSL/TLS-t a háttérkiszolgálók tehermentesítik, ami csökkenti a teljesítményt. A HAProxy esetén azonban az SSL/TLS leállása a terheléselosztónál történik, és tehermentesíti a feladatot a háttérkiszolgálókon.

HAProxy telepítése

Eddig meghatároztuk, mi az a HAProxy, és megvitattuk az általa kínált funkciókat, amelyek segítenek megérteni, miért van szüksége rá az alkalmazásához. A következő lépés annak megértése, hogyan kezdje meg a telepítést a rendszerére.



Ha Ubuntu vagy Debian rendszert futtat, a HAProxy telepíthető az APT csomagkezelőből. Futtassa a következő parancsot:



$ sudo apt frissítés
$ sudo apt install haproxy

Hasonlóképpen, ha RHEL-alapú rendszereket vagy CentOS-t használ, a HAProxy elérhető a „yum” csomagkezelőből. Futtassa a következő parancsokat:





$ sudo yum frissítés
$ sudo yum telepítse a haproxyt

A mi esetünkben Ubuntut használunk. Így a következő parancsot kapjuk:



Ezután ellenőrizhetjük a verzióját, hogy megbizonyosodjunk arról, hogy sikerült-e sikeresen telepíteni a HAProxy-t.

$ haproxy --verzió

A HAProxy konfigurálása

Ha a HAProxy telepítve van, most megnyithatja a konfigurációs fájlját ( / etc/haproxy/haproxy.cfg), és adja meg a terheléselosztóhoz használni kívánt beállításokat.

Nyissa meg a konfigurációs fájlt egy szerkesztővel, például nano vagy vim.

$ sudo nano /etc/haproxy/haproxy.cfg

A következőhöz hasonló konfigurációs fájlt kapsz:

A konfigurációs fájlból észreveheti, hogy két fő részből áll:

  1. globális – Ez a fájl első része, és értékeit nem szabad megváltoztatni. A HAProxy működését meghatározó folyamatbeállításokat tartalmazza. Például meghatározza a naplózási részleteket és csoportokat vagy felhasználókat, amelyek végrehajthatják a HAProxy funkciókat. Vegye figyelembe, hogy ebben a konfigurációs fájlban csak egy globális szakasz lehet, és ennek értékei változatlanok maradnak.
  1. alapértelmezett - Ez a szakasz a csomópontok alapértelmezett értékeit tartalmazza. Ebben a részben például megadhatja az időtúllépéseket vagy a HAProxy működési módját. Ezenkívül számos alapértelmezett szakasz szerepelhet a HAProxy konfigurációs fájljában.

Íme egy példa az „Alapértelmezett” szakaszra:

Az adott képen a mód határozza meg, hogy a HAProxy hogyan kezeli a bejövő kéréseket. A módot beállíthatja HTTP-re vagy TCP-re. Ami az időtúllépést illeti, megadja, mennyi ideig várjon a HAProxy. Például az időtúllépési csatlakozás az az idő, amelyre várakozni kell a háttérkapcsolat létrehozása előtt. Az időtúllépési kliens azt jelzi, hogy a HAProxynak mennyi ideig kell várnia, amíg az ügyfél elküldi az adatokat. Az időtúllépési kiszolgáló az az idő, amíg a megfelelő szerver elküldi az adatokat, amelyeket továbbít a kliensnek. Az alapértelmezett értékek meghatározásának módja sokat számít az alkalmazás válaszidejének növelésében.

Van még három szakasz, amelyet meg kell határoznia, hogy a terheléselosztó megfelelően működjön.

  1. frontend – Ez a szakasz azokat az IP-címeket tartalmazza, amelyeket az ügyfeleknek használni szeretne a kapcsolat létrehozásához.
  2. háttér - Megmutatja azokat a kiszolgálókészleteket, amelyek kezelik a kéréseket a frontend szakaszban meghatározottak szerint.
  3. hallgat - Egymás után akkor használatos, ha egy adott szervercsoportot szeretne átirányítani. Ez a rész egyesíti az előtér és a háttér feladatait.

Vegyünk egy példát

Ebben a példában úgy határozzuk meg a frontendet, hogy a localhost egy adott porttal használja. Ezután összekapcsoljuk a háttérrel, amely a localhostot futtatja, majd egy Python-kiszolgálót futtatunk, hogy teszteljük, minden a terheléselosztásnál elvárt módon működik-e. Kövesse a megadott lépéseket.

1. lépés: Az Alapértelmezések szakasz konfigurálása

Az „Alapértelmezések” részben beállítjuk a csomópontok között megosztandó értékeket. A mi esetünkben a módot HTTP-re állítjuk, és beállítjuk az időtúllépéseket a kliens és a szerver számára. Az időt igényeinek megfelelően állíthatja be.

Ne feledje, hogy ezek a módosítások az „/etc/haproxy/haproxy.cfg” címen található HAProxy konfigurációban találhatók. Ha az alapértelmezett rész konfigurálva van, határozzuk meg a frontendet.

2. lépés: A Frontend szakasz konfigurálása

A frontend részben meghatározzuk, hogy az alkalmazást vagy webhelyet hogyan érjék el az ügyfelek online. Megadjuk az alkalmazás IP-címét. De ebben az esetben a localhosttal dolgozunk. Ezért az IP-címünk a 127.0.0.1 tartalék cím, és a 80-as porton keresztül szeretnénk fogadni a kapcsolatokat.

Hozzá kell adnia a „bind” kulcsszót, amely az IP-cím figyelőjeként működik a megadott porton. A terheléselosztó az Ön által meghatározott IP-címet és portot használja a bejövő kérések fogadására.

Miután hozzáadta az előző sorokat a konfigurációs fájlhoz, újra kell indítanunk a „haproxy.service”-t a következő paranccsal:

$ sudo systemctl indítsa újra a haproxyt

Ezen a ponton megpróbálhatjuk elküldeni a kéréseket a weboldalunkra a „curl” paranccsal. Futtassa a parancsot, és adja hozzá a cél IP-címet.

$ curl

Mivel még meg kell határoznunk, hogy milyen lesz a HAProxy háttérrendszere, 503-as hibát kapunk, amint az a következőkben látható. Bár a terheléselosztónak sikerült fogadnia a kéréseket, jelenleg nem áll rendelkezésre szerver a kezeléséhez, ezért a hiba.

3. lépés: A háttérrendszer konfigurálása

A háttérszakaszban meghatározzuk azokat a szervereket, amelyek kezelik a bejövő kéréseket. A terheléselosztó erre a szakaszra hivatkozik, hogy megtudja, hogyan kell elosztania a bejövő kéréseket, hogy ne legyen túlterhelt szerver.

A korábban kapott 503-as hiba azért volt, mert nem rendelkeztünk a kérések kezelésére szolgáló háttérrendszerrel. Kezdjük a „default_backend” meghatározásával a kérések kezelésére. A frontend szakaszban határozhatja meg. Erre az esetre „linux_backend”-nek neveztük el.

Ezután hozzon létre egy háttérszakaszt, amelynek neve megegyezik a frontend szakaszban meghatározott névvel. Ezután a „server” kulcsszót kell használnia, amelyet a szerver neve és IP-címe követ. A következő képen látható, hogy a „linuxhint1” szervert az IP 127.0.0.1 és a 8001-es port használatával határoztuk meg:

Lehetséges háttérkiszolgálók készlete, de erre az esetre csak egyet határoztunk meg. Győződjön meg arról, hogy elmenti a fájlt. Újra kell indítanunk a HAProxy szolgáltatást.

A létrehozott HAProxy terheléselosztó teszteléséhez Python3 használatával létrehozunk egy webszervert, amely az általunk megadott IP-címmel köti össze a háttérportokat. A parancsot a következőképpen futtatjuk:

$ python3 -m http.server 8001 --bind 127.0.0.1

Győződjön meg arról, hogy az értékeket úgy cseréli le, hogy azok megfeleljenek az IP-címének és a kötni kívánt portnak. Figyelje meg, hogyan jön létre a webszerver, és figyeli a bejövő kéréseket.

Egy másik terminálon használjuk a „curl” parancsot, hogy kérést küldjünk a szervernek.

$ curl

Ellentétben azzal, ahogy korábban megkaptuk az 503-as hibát, amely azt mutatja, hogy nincs elérhető szerver a kérés kezelésére, ezúttal egy olyan kimenetet kapunk, amely megerősíti, hogy a HAProxy terheléselosztónk működik.

Ha visszatér az előző terminálhoz, ahol létrehoztuk a webszervert, látni fogja, hogy egy 200-as sikeres kimenetet kapunk, amely megerősíti, hogy a HAProxy megkapta a kérést és kezelte azt úgy, hogy elküldte azt a háttérszakaszunkban meghatározott szerverre.

Így állíthat be egy egyszerű HAProxyt webhelyéhez vagy alkalmazásához.

Munka a szabályokkal

Mielőtt befejeznénk ezt a kezdő HAProxy oktatóanyagot, gyorsan beszéljünk arról, hogyan határozhatja meg azokat a szabályokat, amelyek irányítják a kérések terheléselosztó általi kezelését.

Ugyanazokat a lépéseket követve, mint korábban, hagyjuk érintetlenül az alapértelmezett szakaszunkat, és határozzuk meg a különböző IP-címeket a frontend részben. Ugyanazt az IP-címet kötjük, de elfogadjuk a különböző portokról érkező kapcsolatokat.

Ezen túlmenően van egy „default_backend” és egy másik „use_backend” is, amely egy másik szerverkészlet, amelyet attól függően fogunk használni, hogy melyik portról érkeznek a kérések. A következő konfigurációban a 81-es porton keresztül érkező összes kérést a „Linux2_backend” kiszolgálói kezelik. Minden egyéb kérést a „default_backend” kezel.

Ezután létrehozzuk a háttérszakaszokat a frontendben meghatározottak szerint. Vegye figyelembe, hogy minden háttérrendszerhez más szerverünk van, amelyet a kérések kezelésére használunk.

Gyorsan indítsa újra a HAProxy szolgáltatást.

Hozzuk létre a webszervert Python3 használatával, és kössük össze a kéréseket a 8002-es porton, amely az alternatív háttérkiszolgáló.

Amikor kéréseket küldünk neki, a 81-es portot adjuk meg, hogy a terheléselosztó elküldje a kéréseket az alternatív szervernek, amely nem az alapértelmezett.

Újraellenőrizve webszerverünket, azt látjuk, hogy sikerül fogadni és kezelni a kéréseket, és 200-as (sikeres) választ ad.

Így határozhatja meg azokat a szabályokat, amelyek meghatározzák, hogy a terheléselosztó hogyan fogadja és kezeli a kéréseket.

Következtetés

A HAProxy ideális megoldás a TCP/HTTP alkalmazások terheléselosztására. A telepítést követően kényelmesen szerkesztheti a konfigurációs fájlt az alapértelmezett beállítások, a frontend és a backend szakaszok meghatározásához, amelyek irányítják a terheléselosztó működését. Ez a bejegyzés a HAProxy kezdő útmutatója. A HAProxy és szolgáltatásai meghatározásával kezdődött. Ezt követően a HAProxy konfigurálásának megértésében merült ki, és egy példát mutatott be a HAProxy terheléselosztóként való használatára.