Kā iestatīt HAProxy kā slodzes līdzsvarotāju Nginx sistēmā CentOS 8


Lai nodrošinātu maksimālu tīmekļa lietojumprogrammu pieejamību, mērogojamību un augstu veiktspēju, tagad parasti tiek ieviestas tehnoloģijas, kas ievieš atlaišanu, piemēram, serveru kopēšana un slodzes līdzsvarošana. Piemēram, izveidojot serveru kopu, kas visi darbojas vienā un tajā pašā lietojumprogrammā (-ās), un pēc tam izvietojot slodzes līdzsvarotājus (-us) trafika sadalei.

HAProxy ir atvērta pirmkoda, jaudīgs, augstas veiktspējas, uzticams, drošs un plaši izmantots augstas pieejamības TCP/HTTP slodzes līdzsvarotājs, starpniekserveris un SSL/TLS terminators, kas paredzēts ļoti lielas trafika vietnēm. Tas droši darbojas labi Linux, Solaris, FreeBSD, OpenBSD, kā arī AIX operētājsistēmās.

Šajā rokasgrāmatā parādīts, kā CentOS 8 iestatīt īpašu augstas pieejamības slodzes līdzsvarotāju ar HAProxy, lai kontrolētu trafiku NGINX tīmekļa serveru klasterī. Tas arī parāda, kā konfigurēt SSL/TLS izbeigšanu HAProxy.

Kopā 4 serveri ar minimālu CentOS 8 instalāciju.

----------- 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

1. darbība: Nginx HTTP servera iestatīšana klienta mašīnās

1. Piesakieties visās savās CentOS 8 klienta mašīnās un instalējiet Nginx tīmekļa serveri, izmantojot dnf pakotņu pārvaldnieku, kā parādīts.

# dnf install Nginx

2. Pēc tam palaidiet pakalpojumu Nginx, pagaidām ļaujiet tam automātiski startēt sistēmas sāknēšanas laikā un apstipriniet, ka tas darbojas un darbojas, pārbaudot tā statusu, izmantojot komandas systemctl (dariet to visās klienta mašīnās).

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx

3. Ja ugunsmūra pakalpojums darbojas visās klienta mašīnās (kuras varat pārbaudīt, palaižot systemctl start firewalld), ugunsmūra konfigurācijā jāpievieno HTTP un HTTPS pakalpojumi, lai ļautu slodzes līdzsvarotāja pieprasījumiem iziet cauri ugunsmūrim. uz Nginx tīmekļa serveriem. Pēc tam atkārtoti ielādējiet ugunsmūra pakalpojumu, lai ieviestu jaunās izmaiņas (dariet to visās klientu mašīnās).

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

4. Pēc tam vietējās mašīnās atveriet tīmekļa pārlūku un pārbaudiet, vai Nginx instalācija darbojas labi. Izmantojiet klienta IP, lai pārvietotos. Kad redzat Nginx testa lapu, tas nozīmē, ka klienta mašīnā instalētais tīmekļa serveris darbojas pareizi.

5. Pēc tam mums klienta mašīnās jāizveido testa lapas, kuras vēlāk izmantosim, lai pārbaudītu HAProxy iestatīšanu.

----------- 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

2. darbība: HAProxy Server instalēšana un konfigurēšana CentOS 8

6. Tagad instalējiet HAProxy pakotni HAProxy serverī, izpildot šādu komandu.

# dnf install haproxy

7. Pēc tam palaidiet pakalpojumu HAProxy, ļaujiet tam automātiski startēt sistēmas sāknēšanas laikā un pārbaudiet tā statusu.

# systemctl start haproxy
# systemctl enable haproxy
# systemctl status haproxy

8. Tagad mēs konfigurēsim HAProxy, izmantojot šādu konfigurācijas failu.

# vi /etc/haproxy/haproxy.cfg

Konfigurācijas fails ir sadalīts četrās galvenajās sadaļās.

  • globālie iestatījumi - iestata visa procesa parametrus.
  • noklusējumi - šī sadaļa nosaka noklusējuma parametrus visām pārējām sekcijām pēc deklarēšanas.
  • frontend - šajā sadaļā aprakstīts klausīšanās ligzdu kopums, kas pieņem klienta savienojumus
  • Aizmugure - šajā sadaļā aprakstīts serveru kopums, ar kuru starpniekserveris izveidos savienojumu, lai pārsūtītu ienākošos savienojumus.

Lai izprastu globālo iestatījumu un noklusējuma opcijas, izlasiet HAProxy dokumentāciju (saite ir sniegta raksta beigās). Šajā rokasgrāmatā mēs izmantosim noklusējumus.

