Kuinka määrittää HAProxy Nginxin kuormituksen tasapainottajaksi CentOS 8:ssa


Verkkosovellusten maksimaalisen käytettävyyden, skaalautuvuuden ja korkean suorituskyvyn varmistamiseksi on nykyään yleistä ottaa käyttöön redundanssia tuovia teknologioita, kuten palvelinklusterointi ja kuormituksen tasapainotus. Voit esimerkiksi perustaa klusterin palvelimia, jotka kaikki käyttävät samoja sovelluksia, ja sitten ottaa käyttöön kuormituksen tasapainottimet liikenteen jakamiseksi.

HAProxy on avoimen lähdekoodin, tehokas, tehokas, luotettava, turvallinen ja laajalti käytetty korkean käytettävyyden TCP/HTTP-kuormituksen tasapainotin, välityspalvelin ja SSL/TLS-päätelaite erittäin suuren liikenteen Web-sivustot. Se toimii luotettavasti Linuxissa, Solarisissa, FreeBSD:ssä, OpenBSD:ssä sekä AIX-käyttöjärjestelmissä.

Tämä opas näyttää, kuinka voit määrittää erityisen korkean käytettävyyden kuormituksen tasapainottimen HAProxyn avulla CentOS 8:ssa hallitsemaan liikennettä NGINX-verkkopalvelimien klusterissa. Se myös näyttää, kuinka SSL/TLS-päättäminen määritetään HAProxyssa.

Edellytykset:

Yhteensä 4 palvelinta minimaalisella CentOS 8 -asennuksella.

Testiympäristön asetukset

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

Vaihe 1: Nginx HTTP -palvelimen määrittäminen asiakaskoneisiin

1. Kirjaudu kaikkiin CentOS 8 -asiakaskoneisiisi ja asenna Nginx-verkkopalvelin käyttämällä dnf-pakettienhallintaa kuvan mukaisesti.

dnf install Nginx

2. Käynnistä seuraavaksi Nginx-palvelu. Salli sen käynnistyminen automaattisesti järjestelmän käynnistyksen yhteydessä ja varmista, että se on käynnissä tarkistamalla sen tila systemctl-komennolla. komennot (tee tämä kaikilla asiakaskoneilla).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Jos palomuuripalvelu on käynnissä kaikissa asiakaskoneissa (jotka voit tarkistaa suorittamalla systemctl start firewalld), sinun on lisättävä HTTP ja HTTPS-palvelut palomuurin määrityksissä, jotta kuormantasaajan pyynnöt kulkevat palomuurin läpi Nginx-verkkopalvelimille. Lataa sitten palomuuri-palvelu uudelleen tehdäksesi uudet muutokset (tee tämä kaikissa asiakaskoneissa).

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. Avaa seuraavaksi verkkoselain paikallisilla koneillasi ja testaa, toimiiko Nginx-asennus hyvin. Käytä asiakkaan IP-osoitetta navigointiin. Kun näet Nginx-testisivun, se tarkoittaa, että asiakaskoneeseen asennettu verkkopalvelin toimii oikein.

5. Seuraavaksi meidän on luotava asiakaskoneille testisivut, joita käytämme myöhemmin HAProxy-asennuksen testaamiseen.

----------- Web Server #1 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

Vaihe 2: HAProxy-palvelimen asentaminen ja määrittäminen CentOS 8:ssa

6. Asenna nyt HAProxy-paketti HAProxy-palvelimeen suorittamalla seuraava komento.

dnf install haproxy

7. Käynnistä seuraavaksi HAProxy-palvelu, ota se käyttöön automaattisesti järjestelmän käynnistyksen yhteydessä ja tarkista sen tila.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Nyt määritämme HAProxyn käyttämällä seuraavaa asetustiedostoa.

vi /etc/haproxy/haproxy.cfg

Asetustiedosto on jaettu neljään suureen osaan.

  • yleiset asetukset – määrittää prosessin laajuiset parametrit.
  • oletukset – tämä osio määrittää oletusparametrit kaikille muille osioille sen ilmoittamisen jälkeen.
  • käyttöliittymä – tässä osiossa kuvataan joukko kuunteluliitäntöjä, jotka hyväksyvät asiakasyhteydet.
  • Taustapalvelu – tässä osiossa kuvataan joukko palvelimia, joihin välityspalvelin muodostaa yhteyden tulevien yhteyksien välittämiseksi.

