Bevezetés
A HAProxy, ami a High Availability Proxy rövidítése, egy széles körben használt TCP és HTTP alapú proxykiszolgáló, amely Linux, Solaris és FreeBSD rendszereken fut. Alkalmazások terheléskiegyenlítésére használják a kérések több kiszolgáló között történő elosztásával, valamint annak biztosítására, hogy az alkalmazások nagymértékben elérhetőek legyenek a felhasználók számára.
A CentOS 8 számos telepítésénél a HAProxy alapértelmezés szerint nincs úgy beállítva, hogy a napló kimenetét fájlba írja. Ez a gyorstalpaló bemutató elmagyarázza, hogyan konfigurálhatjuk a HAProxy naplózását az Rsysloggal egy Unix tartományi aljzat használatával a megbízhatóság, a sebesség és a biztonság érdekében.
Előfeltételek
A bemutató elvégzéséhez szükségünk lesz egy CentOS 8 rendszert futtató kiszolgálóra. A kiszolgálónak rendelkeznie kell egy rendszergazdai jogosultságokkal rendelkező, nem root felhasználóval. Ennek beállításához kövesse a CentOS 8 kezdeti szerverbeállítási útmutatóját.
1. lépés – A HAProxy telepítése és engedélyezése
A HAProxy telepítéséhez futtassa a következő dnf
parancsot:
- sudo dnf install haproxy
Amikor a Is this ok :
kérés megjelenik, írja be y
és nyomja meg a RETURN
gombot a csomag telepítéséhez.
Amikor telepítette a HAProxy-t, engedélyezze és indítsa el a systemctl
paranccsal:
- sudo systemctl enable haproxy.service
A következő kimenetet kell kapnia:
OutputCreated symlink /etc/systemd/system/multi-user.target.wants/haproxy.service → /usr/lib/systemd/system/haproxy.service.
Mivel a HAProxy szolgáltatás most engedélyezve van, elindíthatja, hogy megbizonyosodjon arról, hogy alapértelmezett konfigurációval fut a kiszolgálón:
- sudo systemctl start haproxy.service
Következő lépésként vizsgálja meg a HAProxy állapotát, hogy megbizonyosodjon arról, hogy fut:
- sudo systemctl status haproxy.service
A következő kimenetet kell kapnia. Figyelje meg a kimenet kiemelt active (running)
részét. Ha a kiszolgálója ugyanezt a kiemelt részt mutatja, akkor a HAProxy helyesen fut a kiszolgálón, és folytathatja a naplózás konfigurálását.
Output● haproxy.service - HAProxy Load Balancer Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2020-09-09 21:16:39 UTC; 4min 39s ago Process: 21340 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS) Main PID: 21341 (haproxy) Tasks: 2 (limit: 2881) Memory: 2.7M CGroup: /system.slice/haproxy.service ├─21341 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid. . .
Ha a kimenete más, vagy az állapot valami olyasmit mutat, mint Active: failed
, akkor kövesse a HAProxy gyakori hibáinak hibaelhárítása című útmutató hibaelhárítási lépéseit, hogy meghatározza, mi akadályozza a HAProxy helyes indítását.
Ha megerősítette, hogy a HAProxy engedélyezve van és fut, akkor folytathatja a következő lépéssel, amely a HAProxy naplózási direktíváinak konfigurálása.
2. lépés – A HAProxy naplózási direktívák konfigurálása
A HAProxy naplózási direktíváinak konfigurálásához nyissa meg a /etc/haproxy/haproxy.cfg
programot a vi
vagy a kívánt szerkesztőprogramban:
- sudo vi /etc/haproxy/haproxy.cfg
Nyomja meg a i
gombot a INSERT
módba való váltáshoz, majd keresse meg a log 127.0.0.1 local2
sort, és kommentálja ki a sor elejére egy #
karakter hozzáadásával, ahogy a következő példában kiemeltük:
. . .# 2) configure local2 events to go to the /var/log/haproxy.log# file. A line like the following can be added to# /etc/sysconfig/syslog## local2.* /var/log/haproxy.log# #log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid. . .
Ezután adjunk hozzá egy sort közvetlenül a kikommentált sor után a következő tartalommal:
log /dev/log local0
A teljes /etc/haproxy/haproxy.cfg
szakasznak, amelyet szerkesztettünk, a következő sorokat kell tartalmaznia:
. . .# local2.* /var/log/haproxy.log# #log 127.0.0.1 local2 log /dev/log local0 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid. . .
A chroot
sor azért fontos, mert ez korlátozza a HAProxy folyamatot arra, hogy csak a /var/lib/haproxy
könyvtárban lévő fájlokhoz férjen hozzá. A log /dev/log local0
sor létrehoz egy fájlt ebben a könyvtárban, amelyből az Rsyslog naplóbejegyzéseket fog gyűjteni.
Mihelyt befejezte a /etc/haproxy/haproxy.cfg
log
sorok szerkesztését, mentse és zárja be a fájlt a ESC
gomb megnyomásával, majd írja be a :wq
és a ENTER
gomb megnyomásával.
Az utolsó lépés, amit ebben a szakaszban el kell végeznie, a /var/lib/haproxy/dev
könyvtár létrehozása, mivel alapértelmezés szerint nem létezik.
Hozza létre a könyvtárat a mkdir
paranccsal, majd indítsa újra a HAProxy-t:
- sudo mkdir /var/lib/haproxy/dev
- sudo systemctl restart haproxy.service
Most már úgy konfigurálta a HAProxy-t, hogy a naplóit a /var/lib/haproxy/dev/log
-ban található Unix tartományi foglalatba küldje. A következő lépésben az Rsyslogot konfigurálja a socket létrehozására és elérésére.
3. lépés – Az Rsyslog konfigurálása a HAProxy naplók gyűjtésére
A CentOS 8 rendszerben a Rsyslog alapértelmezett konfigurációja nem kezeli a HAProxy naplókat. A HAProxy szolgáltatás naplóinak összegyűjtéséhez nyisson egy új /etc/rsyslog.d/99-haproxy.conf
fájlt a vi
vagy az Ön által preferált szerkesztőprogrammal:
- sudo vi /etc/rsyslog.d/99-haproxy.conf
Nyomja meg a i
gombot a INSERT
módba való váltáshoz, majd illessze be a következő sorokat a fájlba:
$AddUnixListenSocket /var/lib/haproxy/dev/log# Send HAProxy messages to a dedicated logfile:programname, startswith, "haproxy" { /var/log/haproxy.log stop}
A $AddUnixListenSocket
utasítás arra utasítja az Rsyslogot, hogy hozzon létre egy Unix tartományi foglalatot a megadott helyen, ebben az esetben a /var/lib/haproxy/dev/log
-ban. A :programname, startswith, "haproxy"
szakasz megadja azt a fájlt, ahová az Rsyslog a socketből begyűjtött naplóbejegyzéseket írja.
Amikor befejezte a /etc/rsyslog.d/99-haproxy.conf
szerkesztését, mentse és zárja le a fájlt a ESC
gomb megnyomásával, majd írja be a :wq
és a ENTER
gomb megnyomásával.
Most beállította az Rsyslogot, hogy a /var/lib/haproxy/dev/log
-ban lévő Unix tartományi socketből olvassa a naplóbejegyzéseket, és a /var/log/haproxy.log
-ban lévő naplófájlba írja azokat.
Az Rsyslog újraindítása előtt azonban meg kell határoznia, hogy a SELinux érvényesíti-e a hozzáférés-szabályozást a CentOS 8 rendszerén.
A SELinux aktuális házirendjének ellenőrzéséhez futtassa a következőket:
- getenforce
A következő kimenetek egyikét fogja kapni:
-
Enforcing
– Ebben a módban a SELinux érvényesíti a hozzáférés-szabályozást a rendszerén. Ki kell töltenie a következő opcionális 4. lépés – A SELinux konfigurálása részt. -
Permissive
– Ebben az esetben a SELinux minden hozzáférési kísérletet naplóz a naplófájljába, de nem hajtja végre a hozzáférés-szabályozást a rendszerén. -
Disabled
– Ha a SELinux ki van kapcsolva, akkor nem naplóz és nem hajt végre semmilyen hozzáférés-szabályozást a rendszerén.
Ha a getenforce
parancs Permissive
vagy Disabled
értéket adott vissza, akkor az Rsyslogot a következő paranccsal indíthatja újra:
- sudo systemctl restart rsyslog
Az Rsyslog újraindítása után a /etc/rsyslog.d/99-haproxy.conf
pontban konfigurált /var/log/haproxy.log
fájlban lévő naplókat tekintheti meg. Folytassa az 5. lépés – A HAProxy naplózás tesztelése című részt, hogy megbizonyosodjon arról, hogy minden az elvárásoknak megfelelően működik.
Máskülönben, ha a rendszerén a SELinux Enforcing
módban fut, akkor a bemutató következő szakasza elmagyarázza, hogyan kell hozzáadni egy modult, hogy az Rsyslog és a HAProxy kommunikálhasson egymással a közös Unix tartományi foglalaton keresztül.
4. lépés – (Opcionális) SELinux konfigurálása
Ha a CentOS 8 rendszerén a SELinux Enforcing
módban van konfigurálva, akkor engedélyeznie kell az Rsyslog számára a hozzáférést a HAProxy chroot
könyvtárához. A hozzáférés engedélyezése lehetővé teszi, hogy az Rsyslog létrehozza azt a Unix tartományi aljzatot, amelyre a HAproxy a naplóit küldi.
Ha nem ismeri a SELinuxot, akkor az An Introduction to SELinux on CentOS 7 című bemutató sorozat segít megtanulni a SELinux kezelését és interakcióját. Bár a CentOS 7-re íródott, a sorozatban szereplő elvek és parancsok ugyanúgy alkalmazhatóak a CentOS 8-ra is.
Az Rsyslog és a HAProxy hozzáférésének engedélyezéséhez a megosztott aljzatukhoz az első feladat egy Type Enforcement policy fájl létrehozása. Nyisson meg egy új, rsyslog-haproxy.te
nevű fájlt a vi
vagy a kívánt szerkesztőprogramban:
- vi rsyslog-haproxy.te
Nyomja meg a i
gombot a INSERT
módba való váltáshoz, majd illessze be a következő sorokat a fájlba:
module rsyslog-haproxy 1.0;require { type syslogd_t; type haproxy_var_lib_t; class dir { add_name remove_name search write }; class sock_file { create setattr unlink };}#============= syslogd_t ==============allow syslogd_t haproxy_var_lib_t:dir { add_name remove_name search write };allow syslogd_t haproxy_var_lib_t:sock_file { create setattr unlink };
Az első sor meghatározza a modul nevét és verzióját. A require
rész közli a SELinux modulbetöltővel, hogy milyen típusok és osztályok szükségesek a házirend modulként való betöltéséhez. Az utolsó két sor az Rsyslognak a HAProxy chroot
, illetve a socket fájlhoz való hozzáférését engedélyező szabályokat tartalmazza.
Amikor befejezte a fájl szerkesztését, mentse el és zárja be a ESC
gomb megnyomásával, majd írja be a :wq
és a ENTER
billentyűt.
Következő lépésként futtassa a következő parancsot a checkpolicy
csomag telepítéséhez, amely tartalmazza a checkmodule
segédprogramot, amellyel a Type Enforcement fájlt SELinux modullá alakíthatja.
- sudo dnf install checkpolicy
Most, hogy telepítette a checkmodule
eszközt, a következő lépés a modul lefordítása, majd betöltése a SELinuxba. A Type Enforcement fájl SELinux modullá történő lefordításához futtassa a következőt:
- checkmodule -M -m rsyslog-haproxy.te -o rsyslog-haproxy.mod
A következő lépésben futtassa a semodule_package
parancsot egy teljes házirendcsomag létrehozásához, amelyet a SELinux be tud tölteni a Linux kernelbe:
- semodule_package -o rsyslog-haproxy.pp -m rsyslog-haproxy.mod
A végső lépés a generált csomag betöltése a Linux kernelbe a semodule
parancs segítségével:
- sudo semodule -i rsyslog-haproxy.pp
A modul betöltése néhány másodpercet vehet igénybe. Miután a parancs befejeződött, a semodule
parancs futtatásával megerősítheti, hogy a modul betöltődött a kernelbe:
- sudo semodule -l |grep rsyslog-haproxy
A következő kimenethez hasonlót kell kapnia:
Outputrsyslog-haproxy
A modul betöltése után újraindíthatja az Rsyslogot a következő paranccsal:
- sudo systemctl restart rsyslog
Most definiált, lefordított és betöltött egy SELinux házirendet, amely lehetővé teszi a HAProxy és az Rsyslog számára a közös foglalaton keresztüli kommunikációt.
A következő lépésben tesztelni fogod, hogy minden működik-e azzal, hogy HTTP-kérést intézel a HAProxyhoz, és megvizsgálod az új naplófájlját.
5. lépés – A HAProxy naplózásának tesztelése
Most, hogy konfigurálta a HAProxy-t, az Rsyslogot és opcionálisan a SELinuxot, tesztelheti, hogy működik-e a naplózás a /var/log/haproxy.log
-re.
Az haproxy
csomag alapértelmezés szerint egy konfigurációs fájlt szállít, amely létrehoz egy HTTP listener foglalatot az 5000-es porton. A konfiguráció egy nem létező háttértár-kiszolgálóra mutat, így a portra érkező bármely kérés HTTP 503 hibát eredményez.
Az 503-as hiba ellenőrzéséhez a /var/log/haproxy.log
fájlban először generáljon egy HTTP-kérést a curl
segítségével, így:
- curl -si http://127.0.0.1:5000
A következő kimenetet kell kapnia:
OutputHTTP/1.0 503 Service UnavailableCache-Control: no-cacheConnection: closeContent-Type: text/html<html><body><h1>503 Service Unavailable</h1>No server is available to handle this request.</body></html>
Most vizsgálja meg a /var/log/haproxy.log
-t a grep
parancs segítségével, hogy van-e HTTP 503-as válasz:
- sudo grep -E 'NOSRV.+503' /var/log/haproxy.log
Megjegyzés: A parancs NOSRV.+503
része egy reguláris kifejezés. A Grep & szabályos kifejezések használata szövegminták kereséséhez Linuxban
című bemutató részletesebben foglalkozik a grep
és a szabályos kifejezések használatával.
Egy olyan sort (vagy több sort) kell kapnia, mint a következő:
OutputSep 9 21:32:22 centos-s-1vcpu-1gb-nyc3-01 haproxy: 127.0.0.1:56024 main app/<NOSRV> 0/-1/-1/-1/0 503 212 - - SC-- 1/1/0/0/0 0/0 "GET / HTTP/1.1"
Ez a sor megfelel az curl
kérésnek, amit tett, ami azt jelenti, hogy az Rsyslog és a HAProxy úgy van beállítva, hogy helyesen használja a közös foglalatot.
Következtetés
Ebben a gyorsindító bemutatóban a HAProxy-t úgy konfigurálta, hogy egy Unix tartományi foglalatra naplózzon. Az Rsyslogot is beállította a socket létrehozására és olvasására, hogy a két program kommunikálni tudjon egymással anélkül, hogy bármilyen TCP/IP portot megnyitna a rendszerén. Végül opcionálisan lefordított, csomagolt és betöltött egy SELinux házirendet, hogy engedélyezze az Rsyslog és a HAProxy közös hozzáférését a foglalatukhoz.