9. Pēc izvietošanas HAProxy būs nozīmīga loma jūsu IT infrastruktūrā, tādējādi pamatprasība ir tā konfigurēšana. tas ļauj iegūt ieskatu par katru savienojumu ar aizmugures tīmekļa serveriem.

Žurnāla parametrs (izcelts nākamajā ekrānuzņēmumā) paziņo par globālo Syslog serveri (piemēram, rsyslog par noklusējumu CentOS), kas saņems žurnāla ziņojumus. Šeit var deklarēt vairākus serverus.

Noklusējuma konfigurācija norāda uz localhost (127.0.0.1), un local2 ir noklusējuma objekta kods, ko izmanto, lai identificētu HAProxy žurnāla ziņojumus zem rsyslog.

10. Tālāk jums jāpasaka rsyslog serverim, kā saņemt un apstrādāt HAProxy žurnāla ziņojumus. Atveriet rsyslog konfigurācijas failu mapē /etc/rsyslog.conf vai direktorijā /etc/rsyslog.d izveidojiet jaunu failu, piemēram, /etc/rsyslog.d/haproxy.conf.

# vi /etc/rsyslog.d/haproxy.conf

Nokopējiet un ielīmējiet šādu konfigurāciju, lai noklusējuma 514 portā apkopotu žurnālu ar UDP.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Pievienojiet arī šīs rindas, lai norādītu rsyslog rakstīt divos atsevišķos žurnāla failos, pamatojoties uz smaguma pakāpi, kur local2 ir objekta kods, kas definēts iepriekš HAProxy konfigurācijā.

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

11. Saglabājiet failu un aizveriet to. Pēc tam restartējiet pakalpojumu rsyslog, lai lietotu pēdējās izmaiņas.

# systemctl restart rsyslog

12. Šajā sadaļā mēs parādīsim, kā konfigurēt priekšgala un aizmugures starpniekserverus. Atgriezieties pie HAProxy konfigurācijas faila un modificējiet noklusējuma priekšgala un aizmugures sadaļas šādi. Mēs neiedziļināsimies katra parametra detalizētā skaidrojumā, jūs vienmēr varat atsaukties uz oficiālo dokumentāciju.

Šajā konfigurācijā ir definēta klausīšanās sadaļa, ko izmanto, lai apkalpotu lapu HAProxy Stats. Saistīšanas parametrs piešķir klausītājam noteiktu IP adresi ( * visiem šajā gadījumā) un portu (9000).