Jos haluat ymmärtää yleiset asetukset ja oletukset -vaihtoehdot, lue HAProxy-dokumentaatio (linkki artikkelin lopussa). Tässä oppaassa käytämme oletusasetuksia.

HAProxy-lokin määrittäminen

9. Kun HAProxy on otettu käyttöön, sillä on merkittävä rooli IT-infrastruktuurissasi, joten sen kirjaamisen määrittäminen on perusvaatimus. Tämän avulla voit saada käsityksiä jokaisesta yhteydestä backend-verkkopalvelimillesi.

Loki-parametri (korostettu seuraavassa kuvakaappauksessa) ilmoittaa maailmanlaajuisen Syslog-palvelimen (kuten rsyslogin oletusarvo CentOS:ssä), joka vastaanottaa lokiviestejä. Täällä voidaan ilmoittaa useampi kuin yksi palvelin.

Oletusmääritys osoittaa localhostiin (127.0.0.1) ja local2 on oletustoimintokoodi, jota käytetään tunnistamaan HAProxy-lokiviestit kohdassa rsyslog.

10. Seuraavaksi sinun on kerrottava rsyslog-palvelimelle, kuinka HAProxy-lokiviestit vastaanotetaan ja käsitellään. Avaa rsyslog-määritystiedosto osoitteeseen /etc/rsyslog.conf tai luo uusi tiedosto /etc/rsyslog.d-hakemistoon, esimerkiksi /etc/rsyslog. .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

Kopioi ja liitä seuraavat asetukset kerätäksesi lokin UDP:llä oletusportissa 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Lisää nämä rivit myös ohjeeksi rsyslog kirjoittamaan kahteen eri lokitiedostoon vakavuuden perusteella, missä local2 on yllä olevassa HAProxy-määrityksessä määritetty toimitilakoodi.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. Tallenna tiedosto ja sulje se. Käynnistä sitten rsyslog-palvelu uudelleen ottaaksesi viimeaikaiset muutokset käyttöön.

systemctl restart rsyslog

HAProxy-etuosan ja -taustaosien määrittäminen

12. Tässä osiossa esittelemme, miten käyttöliittymän ja taustan välityspalvelimet määritetään. Palaa HAProxy-määritystiedostoon ja muokkaa oletusarvoisia käyttöliittymä- ja taustaosioita seuraavasti. Emme mene yksityiskohtaiseen selittämiseen jokaisesta parametrista, voit aina viitata viralliseen dokumentaatioon.

Seuraavat asetukset määrittelevät kuunteluosion, jota käytetään HAProxy Stats -sivun näyttämiseen. Parametri bind määrittää kuuntelijan tietylle IP-osoitteelle (tässä tapauksessa * kaikille) ja portille (9000 >).

Tilastot käytössä -asetus ottaa käyttöön tilastosivun, jolle avataan URI /stats (eli http://server_ip:9000/stats). .

Tilastojen todennus-asetusta käytetään lisäämään perustodennus sivua käytettäessä (korvaa haproxy ja Lostp@1ss käyttäjänimelläsi ja salasanallasi. valinta).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. Seuraavassa määrityksessä määritellään käyttöliittymäosio, jonka nimi on TL (voit antaa mieleisesi nimen). Parametri mode määrittää tilan, jossa HAProxy toimii.

acl-parametria (Access Control List) käytetään päätöksen tekemiseen pyynnöstä poimitun sisällön perusteella. Tässä esimerkissä pyyntöä pidetään tavallisena HTTP:nä, jos se ei ole tehty SSL:n kautta.

Sitten http-request set-header -asetusta käytetään HTTP-otsikon lisäämiseen pyyntöön. Tämä auttaa ilmoittamaan Nginxille, että alkuperäinen pyyntö tehtiin HTTP:n kautta (tai portin 80 kautta).

default_backend- tai use_backend-direktiivi määrittää taustapalvelimet, joihin tässä tapauksessa viittaa TL_web_servers.

Huomaa, että HAProxy palauttaa 503 Service Unavailable -virheen, jos pyyntöä ei reititä use_backend tai default_backend. > direktiiviä.

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14. Sitten meidän on määritettävä taustaosa, jossa saldo-asetus määrittää, kuinka HAProxy valitsee taustapalvelimet käsittelemään pyynnön, jos ei pysyvyysmenetelmä ohittaa tämän valinnan.

Eväste-direktiivi mahdollistaa evästepohjaisen pysyvyyden, ja se kehottaa HAProxya lähettämään SERVERID-nimisen evästeen asiakkaalle ja liittääksesi sen alkuperäisen vastauksen antaneen palvelimen tunnukseen.

Server-direktiiviä käytetään määrittämään ylävirran palvelimet muodossa palvelimen_nimi (esim. websrv1), server_IP:port ja vaihtoehdot.

Yksi keskeinen vaihtoehto on check, joka käskee HAProxyn tarkistamaan palvelimen saatavuuden ja raportoimaan tilastosivulla.

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

Kommentoi muut käyttöliittymä- ja taustaosat seuraavan kuvakaappauksen mukaisesti. Tallenna tiedosto ja sulje se.

15. Ota uudet muutokset käyttöön käynnistämällä HAProxy-palvelu uudelleen.

systemctl restart haproxy

16. Varmista seuraavaksi, että HTTP (portti 80) ja HTTPS (portti 433)) palvelut avataan palomuurissa asiakkaiden pyyntöjen hyväksymiseksi seuraavasti. Avaa myös palomuurin portti 9000, jotta pääset tilastosivulle ja lataa palomuurin asetukset uudelleen.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent –add-service=https
firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --reload

