Vyrovnávanie záťaže HAProxy medzi webovými servermi Nginx

V tomto článku ukážeme nastavenie plánovača. HAProxy pre dva servery s nainštalovaným webovým serverom Nginx (môže byť nahradený Apache). Vo všetkých prípadoch sa ako OS používa CentOS.

HAProxy - serverový softvér na poskytovanie vysokej dostupnosti a vyrovnávania záťaže pre aplikácie TCP a HTTP distribúciou prichádzajúcich požiadaviek na niekoľko serverov. HAProxy sa používa na mnohých populárnych zdrojoch vrátane cvrlikání, Instagram, Github, AVITA, Amazonka a ďalšie.

HAProxy je nainštalovaný na samostatnom serveri, ktorý prijíma požiadavky klientov a presmeruje ich na webové servery Nginx. Všeobecná architektúra systému je uvedená nižšie..

obsah:

  • Konfigurácia Nginx na serveroch typu backend
  • Konfigurácia vyrovnávača zaťaženia HAProxy
  • Možnosti konfiguračného súboru Haproxy.cfg
  • Zhromažďovanie štatistík HAProxy

Konfigurácia Nginx na serveroch typu backend

Začnime inštaláciou a konfiguráciou Nginx na našich webových serveroch, medzi ktorými bude zaťaženie vyvážené. Nainštalujte úložisko EPEL a samotné nginx pomocou yum:

#yum install epel-release -y
#yum install nginx -y

Inštaláciu som vykonal naraz na dvoch serveroch, pretože servery sú nakonfigurované jeden po druhom (na paralelné vykonávanie príkazov na viacerých serveroch môžete použiť pdsh).

Ďalej v konfiguračných súboroch Nginx.conf Upozorňujeme, že servery by mali spracovávať iba požiadavky zo servera HaProxy a backend serverov:

1. backend server:

server listen current_server_IP: 80 default_server; povoliť IP_server_backend_server; povoliť IP_haproxy; odmietnuť všetky; názov_servera _; root / usr / share / nginx / html; # Načítať konfiguračné súbory pre predvolený blok servera. zahŕňajú /etc/nginx/default.d/*.conf; miesto /  

2. backend server:

server listen current_server_IP: 80 default_server; povoliť IP_first_backend_server; povoliť IP_haproxy; odmietnuť všetky; názov_servera _; root / usr / share / nginx / html; # Načítať konfiguračné súbory pre predvolený blok servera. zahŕňajú /etc/nginx/default.d/*.conf; miesto /  

Konfigurácia nginx je štandardná, do ktorej sme práve pridali počúvať IP a uzavretý prístup ku všetkým okrem našich serverov pomocou smerníc dovoliť a poprieť.

Aby webový server fungoval, musíte otvoriť brány firewall pomocou brány firewall alebo iptables:

# firewall-cmd - permanentný -add-service = http
# firewall-cmd -reload

Vykonajte testovú kontrolu na ktoromkoľvek zo serverov typu backend:

[root @ server ~] # curl IP_vtorogo_servera

 tu by ste mali dostať html dokument 

Server poskytol štandardný indexový súbor nginx, čo znamená, že servery navzájom interagujú.

Kvôli uľahčeniu overovania som zmenil obsah indexového súboru na každom serveri typu backend, aby som počas testovania jasne videl v prehliadači, ktorý server spracoval požiadavku..

Indexový súbor nginx sa nachádza v / usr / share / nginx / html /.

Konfigurácia vyrovnávača zaťaženia HAProxy

Začnime inštaláciou a konfiguráciou HAProxy na serveri, ktorý sa použije ako vyrovnávač záťaže.

Nainštalujte HaProxy a vykonajte základné nastavenia pre balancer.

#yum install epel-release -y

#yum nainštaluje haproxy -y

Načítané doplnky: najrýchlejší načítavanie rýchlosti zrkadla z vyrovnávacej pamäte epf hostiteľa / x86_64 / metalink ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ transakcia Inštalácia: haproxy-1.5.18-9.el7.x86_64 1/1 Overovanie: haproxy-1.5.18-9.el7.x86_64 1/1 Nainštalované: haproxy.x86_64 0: 1.5.18-9.el7 Complete! 

Ak chcete povoliť HaProxy, musíte pridať Povolené = 1 do súboru / etc / default / haproxy:

#nano / etc / default / haproxy

Teraz prejdeme na samotné nastavenie HaProxy. V našej najjednoduchšej konfigurácii vyrovnávací server spracuje všetky požiadavky http a odošle ich postupne serverom backend.

#nano /etc/haproxy/haproxy.cfg