Stats iespējošanas iestatījums ļauj statistikas lapai, kurai piekļūs, izmantojot URI/stats (t.i., http:// server_ip: 9000/stats ).

Stats auth iestatījums tiek izmantots, lai pievienotu pamata autentifikāciju, piekļūstot lapai (aizvietojiet haproksi un [email ar izvēlēto lietotājvārdu un paroli).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:[email 

13. Nākamajā konfigurācijā ir definēta frontend sadaļa ar nosaukumu TL (jūs varat norādīt sev tīkamu nosaukumu). Mode režīms nosaka režīmu, kurā darbojas HAProxy.

Acl (Piekļuves kontroles saraksts) parametrs tiek izmantots, lai pieņemtu lēmumu, pamatojoties uz saturu, kas iegūts no pieprasījuma. Šajā piemērā pieprasījums tiek uzskatīts par vienkāršu HTTP, ja tas nav izveidots, izmantojot SSL.

Tad HTTP-pieprasījuma kopas galvenes iestatījums tiek izmantots, lai pieprasījumam pievienotu HTTP galveni. Tas palīdz informēt Nginx, ka sākotnējais pieprasījums tika veikts, izmantojot HTTP (vai izmantojot 80. portu).

Direktīva default_backend vai use_backend definē aizmugures serverus, šajā gadījumā uz kuriem atsaucas TL_web_servers.

Ņemiet vērā, ka HAProxy atgriezīs kļūdu “503 Service Unavailable error”, ja pieprasījums netiek maršrutēts ar use_backend vai default_backend direktīvu.

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. Tad mums ir jādefinē aizmugures sadaļa, kur bilances iestatījums nosaka, kā HAProxy izvēlas aizmugures serverus, lai apstrādātu pieprasījumu, ja neviena noturības metode neņem vērā šo izvēli.

Sīkfailu direktīva nodrošina pastāvīgumu uz sīkfailiem, tā uzdod HAProxy nosūtīt klientam sīkfailu ar nosaukumu SERVERID un saistīt to ar tā servera ID, kurš sniedza sākotnējo atbildi.

Servera direktīva tiek izmantota augšupējo serveru definēšanai formātā sever_name (piem., Websrv1), server_IP: ports un opcijas.

Viena no galvenajām iespējām ir pārbaude, kas liek HAProxy turpināt pārbaudīt servera pieejamību un ziņot statistikas lapā.

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

Komentējiet visas citas priekšējās un aizmugures sadaļas, kā parādīts nākamajā ekrānuzņēmumā. Saglabājiet failu un aizveriet to.

15. Tagad restartējiet pakalpojumu HAProxy, lai lietotu jaunās izmaiņas.

# systemctl restart haproxy

16. Pēc tam pārliecinieties, ka ugunsmūrī ir atvērti HTTP (80. ports) un HTTPS (433. ports) pakalpojumi, lai klienta pieprasījumus pieņemtu šādi. Atveriet arī ugunsmūra 9000 portu, lai piekļūtu statistikas lapai, un atkārtoti ielādējiet ugunsmūra iestatījumus.

# 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

3. darbība: HAProxy iestatīšanas pārbaude un statistikas skatīšana

17. Tagad ir laiks pārbaudīt HAPrxoy iestatīšanu. Vietējā darbvirsmā, no kuras piekļūstat visiem serveriem, failā/etc/hosts pievienojiet šādu rindu, lai mēs varētu izmantot manekena vietnes domēnu.

10.42.0.247  www.tecmint.lan

18. Pēc tam atveriet pārlūkprogrammu un pārvietojieties, izmantojot servera adresi vai vietnes domēnu.

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

19. Lai piekļūtu HAProxy statistikas lapai, izmantojiet šādu adresi.

http://10.42.0.247:9000/stats

Pēc tam izmantojiet HAProxy konfigurācijas failā noteikto lietotājvārdu un paroli (skatiet stats auth parametru).

Pēc veiksmīgas pieteikšanās jūs nokļūsit HAProxy statistikas lapā, kurā parādīta metrika, kas aptver jūsu serveru stāvokli, pašreizējos pieprasījumu līmeņus, atbildes laikus un daudz ko citu.

Lai parādītu, kā statusa pārskats darbojas attiecībā uz krāsu kodiem, esam izveidojuši vienu no aizmugures serveriem.

4. darbība: HTTPS konfigurēšana HAProxy, izmantojot pašparakstītu SSL sertifikātu

20. Šajā pēdējā sadaļā mēs parādīsim, kā konfigurēt SSL/TLS, lai nodrošinātu visu saziņu starp HAProxy serveri un klientu. HAProxy atbalsta četrus galvenos HTTPS konfigurācijas režīmus, taču šajā rokasgrāmatā mēs izmantosim SSL/TLS izkraušanu.

SSL/TLS izkraušanas režīmā HAProxy atšifrē trafiku klienta pusē un skaidrā datplūsmā tiek savienots ar aizmugures serveriem.

Mēs sāksim ar sertifikāta un atslēgas izveidošanu, kā parādīts (atbilstoši atbildiet uz jautājumiem, pamatojoties uz uzņēmuma informāciju sertifikāta izveides laikā, kā norādīts ekrānuzņēmumā).

# 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. Pēc tam atveriet HAProxy konfigurācijas failu (/etc/haproxy/haproxy.cfg) un rediģējiet priekšgala sadaļu.

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

Saglabājiet failu un aizveriet to.

22. Pēc tam restartējiet pakalpojumu HAProxy, lai lietotu jaunās izmaiņas.

# systemctl restart haproxy.service

23. Pēc tam atveriet tīmekļa pārlūku un mēģiniet vēlreiz piekļūt vietnei. Pārlūkprogrammā tiks parādīta kļūda pašparakstīta sertifikāta dēļ, noklikšķiniet uz Papildu, lai turpinātu.

Tas pagaidām ir viss! Katrai tīmekļa lietojumprogrammai ir savs prasību kopums, jums jāveido un jākonfigurē slodzes līdzsvarošana, lai tā atbilstu jūsu IT infrastruktūrai un lietojumprogrammas prasībām.

Lai iegūtu plašāku ieskatu par dažām šajā rokasgrāmatā izmantotajām konfigurācijas opcijām un par to, kā parasti izmantot HAProxy, skatiet oficiālo HAProxy uzņēmuma versijas dokumentāciju. Jebkurus jautājumus vai domas varat ievietot, izmantojot zemāk esošo atsauksmju veidlapu.