Vaihe 3: HAProxy-asetusten testaus ja tilastojen katselu

17. Nyt on aika testata HAPRxoy -asetuksia. Lisää seuraava rivi /etc/hosts-tiedostoon paikallisella työpöytäkoneella, josta käytät kaikkia palvelimia, jotta voimme käyttää valesivuston toimialuetta.

10.42.0.247  www.tecmint.lan

18. Avaa sitten selain ja siirry joko palvelimen osoitteen tai sivuston verkkotunnuksen avulla.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. Siirry HAProxy -tilastosivulle käyttämällä seuraavaa osoitetta.

http://10.42.0.247:9000/stats

Käytä sitten HAProxy-määritystiedostossa määrittämääsi käyttäjätunnusta ja salasanaa (katso stats auth -parametri).

Onnistuneen kirjautumisen jälkeen pääset HAProxy -tilastosivulle, joka näyttää mittareita, jotka kattavat palvelimiesi kunnon, nykyiset pyyntöprosentit, vastausajat ja paljon muuta.

Havainnollistaaksemme, miten tilaraportti toimii värikoodien toiminnassa, olemme asentaneet yhden taustapalvelimista.

Vaihe 4: HTTPS:n määrittäminen HAProxyssa käyttämällä itse allekirjoitettua SSL-sertifikaattia

20. Tässä viimeisessä osiossa näytämme, kuinka SSL/TLS määritetään suojaamaan kaikki HAProxy-palvelimen ja asiakkaan välinen tietoliikenne. HAProxy tukee neljää pääasiallista HTTPS-määritystilaa, mutta tässä oppaassa käytämme SSL/TLS-latausta.

SSL/TLS-lataustilassa HAProxy tulkitsee asiakaspuolen liikenteen ja muodostaa selkeän yhteyden taustapalvelimiin.

Aloitamme luomalla varmenteen ja avaimen kuvan mukaisesti (vastaa kysymyksiin vastaavasti yrityksesi tietojen perusteella varmenteen luomisen aikana, kuten kuvakaappauksessa on korostettu).

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
cd /etc/ssl/tecmint.lan/
cat tecmint.crt tecmint.key >tecmint.pem
ls -l

21. Avaa seuraavaksi HAProxy-määritystiedosto (/etc/haproxy/haproxy.cfg) ja muokkaa käyttöliittymäosiota.

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

Tallenna tiedosto ja sulje se.

22. Käynnistä sitten HAProxy-palvelu uudelleen ottaaksesi käyttöön uudet muutokset.

systemctl restart haproxy.service

23. Avaa seuraavaksi verkkoselain ja yritä käyttää sivustoa vielä kerran. Selain näyttää virheilmoituksen itse allekirjoitetun varmenteen vuoksi. Jatka valitsemalla Lisäasetukset.

Tässä kaikki tältä erää! Jokaisella verkkosovelluksella on omat vaatimukset, sinun on suunniteltava ja määritettävä kuormituksen tasapainotus IT-infrastruktuurisi ja sovelluksesi vaatimuksiin sopivaksi.

Saat lisätietoja joistakin tässä oppaassa käytetyistä määritysvaihtoehdoista ja yleisesti HAProxyn käytöstä tutustumalla viralliseen HAProxy Community Edition -dokumentaatioon tai HAProxyn yritysversion dokumentaatioon. Voit lähettää kysymyksiä tai ajatuksia alla olevan palautelomakkeen kautta.