log / dev / log local0 chroot / var / lib / haproxy pidfile /var/run/haproxy.pid maxconn 4000 užívateľ haproxy skupina haproxy predvolené režimy démon http log globálna voľba httplog voľba redispatch načíta 3 timeout http-žiadosť 10s timeout front 1m timeout connect 10s timeout klient 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 frontend www väzba balancer IP: 80 default_backend nginx_pool backend nginx_pool bilancia roundrobin režim http server web1 first_backend_server IP: 80 check server web2 80 second_backend_server: 

Po uložení konfigurácie skontrolujte syntax pomocou príkazu:

#haproxy -f /etc/haproxy/haproxy.cfg -c

Ak je všetko v poriadku, získate podobný výsledok:

Konfiguračný súbor je platný

Potom musíte reštartovať HaProxy a pridať jeho spustenie CentOS. A tiež otvorte potrebné pravidlá pre firewall.

#systemctl reštartujte haproxy

#systemctl povolí haproxy

# firewall-cmd -permanent -add-service = http

# firewall-cmd -reload

Týmto sa dokončí nastavenie balanceru a skontrolujte výsledok otvorením IP servera s HaProxy v prehliadači:

Ako vidíte, oba servery dodávali obsah postupne, vyvažovač funguje.

Možnosti konfiguračného súboru Haproxy.cfg

Zvážte hlavné príklady algoritmov prevádzky HaProxy:

  • roundrobin - predvolený algoritmus zasiela požiadavky serverom. V našom príklade sme použili iba takúto metódu;
  • leastconn - vyberie server s najmenším počtom aktívnych pripojení. Odporúča sa aplikovať na projekty, na ktorých sa môžu relácie zúčastňovať dlhší čas.
  • zdroj - vyberie server založený na hashe vytvorenom na základe používateľov IP. V tomto režime činnosti bude rovnaký klient vždy pristupovať k rovnakému serveru, ak jeho IP zostane nezmenená;

Pozrime sa na niektoré parametre v konfiguračnom súbore.

blok globálnej:

  • log - udržujte prihlásenie / dev / log ukladaním local0 do „objektu“;
  • chroot - bezpečnostné nastavenia, ktoré zamykajú HAProxy v zadanom adresári;
  • maxconn - maximálny počet konkurenčných spojení na proces;
  • user - užívateľ, v mene ktorého sa program spustí;
  • skupina - skupina používateľov, v mene ktorej bude program spustený;
  • daemon - spustenie procesu ako démona.

blok štandardné. Táto časť popisuje predvolené nastavenia pre všetky nasledujúce sekcie, ktoré nasledujú:

  • log - označuje, ktorý protokol sa má zaznamenať (globálny v tomto prípade znamená, že sa používajú parametre uvedené v globálnej časti);
  • režim - nastaví protokol interakcie, vezme jednu z hodnôt: tcp, http alebo health;
  • opakovanie - počet pokusov o pripojenie k serveru v prípade zlyhania;
  • voľba httplog - formát protokolu, v prípade použitia HAProxy na proxy požiadavky HTTP;
  • voľba spätné odoslanie - Umožňuje programu ukončiť a znovu priradiť reláciu v prípade zlyhania servera;
  • contimeout - maximálny čas čakania na úspešné pripojenie k serveru.

S rôznym časovým limitom je tiež spojené veľké množstvo parametrov.

Zhromažďovanie štatistík HAProxy

Pridajte blok štatistík do konfiguračného súboru:

štatistiky počúvania väzba: 10001 štatistiky umožňujú štatistiku uri / haproxy_stats štatistiky auth admin: admin 

Popis:

  • viažu - port, na ktorom bude zobrazovanie štatistík fungovať;
  • štatistiky umožniť - zahŕňajú správy so štatistikami;
  • štatistiky uri - nastavenie adresy stránky so štatistikou;
  • štatistiky auth - prihlasovacie meno a heslo.
Môžete zadať akýkoľvek port, ktorý vám vyhovuje, ak je uvedený v článku zaneprázdnený alebo pre vás nevhodný.

Aby naše haproxy_stats fungovali, musíte tiež otvoriť predtým určený port na bráne firewall:

firewall-cmd - permanentný -add-port = 10001 / tcp

firewall-cmd-reload

Ak chcete zobraziť správy o práci HAProxy, musíte kliknúť na odkaz:

http: // hostname_haproxy: 10001 / haproxy_stats

V prehliadači otvorte adresu balanceru a začnite spamovať F5. Štatistika zadaného odkazu sa zmení, pomôcka funguje.

Týmto je naše nastavenie dokončené. V článku sme skúmali základnú konfiguráciu HaProxy. V našom návrhu sa server vyrovnávania záťaže HaProxy stáva jediným bodom zlyhania. Ak chcete zvýšiť odolnosť konfigurácie proti chybám, môžete pridať druhý server HaProxy a skontrolovať dostupnosť medzi servermi pomocou funkcie Keepalived. Získate niečo také.

Existuje mnoho ďalších možností použitia modulu HAProxy a vždy v ňom nájdete aplikáciu..